Deploy aplikasi Node.js ke VPS Ubuntu sebenarnya tidak serumit yang terlihat. Di panduan ini, kamu akan setup dari nol sampai aplikasi online dengan domain dan HTTPS.
Stack yang dipakai:
- Node.js (LTS)
- PM2 (biar aplikasi tetap jalan)
- Nginx (reverse proxy)
- Let’s Encrypt (SSL gratis)
Prasyarat
- VPS Ubuntu 22.04/24.04
- Akses SSH ke server
- Domain yang sudah diarahkan ke IP VPS (A record)
- Aplikasi Node.js yang siap dijalankan
1) Update server Ubuntu
Masuk ke server:
ssh user@IP_SERVER
Lalu update package:
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git ufw nginx
2) Install Node.js LTS
Supaya stabil di production, pakai versi LTS:
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs
Cek versi:
node -v
npm -v
3) Upload aplikasi ke VPS
Contoh kalau source code ada di GitHub:
cd /var/www
sudo git clone https://github.com/username/nama-project.git app
sudo chown -R $USER:$USER /var/www/app
cd /var/www/app
npm install
Kalau aplikasi kamu pakai file environment:
cp .env.example .env
nano .env
Isi variabel penting seperti PORT, database URL, API key, dan lainnya.
4) Jalankan aplikasi pakai PM2
Install PM2:
sudo npm i -g pm2
Start aplikasi:
cd /var/www/app
pm2 start npm --name "app" -- start
Supaya otomatis jalan saat server reboot:
pm2 save
pm2 startup
Cek status:
pm2 list
pm2 logs app
5) Setup Nginx sebagai reverse proxy
Buat file config:
sudo nano /etc/nginx/sites-available/app
Isi dengan:
server {
listen 80;
server_name domainkamu.com www.domainkamu.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
Aktifkan config:
sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Kalau nginx -t error, perbaiki dulu sebelum lanjut.
6) Aktifkan HTTPS dengan Let's Encrypt
Install certbot:
sudo apt install -y certbot python3-certbot-nginx
Generate SSL:
sudo certbot --nginx -d domainkamu.com -d www.domainkamu.com
Tes auto-renew:
sudo certbot renew --dry-run
7) Aktifkan firewall dasar (UFW)
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status
Port minimal yang perlu terbuka:
- 22 (SSH)
- 80 (HTTP)
- 443 (HTTPS)
Checklist Deploy Berhasil
- Aplikasi berjalan di PM2
- Domain sudah mengarah ke VPS
- Nginx aktif dan config valid
- HTTPS aktif (ikon gembok muncul)
- Firewall aktif
Troubleshooting Umum
502 Bad Gateway
Biasanya karena aplikasi Node.js tidak jalan atau port tidak sesuai.
Cek:
pm2 list
pm2 logs app
Pastikan port aplikasi sesuai dengan proxy_pass di Nginx.
Domain tidak bisa diakses
- Cek DNS A record
- Tunggu propagasi DNS
- Pastikan Nginx sudah reload dan tidak error
SSL gagal dibuat
- Pastikan domain sudah resolve ke server
- Pastikan port 80/443 tidak diblokir firewall/security group
Penutup
Dengan setup ini, aplikasi Node.js kamu sudah layak untuk production skala kecil sampai menengah. Kalau traffic mulai naik, langkah lanjutannya biasanya: setup CI/CD, monitoring, dan hardening server.