diff --git a/.gitignore b/.gitignore index 7ea6bd1..59aa80c 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,8 @@ build/ # Temporary files *.tmp *.temp + +# PM2 +logs/ +.pm2/ +*.log diff --git a/PM2.md b/PM2.md new file mode 100644 index 0000000..2e3357f --- /dev/null +++ b/PM2.md @@ -0,0 +1,98 @@ +# PM2 Process Manager - LPD Gerana Webcam + +## Quick Start + +### Start aplikasi dengan PM2 +```bash +npm run pm2:start +``` + +### Stop aplikasi +```bash +npm run pm2:stop +``` + +### Restart aplikasi +```bash +npm run pm2:restart +``` + +### Lihat logs +```bash +npm run pm2:logs +``` + +### Lihat status +```bash +npm run pm2:status +``` + +### Monitor real-time +```bash +npm run pm2:monit +``` + +### Hapus dari PM2 +```bash +npm run pm2:delete +``` + +## Auto Start saat Server Boot + +### Setup PM2 startup (jalankan sekali) +```bash +# Generate startup script +npx pm2 startup + +# Salin dan jalankan command yang muncul (biasanya dengan sudo) +# Contoh: sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u wartana --hp /home/wartana + +# Start aplikasi +npm run pm2:start + +# Save PM2 process list untuk auto-start +npx pm2 save +``` + +### Disable auto-start +```bash +npx pm2 unstartup +``` + +## Fitur PM2 + +- ✅ **Auto Restart**: Aplikasi otomatis restart jika crash +- ✅ **Logs Management**: Log tersimpan di folder `logs/` +- ✅ **Memory Management**: Auto restart jika memory > 500MB +- ✅ **Monitoring**: Real-time monitoring dengan `npm run pm2:monit` +- ✅ **Status Tracking**: Cek uptime dan status aplikasi +- ✅ **Startup Script**: Auto start saat server boot + +## Log Files + +- **Error Log**: `logs/pm2-error.log` +- **Output Log**: `logs/pm2-out.log` + +## Tips + +1. **Update aplikasi tanpa downtime**: + ```bash + git pull + npm install + npm run pm2:restart + ``` + +2. **Lihat logs 100 baris terakhir**: + ```bash + npx pm2 logs lpd-gerana-webcam --lines 100 + ``` + +3. **Flush logs**: + ```bash + npx pm2 flush + ``` + +4. **Cek resource usage**: + ```bash + npx pm2 monit + ``` diff --git a/ecosystem.config.js b/ecosystem.config.js new file mode 100644 index 0000000..d28dec8 --- /dev/null +++ b/ecosystem.config.js @@ -0,0 +1,22 @@ +module.exports = { + apps: [{ + name: 'lpd-gerana-webcam', + script: './server.js', + instances: 1, + exec_mode: 'fork', + autorestart: true, + watch: false, + max_memory_restart: '500M', + env: { + NODE_ENV: 'production', + PORT: 3000 + }, + error_file: './logs/pm2-error.log', + out_file: './logs/pm2-out.log', + log_date_format: 'YYYY-MM-DD HH:mm:ss Z', + merge_logs: true, + min_uptime: '10s', + max_restarts: 10, + restart_delay: 4000 + }] +}; diff --git a/package.json b/package.json index 1b3f75f..2068b22 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,14 @@ "scripts": { "start": "node server.js", "dev": "nodemon server.js", - "setup-db": "mysql -u doc -p'doc2026!' < database.sql" + "setup-db": "mysql -u doc -p'doc2026!' < database.sql", + "pm2:start": "npx pm2 start ecosystem.config.js", + "pm2:stop": "npx pm2 stop lpd-gerana-webcam", + "pm2:restart": "npx pm2 restart lpd-gerana-webcam", + "pm2:delete": "npx pm2 delete lpd-gerana-webcam", + "pm2:logs": "npx pm2 logs lpd-gerana-webcam", + "pm2:status": "npx pm2 status", + "pm2:monit": "npx pm2 monit" }, "keywords": [ "lpd-gerana",