PM2 è un gestore di processi in grado di eseguire le tue applicazioni Node.js come demoni all’interno del sistema, riavviando le tue applicazioni in caso di crash.
In questa guida vedremo come installare PM2 e configurarlo al meglio. Dopo aver creato una piccola applicazione di esempio con Node.Js, ti spiegheremo come avviarla, fermarla, e come gestire correttamente i suoi file di log.
Per iniziare dovrai connetterti al tuo server tramite una connessione SSH. Se non l’hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in sicurezza con il protocollo SSH. In caso di server locale puoi passare al punto successivo e aprire il terminale del tuo server.
Prerequisiti
Se non è già presente sul tuo sistema, devi installare l’ultima versione stabile di Node.Js utilizzando i sesguenti comandi:
curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash -
yum install nodejs -y
Verifica l’installazione, richiedendo la versione attualmente installata:
node -v
v12.18.3
Creazione di un applicativo di esempio
Per testare la le funzionalità di PM2, prepara un semplice applicativo che stampa su console la data attuale, in modo da verificare l’esecuzione del tuo software nel tempo.
Prima però è necessario creare una directory dove salvare l’applicazione: procedi quindi utilizzando i seguenti comandi:
mkdir /var/node/pm2test -p
Entra nella directory appena creata:
cd /var/node/pm2test
Attraverso un editor di testo a tuo piacere crea un file “index.js”:
nano index.js
Inserisci nel file le seguenti istruzioni:
function writeToLogFile(){
// Ottieni la data attuale
currentDate = (new Date()).toISOString();
// Stampa la data
console.log( `[${currentDate}] - Alive` );
}
// Richiama la funzione di sopra ogni secondo:
setInterval( writeToLogFile , 1000 );
Salva il file appena creato e verifica il suo funzionamento:
node index.js
[2020-09-01T10:02:15.789Z] - Alive
[2020-09-01T10:02:16.798Z] - Alive
[2020-09-01T10:02:17.800Z] - Alive
Interrompi l’esecuzione dello script utilizzando la combinazione di tasti CTRL + C.
Installazione di PM2 e primo avvio
PM2 è presente come pacchetto npm, ma per poterlo utilizzare in tutto il sistema, e non solo nella tua applicazione, utilizza il parametro “-g” per effettuare un’installazione globale:
npm install pm2 -g
Una volta completato, puoi avviare la tua applicazione utilizzando il comando “start”:
pm2 start /var/node/pm2test/index.js
Se tutto funziona correttamente dovresti visualizzare il processo appena avviato, utilizzando il comando:
pm2 list
┌─────┬──────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼──────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ index │ default │ N/A │ fork │ 6554 │ 0s │ 0 │ online │ 0% │ 25.7mb │ root │ disabled │
└─────┴──────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
Attraverso il comando “list”, PM2 ti permette di visualizzare tutti i processi attualmente attivi, il loro consumo delle risorse di sistema e molte altre informazioni.
Procedi quindi eliminando tutti i processi presenti, utilizzando il comando:
pm2 delete all
Utilizzo avanzato di PM2
Per identificare meglio il processo nella lista di PM2, puoi utilizzare il parametro “name” per assegnare un identificativo alla tua applicazione.
Ad esempio, avviando l’applicazione di test attraverso:
pm2 start /var/node/pm2test/index.js --name pm2test
Puoi successivamente fermarla utilizzando il comando “delete” abbinato allo stesso nome “pm2test” usato sopra:
pm2 delete pm2test
Attraverso il parametro “watch”, PM2 avvierà l’applicazione controllando che ci siano modifiche nella directory: nel momento in cui rileverà dei cambiamenti, riavvierà automaticamente il processo.
In questo caso quindi avremo:
pm2 start /var/node/pm2test/index.js --watch
Un’altro importante parametro è “log”, che ti permette di indicare dove verrà salvato l’output della tua applicazione e avere un maggiore controllo sul file, ad esempio utilizzando logrotate.
Unendo tutti i parametri precedentemente indicati, avvia l’applicazione tramite:
pm2 start /var/node/pm2test/index.js --name pm2test --watch --log /var/log/pm2test.log
Controllo del file di log tramite logrotate
Spesso i file di log possono raggiungere dimensioni eccessive e occupare buona parte dello spazio su disco.
Per evitare questo problema, puoi utilizzare logrotate per effettuare la rotazione del file di log e indicare quando e come devono essere scartate informazioni ormai vecchie.
Per aggiungere un nuovo file di log, crea tramite un editor di testo un nuovo file nella directory /etc/logrotate.d:
nano /etc/logrotate.d/pm2test
Inserisci quindi le seguenti istruzioni e salva il file appena creato:
/var/log/pm2test.log {
rotate 3
size 20M
}
Dopo aver salvato il file di configurazione, logrotate inizierà a controllare periodicamente il file “/var/log/pm2test.log”: nel caso in cui dovesse superare i 20 Megabytes, cambierà il nome del log in “pm2test.log.1” per iniziarne uno nuovo.
Se il numero totale di file salvati supererà 3, logrotate eliminerà i vecchi file per far spazio ai nuovi.