Paket 1 · Fondasi DevOpsModul H — Application Deployment & PM2

PM2 Production Setup, Process Management, dan Environment Management

Menjalankan aplikasi Node.js di produksi dengan PM2, ecosystem file, cluster mode, environment, dan startup otomatis.

PM2 adalah process manager untuk Node.js yang menjaga aplikasi tetap hidup, melakukan restart otomatis, dan menyediakan log serta monitoring. Di produksi, PM2 menggantikan node server.js yang dijalankan manual.

Mengapa PM2?

KebutuhanTanpa PM2Dengan PM2
Restart setelah crashManualOtomatis
Start saat bootBuat service sendiripm2 startup
LogRedirect manualTerpusat
Zero-downtime reloadSulitpm2 reload
Cluster/multi-coreManualMode cluster
MonitoringManualpm2 monit

1. Instalasi

node -v
npm -v
npm install -g pm2
pm2 -v

Jika memakai nvm, pastikan path Node tersedia untuk user yang menjalankan aplikasi.

2. Menjalankan aplikasi

cd /srv/app
npm ci
npm run build
pm2 start server.js --name app-prod
pm2 status
pm2 logs app-prod

Perintah dasar:

pm2 list
pm2 describe app-prod
pm2 restart app-prod
pm2 reload app-prod
pm2 stop app-prod
pm2 delete app-prod

3. Ecosystem file

Untuk konfigurasi yang reproducible, gunakan ecosystem.config.js.

module.exports = {
  apps: [
    {
      name: 'app-prod',
      script: 'server.js',
      cwd: '/srv/app',
      instances: 'max',
      exec_mode: 'cluster',
      autorestart: true,
      watch: false,
      max_memory_restart: '400M',
      env: {
        NODE_ENV: 'production',
        PORT: 3000,
      },
      env_file: '/srv/app/.env',
      error_file: '/var/log/pm2/app-prod-error.log',
      out_file: '/var/log/pm2/app-prod-out.log',
      merge_logs: true,
      time: true,
    },
  ],
};

Jalankan:

mkdir -p /var/log/pm2
pm2 start ecosystem.config.js
pm2 save
OpsiFungsi
instancesJumlah proses; max mengikuti jumlah core
exec_modefork atau cluster
max_memory_restartRestart jika RAM melewati batas
autorestartRestart saat proses berhenti
watchRestart saat file berubah (jangan di produksi)
env_fileMemuat variabel environment
timeTambahkan timestamp di log

Cluster mode dan port

Pada cluster mode, beberapa proses berbagi port yang sama. Pastikan aplikasi tidak membuka port sendiri di dalam kode dengan cara yang konflik. Gunakan PORT dari environment.

4. Environment management

Cara 1: env di ecosystem

env: {
  NODE_ENV: 'production',
  PORT: 3000,
},

Cara 2: env_file

NODE_ENV=production
PORT=3000
DATABASE_URL=postgres://user:pass@localhost:5432/app

Amankan:

chmod 600 /srv/app/.env
chown deploy:deploy /srv/app/.env

Cara 3: pm2 set (untuk nilai non-rahasia)

pm2 set app-prod:LOG_LEVEL info

Rahasia di ecosystem file

Jangan commit ecosystem.config.js yang berisi password/API key. Gunakan env_file dengan permission ketat atau secret manager.

5. Startup otomatis saat boot

pm2 startup

Perintah menampilkan baris yang harus dijalankan sebagai root. Jalankan baris tersebut, lalu:

pm2 save

Uji dengan reboot server dan cek:

pm2 list
systemctl status pm2-deploy

Nama service mengikuti user yang menjalankan pm2 startup.

6. Zero-downtime reload

pm2 reload app-prod

reload mengganti proses satu per satu pada cluster mode sehingga layanan tetap tersedia. restart mematikan semua proses lalu menyalakan ulang, berpotensi downtime singkat.

7. Monitoring

pm2 monit
pm2 status
pm2 describe app-prod
pm2 env 0
pm2 prettylist

Untuk monitoring terpusat, PM2 dapat dihubungkan ke PM2 Plus (opsional, berbayar). Untuk kebutuhan dasar, pm2 monit dan log sudah cukup.

8. Deployment alur sederhana

cd /srv/app
git pull
npm ci
npm run build
pm2 reload app-prod
pm2 save

Tambahkan health check setelah reload:

curl -f http://127.0.0.1:3000/health || echo "Health check gagal"

Praktik: menyiapkan aplikasi produksi

  1. Buat user deploy dan direktori /srv/app.
  2. Clone aplikasi dan install dependensi.
  3. Buat .env dengan permission 600.
  4. Buat ecosystem.config.js.
  5. Jalankan pm2 start ecosystem.config.js.
  6. Jalankan pm2 startup dan pm2 save.
  7. Uji reboot dan pastikan aplikasi hidup.
  8. Konfigurasi reverse proxy ke port aplikasi.

Ringkasan

  • PM2 menjaga aplikasi tetap hidup dan restart otomatis.
  • ecosystem.config.js membuat konfigurasi produksi reproducible.
  • Gunakan env_file untuk environment dan rahasia.
  • pm2 startup + pm2 save memastikan aplikasi hidup setelah reboot.
  • pm2 reload memberi zero-downtime pada cluster mode.

On this page