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?
| Kebutuhan | Tanpa PM2 | Dengan PM2 |
|---|---|---|
| Restart setelah crash | Manual | Otomatis |
| Start saat boot | Buat service sendiri | pm2 startup |
| Log | Redirect manual | Terpusat |
| Zero-downtime reload | Sulit | pm2 reload |
| Cluster/multi-core | Manual | Mode cluster |
| Monitoring | Manual | pm2 monit |
1. Instalasi
node -v
npm -v
npm install -g pm2
pm2 -vJika 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-prodPerintah dasar:
pm2 list
pm2 describe app-prod
pm2 restart app-prod
pm2 reload app-prod
pm2 stop app-prod
pm2 delete app-prod3. 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| Opsi | Fungsi |
|---|---|
instances | Jumlah proses; max mengikuti jumlah core |
exec_mode | fork atau cluster |
max_memory_restart | Restart jika RAM melewati batas |
autorestart | Restart saat proses berhenti |
watch | Restart saat file berubah (jangan di produksi) |
env_file | Memuat variabel environment |
time | Tambahkan 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/appAmankan:
chmod 600 /srv/app/.env
chown deploy:deploy /srv/app/.envCara 3: pm2 set (untuk nilai non-rahasia)
pm2 set app-prod:LOG_LEVEL infoRahasia 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 startupPerintah menampilkan baris yang harus dijalankan sebagai root. Jalankan baris tersebut, lalu:
pm2 saveUji dengan reboot server dan cek:
pm2 list
systemctl status pm2-deployNama service mengikuti user yang menjalankan pm2 startup.
6. Zero-downtime reload
pm2 reload app-prodreload 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 prettylistUntuk 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 saveTambahkan health check setelah reload:
curl -f http://127.0.0.1:3000/health || echo "Health check gagal"Praktik: menyiapkan aplikasi produksi
- Buat user
deploydan direktori/srv/app. - Clone aplikasi dan install dependensi.
- Buat
.envdengan permission600. - Buat
ecosystem.config.js. - Jalankan
pm2 start ecosystem.config.js. - Jalankan
pm2 startupdanpm2 save. - Uji reboot dan pastikan aplikasi hidup.
- Konfigurasi reverse proxy ke port aplikasi.
Ringkasan
- PM2 menjaga aplikasi tetap hidup dan restart otomatis.
ecosystem.config.jsmembuat konfigurasi produksi reproducible.- Gunakan
env_fileuntuk environment dan rahasia. pm2 startup+pm2 savememastikan aplikasi hidup setelah reboot.pm2 reloadmemberi zero-downtime pada cluster mode.
Selanjutnya
Atasi masalah aplikasi di PM2 Configuration, Logs, Restart, dan Application Troubleshooting.
aaPanel dan Deployment Aplikasi Node.js
Memasang aaPanel, menyiapkan site Node.js, menjalankan aplikasi, serta mengatur reverse proxy dan SSL.
PM2 Configuration, Logs, Restart, dan Application Troubleshooting
Mengelola log PM2, rotasi log, restart yang aman, serta mendiagnosis error umum aplikasi Node.js di produksi.