🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Configurazione di PM2 per Applicazioni Node.js

Codegrind Team•Aug 28 2024

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.