Panduan Deploy Aplikasi Node.js di VPS Ubuntu untuk Pemula (Step-by-Step)

Panduan Deploy Aplikasi Node.js di VPS Ubuntu untuk Pemula (Step-by-Step)

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.