Press ESC to close

Deploy Aplikasi Node.js di VPS: Panduan Lengkap untuk Pemula

Deploy aplikasi Node.js di VPS sering jadi momok bagi developer pemula. Sudah jalan lancar di localhost, begitu dipindah ke server langsung error, proses mati tiba-tiba, atau port tidak bisa diakses dari luar. Padahal, Node.js butuh pendekatan berbeda dibanding PHP yang tinggal upload file.

Artikel ini membahas langkah praktis menjalankan aplikasi Node.js di VPS produksi. Mulai dari persiapan environment, manajemen proses dengan PM2, sampai konfigurasi Nginx sebagai reverse proxy.

Persiapan Environment VPS untuk Node.js

Sebelum deploy, pastikan VPS sudah siap menjalankan runtime JavaScript. Kebanyakan distro Linux modern sudah mendukung, tapi versi Node.js perlu diperhatikan.

Install Node.js via NodeSource atau NVM

Hindari install dari repository default distro karena versinya biasanya tertinggal. Gunakan NodeSource untuk versi stabil terbaru, atau NVM bila butuh ganti-ganti versi antar proyek.

  • NodeSource: cocok untuk server produksi dengan satu versi tetap
  • NVM: fleksibel untuk development atau multi-tenant server

Setelah terinstall, verifikasi dengan node -v dan npm -v. Pastikan juga build-essential terpasang untuk compile native module.

Siapkan User Non-Root

Jangan jalankan aplikasi sebagai root. Buat user khusus, misalnya deploy, dengan hak akses terbatas. Ini meminimalkan risiko bila aplikasi terekspos celah keamanan.

Upload dan Jalankan Aplikasi

Ada beberapa cara mengirim kode ke VPS. Git clone paling direkomendasikan karena mendukung versioning dan rollback mudah.

Clone Repository dan Install Dependensi

Masuk ke direktori aplikasi, jalankan npm install –production untuk menghemat ruang dan waktu install. Pastikan file .env sudah disiapkan dengan variabel untuk production: database URL, secret key, dan port.

Untuk port, gunakan angka di atas 1024 agar tidak butuh hak root. Port 3000, 5000, atau 8080 adalah pilihan umum.

Test Manual Sebelum Background Process

Jalankan npm start atau node app.js sementara. Cek apakah aplikasi respond di localhost:PORT dari dalam server. Kalau sudah oke, matikan dengan Ctrl+C dan lanjut ke manajemen proses.

Kelola Proses dengan PM2

Node.js tidak berjalan sebagai service native di Linux. Kalau terminal ditutup, aplikasi ikut mati. PM2 solusinya: process manager yang menjaga aplikasi tetap hidup, restart otomatis kalau crash, dan logging terpusat.

Install dan Konfigurasi Dasar PM2

Install global dengan npm install -g pm2. Jalankan aplikasi dengan pm2 start app.js –name “nama-aplikasi”. PM2 akan membuat daemon yang terus berjalan walau user logout.

Perintah penting lainnya:

  • pm2 status — cek semua proses aktif
  • pm2 logs — lihat log real-time
  • pm2 restart nama-aplikasi — restart setelah update kode
  • pm2 save dan pm2 startup — aktifkan auto-start saat server reboot

Cluster Mode untuk Manfaatkan Multi-Core

Node.js single-threaded secara default. PM2 bisa spawn multiple instance dengan -i max untuk memanfaatkan semua core CPU. Ini penting bila aplikasi punya traffic tinggi atau proses berat.

Konfigurasi Nginx sebagai Reverse Proxy

Aplikasi Node.js sebaiknya tidak langsung terima request dari internet. Nginx ditengah sebagai reverse proxy menangani SSL termination, static file serving, dan load balancing sederhana.

Setup Blok Server Nginx

Buat konfigurasi di /etc/nginx/sites-available/ dengan proxy_pass ke localhost dan port aplikasi Node.js. Contoh struktur:

server {
  listen 80;
  server_name domainanda.com;
  location / {
    proxy_pass http://localhost:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection ‘upgrade’;
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}

Aktifkan dengan symlink ke sites-enabled, lalu test konfigurasi nginx -t sebelum reload.

Tambahkan SSL dengan Let’s Encrypt

Install Certbot dan jalankan otomatis. Nginx akan handle HTTPS, sementara aplikasi Node.js tetap HTTP di belakangnya. Ini lebih sederhana daripada implementasi HTTPS langsung di Node.js.

Bila butuh panduan lengkap instalasi SSL, bisa merujuk ke artikel Cara Install SSL Certificate di VPS yang sudah kami bahas sebelumnya.

Optimasi dan Monitoring Produksi

Deploy sukses bukan akhir. Aplikasi perlu diawasi dan dioptimasi agar tetap responsif dalam jangka panjang.

Atur Log Rotation

Log PM2 bisa membesar tanpa batas. Konfigurasi pm2-logrotate agar file log dirotasi harian atau berdasarkan ukuran. Ini mencegah disk penuh yang sering terlupakan.

Monitoring Resource Server

Gunakan pm2 monit untuk cek CPU dan memory per proses. Untuk monitoring menyeluruh, pertimbangkan integrasi dengan monitoring server VPS yang mencakup disk, network, dan uptime sistem.

Environment Variable Aman

Jangan commit file .env ke repository. Di VPS, gunakan PM2 ecosystem file atau sistem secret management. Pastikan juga permission file restrictif: chmod 600 .env.

Troubleshooting Umum Setelah Deploy

Masalah
Penyebab Umum
Solusi

Aplikasi tidak bisa diakses dari luar
Firewall blok port atau binding ke localhost saja
Cek UFW/iptables, pastikan bind 0.0.0.0 atau gunakan Nginx

PM2 restart terus-menerus
Error runtime atau port sudah dipakai
Cek log dengan pm2 logs, ganti port bila konflik

Memory usage naik terus
Memory leak di kode atau caching tak terbatas
Profile heap, batasi cache size, restart periodik sementara

Static asset lambat
Node.js handle file sendiri
Offload ke Nginx dengan location /static/

Kesimpulan

Deploy aplikasi Node.js di VPS butuh tiga pilar: runtime siap, proses terkelola PM2, dan reverse proxy Nginx. Tanpa salah satu, aplikasi rentan mati tiba-tiba, sulit diakses, atau tidak optimal.

Kalau Anda masih bingung memilih spesifikasi VPS yang cocok untuk stack Node.js, baca dulu Panduan Memilih VPS agar Performa Website Maksimal. Butuh keamanan ekstra setelah go-live? Artikel Cara Mengamankan Server VPS bisa jadi referensi berikutnya.

Siap deploy proyek Node.js pertama Anda? Mulai dari VPS dengan resource fleksibel, lalu ikuti langkah di atas secara berurutan. Kalau stuck di salah satu tahap, tim support AntaHost siap bantu.