Postat acum 1 zi
javascript
// ecosystem.config.js
module.exports = {
apps: [{
name: 'myapp',
script: 'server.js',
instances: 'max',
exec_mode: 'cluster',
max_memory_restart: '500M',
kill_timeout: 5000,
wait_ready: true,
listen_timeout: 10000,
env_production: { NODE_ENV: 'production' }
}]
};Scenariul: ai un Next.js / Express în prod și trebuie să faci deploy fără downtime. PM2 + cluster mode rezolvă asta în 3 pași.
Pas 1 — Cluster mode
Pornești aplicația cu mai multe instanțe (câte un CPU core). PM2 rotește request-urile între ele.
pm2 start server.js -i max --name myapp
Pas 2 — Graceful shutdown
În codul Node:
- Asculți
SIGINTșiSIGTERM - Închizi server-ul HTTP (stop accept connections noi)
- Aștepți request-urile active să termine
- Apoi ieși din proces
Pas 3 — Reload cu PM2
pm2 reload myapp — PM2 oprește instanțele una câte una, așteaptă semnalul "ready" de la instanța nouă, abia apoi trece la următoarea.
Gotcha-uri
- Sticky sessions la WebSocket — folosește Redis adapter pentru Socket.IO
- Cache local — nu ai cum să-l invalidezi cross-instanță, folosește Redis
- Memory leaks — setezi
max-memory-restart: 500Mca plasă de siguranță