Configurazione di PM2 per Applicazioni Node.js
PM2 è un process manager per Node.js che semplifica l’avvio, il monitoraggio e la gestione delle applicazioni in produzione. Con PM2, puoi eseguire la tua applicazione Node.js come un servizio, garantendo che rimanga attiva, bilanciando il carico e facilitando il deployment continuo. In questa guida, esploreremo come configurare PM2 per gestire la tua applicazione Node.js in modo efficiente.
Installare PM2
Per iniziare, installa PM2 globalmente sul tuo sistema:
npm install -g pm2
Avviare un’Applicazione con PM2
Per avviare un’applicazione Node.js con PM2, usa il comando pm2 start
seguito dal file JavaScript della tua applicazione:
pm2 start app.js
Questo comando avvia la tua applicazione e la mette sotto il controllo di PM2. Puoi visualizzare lo stato dell’applicazione con:
pm2 status
Configurare PM2 con un File di Configurazione
PM2 consente di definire la configurazione delle applicazioni in un file JSON o YAML, rendendo piĂą semplice gestire setup complessi e deployment in produzione. Ecco un esempio di file di configurazione in formato JSON (ecosystem.config.js
):
module.exports = {
apps: [
{
name: "app-name",
script: "./app.js",
instances: "max", // Usa tutte le CPU disponibili
exec_mode: "cluster", // Usa il cluster mode per bilanciare il carico
watch: true, // Rilancia l'app in caso di modifiche ai file
env: {
NODE_ENV: "development",
},
env_production: {
NODE_ENV: "production",
},
},
],
};
Avviare l’Applicazione con il File di Configurazione
Per avviare l’applicazione utilizzando il file di configurazione:
pm2 start ecosystem.config.js --env production
Questo comando avvia l’applicazione configurata nel file e imposta l’ambiente production
.
Configurare PM2 per il Restart Automatico
PM2 può essere configurato per riavviare automaticamente l’applicazione in caso di crash, mantenendo alta la disponibilità del servizio. La configurazione di base per il riavvio automatico è già abilitata per impostazione predefinita. Tuttavia, puoi specificare ulteriori opzioni come max_restarts
e restart_delay
nel file di configurazione:
module.exports = {
apps: [
{
name: "app-name",
script: "./app.js",
instances: 1,
autorestart: true, // Riavvia automaticamente in caso di crash
max_restarts: 10, // Numero massimo di riavvii
restart_delay: 5000, // Ritardo di 5 secondi tra un riavvio e l'altro
watch: false, // Disabilita il watch per evitare riavvii non necessari in produzione
},
],
};
Monitoraggio e Log
PM2 fornisce potenti strumenti di monitoraggio e logging. Per visualizzare i log dell’applicazione, usa:
pm2 logs
Questo comando mostra i log di runtime dell’applicazione. Puoi filtrare i log per una specifica applicazione:
pm2 logs app-name
Monitoraggio in Tempo Reale
PM2 include un’interfaccia di monitoraggio in tempo reale per osservare l’utilizzo delle risorse dell’applicazione:
pm2 monit
Questo comando apre un’interfaccia che mostra l’utilizzo della CPU, della memoria e altre metriche in tempo reale.
Persistenza dei Processi
Per garantire che le applicazioni gestite da PM2 vengano riavviate automaticamente al riavvio del server, è necessario configurare PM2 per salvare lo stato corrente e ripristinarlo all’avvio.
Salvare lo Stato Corrente
Per salvare lo stato corrente delle applicazioni gestite da PM2:
pm2 save
Configurare PM2 per l’Avvio Automatico
PM2 può essere configurato per avviarsi automaticamente al boot del sistema:
pm2 startup
Questo comando genera uno script di init specifico per il tuo sistema operativo. Segui le istruzioni fornite per abilitare l’avvio automatico.
Scalare l’Applicazione
Uno dei vantaggi principali di PM2 è la capacità di scalare le applicazioni Node.js utilizzando il cluster mode. Questo permette di sfruttare appieno le risorse multi-core del server.
Scalare con PM2
Per scalare la tua applicazione a un numero specifico di istanze, usa:
pm2 scale app-name 4
Questo comando avvia 4 istanze dell’applicazione, bilanciando il carico tra di esse.
Utilizzare Tutte le CPU Disponibili
Per scalare automaticamente l’applicazione su tutte le CPU disponibili:
pm2 start app.js -i max
Questo comando avvia il numero massimo di istanze supportate dal numero di core del processore.
Aggiornare l’Applicazione senza Downtime
PM2 supporta il riavvio zero-downtime grazie alla sua modalità cluster. Questo è utile quando si distribuisce una nuova versione dell’applicazione.
Deploy senza Downtime
Per aggiornare un’applicazione in esecuzione senza downtime:
pm2 reload app-name
Il comando reload
riavvia le istanze dell’applicazione una per una, garantendo che ci sia sempre almeno un’istanza attiva durante l’aggiornamento.
Best Practices per l’Uso di PM2
- Utilizza Cluster Mode: Per sfruttare appieno le risorse del server, esegui le applicazioni in modalitĂ cluster.
- Configura il Watch in Sviluppo: Attiva l’opzione
watch
solo in ambienti di sviluppo per evitare riavvii non necessari in produzione. - Salva lo Stato dei Processi: Usa
pm2 save
per garantire che le configurazioni siano preservate tra i riavvii del sistema. - Monitoraggio Attivo: Utilizza
pm2 monit
per monitorare le prestazioni dell’applicazione in tempo reale e ottimizzare l’utilizzo delle risorse.
Risolvere Problemi Comuni
Applicazione che Non si Riavvia
Se l’applicazione non si riavvia correttamente, verifica i log con pm2 logs
per diagnosticare eventuali errori. Controlla anche la configurazione nel file di ecosistema per garantire che tutte le opzioni siano configurate correttamente.
Utilizzo Elevato della CPU
Se noti un utilizzo elevato della CPU, valuta la possibilità di ridurre il numero di istanze o di ottimizzare il codice per migliorare l’efficienza.
Problemi di Persistenza
Se le applicazioni non si riavviano al riavvio del server, verifica che pm2 save
sia stato eseguito correttamente e che lo script di startup sia stato configurato con successo usando pm2 startup
.
Conclusione
PM2 è uno strumento potente e versatile per la gestione delle applicazioni Node.js in produzione. Con la sua capacità di scalare, monitorare e garantire la persistenza dei processi, PM2 semplifica la gestione di applicazioni Node.js, riducendo i tempi di inattività e migliorando l’efficienza operativa. Seguendo le best practices e configurando PM2 in modo appropriato, puoi assicurarti che la tua applicazione Node.js sia robusta, scalabile e sempre disponibile.