Panduan Lengkap: Cara Deploy Aplikasi Node.js ke VPS Ubuntu dengan PM2 dan Nginx

Melihat aplikasi Node.js yang Anda bangun berjalan lancar di localhost adalah satu hal, namun membawanya ke lingkungan produksi agar bisa diakses oleh siapa saja di seluruh dunia adalah tantangan sekaligus kepuasan tersendiri bagi setiap developer. Proses deployment seringkali dianggap rumit, terutama bagi pemula. Namun, dengan panduan yang tepat, Anda bisa menjadikan VPS Ubuntu sebagai rumah yang kokoh untuk aplikasi Node.js Anda.

Panduan ini akan membawa Anda langkah demi langkah dalam proses deployment aplikasi Node.js ke VPS Ubuntu, mulai dari persiapan awal hingga konfigurasi Nginx sebagai reverse proxy dan penggunaan PM2 untuk manajemen proses. Kita juga akan membahas cara mengamankan aplikasi Anda dengan HTTPS menggunakan Let’s Encrypt, memastikan aplikasi Anda tidak hanya berjalan, tetapi juga aman dan handal.

Mari kita mulai perjalanan Anda menempatkan aplikasi Node.js di lingkungan produksi yang sesungguhnya.

Prasyarat dan Persiapan Awal

Sebelum kita terjun lebih dalam ke proses instalasi dan konfigurasi, pastikan Anda telah memenuhi beberapa prasyarat dasar ini:

  • VPS (Virtual Private Server) dengan Ubuntu Server: Pastikan Anda memiliki akses root atau user dengan hak sudo ke VPS yang telah terinstal Ubuntu Server (disarankan versi 20.04 LTS atau yang lebih baru). Contoh penyedia VPS populer adalah DigitalOcean, Linode, Vultr, atau AWS EC2.
  • Aplikasi Node.js yang Siap Deploy: Aplikasi Anda harus sudah lengkap dengan file package.json dan semua dependensi yang diperlukan. Pastikan aplikasi dapat berjalan tanpa masalah di lingkungan lokal Anda.
  • Klien SSH: Untuk mengakses VPS Anda dari komputer lokal. Pengguna Linux/macOS dapat menggunakan Terminal, sedangkan pengguna Windows bisa menggunakan PuTTY atau klien SSH bawaan di PowerShell/CMD.
  • Domain (Opsional tapi Direkomendasikan): Meskipun Anda bisa menggunakan alamat IP VPS, menggunakan domain akan mempermudah akses dan merupakan prasyarat untuk sertifikat SSL/TLS (HTTPS). Pastikan record A domain Anda sudah mengarah ke IP publik VPS.

Langkah 1: Koneksi ke VPS dan Update Sistem

Langkah pertama adalah terhubung ke VPS Anda melalui SSH dan memastikan sistem operasi Ubuntu Anda mutakhir. Ini penting untuk keamanan dan kompatibilitas paket.

Koneksi via SSH

Buka terminal atau klien SSH Anda dan masukkan perintah berikut, ganti nama_user dengan username Anda (biasanya root atau user yang Anda buat saat setup VPS) dan alamat_ip_vps_anda dengan IP publik VPS Anda.

ssh nama_user@alamat_ip_vps_anda

Jika ini adalah pertama kalinya Anda terhubung, Anda mungkin akan diminta untuk mengonfirmasi sidik jari server. Ketik yes dan tekan Enter. Kemudian, masukkan kata sandi Anda.

Update dan Upgrade Sistem

Setelah berhasil masuk, jalankan perintah berikut untuk memperbarui daftar paket dan meng-upgrade paket yang sudah terinstal ke versi terbaru:

sudo apt update
sudo apt upgrade -y

Perintah ini akan memastikan semua paket sistem operasi Anda up-to-date.

Konfigurasi Firewall (UFW)

Keamanan adalah prioritas. Pastikan firewall diaktifkan untuk melindungi VPS Anda. Ubuntu memiliki UFW (Uncomplicated Firewall) yang mudah digunakan.

sudo apt install ufw
sudo ufw allow OpenSSH
sudo ufw allow http
sudo ufw allow https
sudo ufw enable

Konfirmasi dengan y saat diminta. Perintah ini akan mengizinkan koneksi SSH, HTTP (port 80), dan HTTPS (port 443), sambil memblokir port laiya secara default.

Langkah 2: Instalasi Node.js dapm (Direkomendasikan dengaVM)

Menginstal Node.js menggunakaVM (Node Version Manager) adalah praktik terbaik karena memungkinkan Anda mengelola beberapa versi Node.js secara bersamaan, sangat berguna jika Anda memiliki aplikasi dengan persyaratan versi Node.js yang berbeda.

Instalasi NVM

Unduh dan jalankan skrip instalasi NVM dari GitHub:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

Setelah instalasi selesai, Anda perlu memuat ulang konfigurasi shell Anda agar NVM dapat dikenali. Anda bisa menutup dan membuka kembali terminal, atau menjalankan perintah berikut:

source ~/.bashrc

Untuk pengguna Zsh, gunakan source ~/.zshrc.

Instalasi Node.js

Sekarang, Anda bisa menginstal versi Node.js terbaru atau versi spesifik yang dibutuhkan aplikasi Anda. Untuk menginstal versi stabil terbaru:

nvm install node

Untuk menginstal versi spesifik (misalnya, versi 18):

nvm install 18

Setelah terinstal, set versi tersebut sebagai default:

nvm use node # atau nvm use 18

Verifikasi instalasi Node.js dapm:

node -v
npm -v

Anda seharusnya melihat nomor versi Node.js dapm yang terinstal.

Langkah 3: Setup Git untuk Deployment

Menggunakan Git adalah cara terbaik untuk mengelola kode aplikasi Anda dan melakukan deployment dengan mudah. Anda akan mengkloning repositori aplikasi Anda dari GitHub, GitLab, atau Bitbucket.

Instalasi Git

Jika Git belum terinstal, jalankan perintah ini:

sudo apt install git -y

Kloning Aplikasi Node.js dari Repository

Pilih lokasi yang tepat untuk aplikasi Anda di VPS. Biasanya, direktori /var/www/ adalah pilihan yang baik untuk aplikasi web. Buat direktori untuk aplikasi Anda dan kloning repositori:

sudo mkdir -p /var/www/nama-aplikasi-anda
sudo chown -R $USER:$USER /var/www/nama-aplikasi-anda
cd /var/www/nama-aplikasi-anda
git clone <URL_repositori_Anda> .

Ganti nama-aplikasi-anda dengaama aplikasi Anda, dan <URL_repositori_Anda> dengan URL repositori Git Anda (misalnya, https://github.com/username/nama-repo.git).

Jika repositori Anda bersifat pribadi, Anda perlu mengonfigurasi SSH Key di VPS dan menambahkaya ke akun Git hosting Anda. Ini adalah praktik terbaik untuk keamanan.

Langkah 4: Instalasi Dependensi Aplikasi

Setelah aplikasi dikloning, navigasikan ke direktori aplikasi Anda dan instal semua dependensi yang tercantum dalam package.json.

cd /var/www/nama-aplikasi-anda
npm install --production

Menggunakan --production akan memastikan hanya dependensi produksi yang diinstal, mengurangi ukuran instalasi dan potensi masalah. Jika Anda menggunakan Yarn, gunakan yarn install --production.

Langkah 5: Konfigurasi Environment Variables

Aplikasi Node.js seringkali membutuhkan variabel lingkungan (seperti port, koneksi database, API keys) yang berbeda antara lingkungan pengembangan dan produksi. Ada beberapa cara untuk menanganinya:

  • File .env: Jika aplikasi Anda menggunakan paket seperti dotenv, Anda bisa membuat file .env di direktori root aplikasi Anda.
  • Melalui PM2: PM2 memungkinkan Anda menentukan variabel lingkungan langsung saat memulai aplikasi.
  • Variabel Lingkungan Sistem: Anda juga bisa mengatur variabel lingkungan di level sistem, namun ini kurang fleksibel jika Anda memiliki banyak aplikasi.

Untuk contoh ini, kita akan fokus pada penggunaan PM2. Namun, jika Anda menggunakan file .env, pastikan untuk membuatnya dan memasukkan semua variabel yang dibutuhkan.

nano .env

Isi dengan format KEY=VALUE, contoh:

PORT=3000
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=secret

Pastikan Anda menambahkan .env ke file .gitignore Anda agar tidak terunggah ke repositori publik.

Langkah 6: Menjalankan Aplikasi Node.js dengan PM2

PM2 (Process Manager 2) adalah manajer proses produksi tingkat lanjut untuk aplikasi Node.js. PM2 memastikan aplikasi Anda tetap berjalan selamanya, mengelola log, dan membantu dengan zero-downtime reloads. Ini adalah komponen kunci untuk deployment produksi.

Instalasi PM2

npm install -g pm2

Memulai Aplikasi dengan PM2

Navigasikan kembali ke direktori aplikasi Anda (jika belum) dan jalankan aplikasi Anda menggunakan PM2. Ganti app.js dengan file entry point aplikasi Anda (misalnya, index.js atau server.js) dan nama-aplikasi-anda dengaama yang mudah diidentifikasi untuk aplikasi Anda.

cd /var/www/nama-aplikasi-anda
pm2 start app.js --name "nama-aplikasi-anda" --watch

Opsi --watch (opsional) akan me-restart aplikasi secara otomatis ketika ada perubahan pada file, berguna selama pengembangan tetapi mungkin tidak direkomendasikan untuk produksi murni.

Jika Anda perlu menetapkan variabel lingkungan, Anda bisa melakukaya seperti ini:

pm2 start app.js --name "nama-aplikasi-anda" -- env PORT=3000 DB_HOST=localhost

Untuk melihat daftar aplikasi yang berjalan:

pm2 list

Untuk melihat log aplikasi:

pm2 logs nama-aplikasi-anda

Untuk me-restart aplikasi:

pm2 restart nama-aplikasi-anda

Membuat PM2 Otomatis Start saat Boot

Agar aplikasi Anda otomatis berjalan setelah VPS di-restart, Anda perlu mengonfigurasi PM2 untuk memulai saat boot sistem.

pm2 startup systemd

Perintah ini akan menghasilkan sebuah perintah yang perlu Anda jalankan untuk mengaktifkan PM2 sebagai layanan sistem. Ikuti instruksi yang diberikan. Setelah itu, simpan daftar proses PM2 Anda:

pm2 save

Langkah 7: Konfigurasi Nginx sebagai Reverse Proxy

Meskipun PM2 menjalankan aplikasi Node.js Anda, ia tidak dirancang untuk menangani permintaan web langsung dari internet secara efisien, terutama untuk file statis atau load balancing. Di sinilah Nginx berperan sebagai reverse proxy.

Nginx akan menerima semua permintaan dari browser, mengarahkaya ke aplikasi Node.js Anda yang berjalan di port lokal, dan juga dapat menyajikan file statis (gambar, CSS, JS) secara langsung, yang jauh lebih efisien.

Instalasi Nginx

sudo apt install nginx -y

Konfigurasi Nginx untuk Aplikasi Anda

Buat file konfigurasi baru untuk aplikasi Anda di direktori sites-available Nginx:

sudo nano /etc/nginx/sites-available/nama-aplikasi-anda

Salin dan tempel konfigurasi berikut, ganti nama-domain-anda.com dengan domain Anda dan 3000 dengan port tempat aplikasi Node.js Anda berjalan (sesuai dengan konfigurasi PM2 atau .env Anda):

server {
    listen 80;
    server_name nama-domain-anda.com www.nama-domain-anda.com;

location / { proxy_pass http://localhost:3000; # Ganti dengan port aplikasi Node.js Anda proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Coection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }

# Optional: Serve static files directly via Nginx for better performance # Misalnya, jika static files ada di /var/www/nama-aplikasi-anda/public # location /static/ { # alias /var/www/nama-aplikasi-anda/public/; # expires 30d; # add_header Cache-Control "public, no-transform"; # } }

Simpan dan keluar dari editor (Ctrl+X, Y, Enter).

Mengaktifkan Konfigurasi Nginx

Buat symlink (symbolic link) dari file konfigurasi di sites-available ke sites-enabled:

sudo ln -s /etc/nginx/sites-available/nama-aplikasi-anda /etc/nginx/sites-enabled/

Uji konfigurasi Nginx untuk memastikan tidak ada kesalahan sintaks:

sudo nginx -t

Jika ada pesan test is successful, artinya konfigurasi Anda benar. Sekarang, muat ulang Nginx untuk menerapkan perubahan:

sudo systemctl restart nginx

Pada titik ini, aplikasi Node.js Anda seharusnya sudah bisa diakses melalui domain atau IP VPS Anda menggunakan HTTP (port 80).

Langkah 8: Mengamankan Aplikasi dengan HTTPS (Certbot/Let’s Encrypt)

Menggunakan HTTPS adalah standar keamanan modern untuk setiap aplikasi web. Ini mengamankan komunikasi antara pengguna dan server Anda, meningkatkan kepercayaan, dan merupakan faktor penting untuk SEO. Let’s Encrypt menyediakan sertifikat SSL/TLS gratis, dan Certbot adalah alat yang membuatnya sangat mudah.

Instalasi Certbot

sudo apt install certbot python3-certbot-nginx -y

Mendapatkan dan Menginstal Sertifikat SSL

Jalankan Certbot dan ikuti instruksi. Pastikan domain Anda sudah mengarah ke IP VPS Anda.

sudo certbot --nginx -d nama-domain-anda.com -d www.nama-domain-anda.com

Certbot akan meminta alamat email untuk pemberitahuan kedaluwarsa, menyetujui persyaratan layanan, dan menanyakan apakah Anda ingin mengarahkan ulang lalu lintas HTTP ke HTTPS secara otomatis (direkomendasikan).

Setelah selesai, Certbot akan secara otomatis mengupdate konfigurasi Nginx Anda untuk menggunakan HTTPS dan mengaktifkan pengalihan HTTP ke HTTPS.

Verifikasi Perpanjangan Otomatis

Certbot juga akan menginstal cron job untuk memperbarui sertifikat Anda secara otomatis sebelum kedaluwarsa. Anda bisa menguji proses perpanjangan dengan:

sudo certbot renew --dry-run

Jika ini berhasil, sertifikat Anda akan diperbarui secara otomatis.

Sekarang, aplikasi Node.js Anda seharusnya sudah bisa diakses dengan aman melalui HTTPS!

Tips Tambahan untuk Produksi

Untuk menjaga aplikasi Node.js Anda tetap optimal dan aman di lingkungan produksi, pertimbangkan beberapa hal berikut:

  • Monitoring dan Logging: PM2 menyediakan fitur log yang baik. Untuk skala yang lebih besar, pertimbangkan sistem logging terpusat seperti ELK Stack (Elasticsearch, Logstash, Kibana) atau layanan cloud.
  • Keamanan:
    • Gunakan kata sandi yang kuat dan SSH Key untuk akses SSH.
    • Rutin perbarui sistem operasi dan dependensi aplikasi Anda.
    • Jangan pernah menyimpan kredensial sensitif di kode sumber. Gunakan variabel lingkungan.
  • Backup: Rencanakan strategi backup untuk data aplikasi dan konfigurasi VPS Anda.
  • CI/CD (Continuous Integration/Continuous Deployment): Untuk deployment yang lebih canggih dan otomatis, pertimbangkan untuk mengintegrasikan alat CI/CD seperti GitHub Actions, GitLab CI/CD, atau Jenkins.
  • Manajemen Versi Node.js: DengaVM, mudah untuk mengupdate versi Node.js. Pastikan Anda menguji aplikasi Anda secara menyeluruh setelah mengupdate Node.js.

FAQ

Apa itu PM2 dan mengapa harus menggunakaya untuk aplikasi Node.js di produksi?

PM2 adalah manajer proses produksi untuk aplikasi Node.js. Anda harus menggunakaya karena PM2 memastikan aplikasi Anda tetap berjalan 24/7 (bahkan setelah server restart atau jika aplikasi mengalami crash), mengelola log, memonitor performa, dan mendukung zero-downtime reloads, yang semuanya esensial untuk aplikasi produksi yang handal.

Mengapa Nginx penting untuk aplikasi Node.js di produksi?

Nginx berperan sebagai reverse proxy. Ia bertindak sebagai garda terdepan yang menerima semua permintaan dari klien dan meneruskaya ke aplikasi Node.js Anda yang berjalan di port internal. Nginx sangat efisien dalam menyajikan file statis, menangani banyak koneksi, dan mengelola SSL/TLS (HTTPS), yang dapat meningkatkan performa dan keamanan aplikasi Anda secara signifikan.

Bagaimana cara mengupdate aplikasi setelah deploy?

Untuk mengupdate aplikasi, navigasikan ke direktori aplikasi Anda di VPS, tarik perubahan terbaru dari repositori Git Anda (git pull origin master atau branch yang relevan), instal dependensi baru jika ada (npm install --production), lalu restart aplikasi Anda dengan PM2 (pm2 restart nama-aplikasi-anda).

Bagaimana jika aplikasi saya menggunakan database seperti PostgreSQL atau MongoDB?

Jika aplikasi Anda membutuhkan database, Anda perlu menginstal dan mengonfigurasi database tersebut di VPS Anda (atau menggunakan layanan database terkelola dari penyedia cloud). Setelah itu, pastikan variabel lingkungan di aplikasi Node.js Anda (misalnya, DB_HOST, DB_USER, DB_PASSWORD) dikonfigurasi dengan benar untuk terhubung ke database tersebut.

Apakah saya perlu membeli domain untuk mengikuti panduan ini?

Secara teknis, tidak. Anda bisa mengakses aplikasi menggunakan alamat IP publik VPS Anda. Namun, memiliki domain sangat direkomendasikan untuk profesionalisme, kemudahan akses, dan yang paling penting, sebagai prasyarat untuk mengaktifkan HTTPS dengan Let’s Encrypt, yang krusial untuk keamanan dan SEO.

Kesimpulan

Selamat! Anda telah berhasil menyebarkan (deploy) aplikasi Node.js Anda ke VPS Ubuntu. Dengan mengikuti panduan ini, Anda kini memiliki pemahaman yang kuat tentang cara mengatur lingkungan produksi yang tangguh dan aman menggunakan kombinasi Node.js, PM2, Nginx, dan Let’s Encrypt.

Proses ini mungkin tampak banyak pada awalnya, tetapi setiap langkah memiliki peraya masing-masing dalam membangun fondasi yang kuat untuk aplikasi web Anda. Teruslah bereksperimen, belajar, dan jangan takut untuk menjelajahi lebih jauh fitur-fitur dari setiap komponen yang kita gunakan. Sekarang, aplikasi Anda siap menyapa dunia!

You May Also Like

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *