Node.js è considerata una delle piattaforme chiave per lo sviluppo di micro-servizi lato back-end.

pm2 node process manager

Un micro-servizio è un processo autonomo che svolge task molto specifici per una data applicazione.
Gestirli al meglio è un aspetto cruciale per la buon riuscita di un progetto e il suo mantenimento.

PM2 è lettaralmente uno dei moduli più scaricati dal Node Packate Manager (NPM). Insieme a Express, Grunt, Gulp, Browserify, Cordova e altri. Nasce essenzialmente per la gestione dei processi. Permette di tenere le applicazioni perennemente in esecuzione, riavviarle nel caso di errori e addirittura effettuare operazioni di load-balancing fra più istanze del processo.

Vediamo assieme una lista dei comandi più utili e interessanti.

Avviare un’applicazione su PM2 è estremamente facile:

$ pm2 start app.js

Con questo comando si esegue l’applicazione in background senza la necessità di dover usare nohup sui sistemi UNIX.

PM2 funziona in modo stabile su Linux e MacOSx, su Windows è in Beta.
L’installazione avviene dal gestore dei pacchetti di Node, NPM:

$ npm install pm2 -g

Installa globalmente pm2.

$ pm2 save

Salva la lista dei processi in esecuzione su pm2. E con:

$ pm2 startup

Si fa si che al riavvio la lista dei processi venga lanciata nuovamente.

PM2 inoltre include un sistema di moduli per estenderne le proprie capacità attraverso plugin.

$ pm2 install <module_name>

Altri comandi utili sono:

$ pm2 start app.js --name="nome-processo"

che assegna un nome al processo appena avviato.

$ pm2 list

che elenca sul terminale la lista dei processi gestiti da PM2 e lo stato in cui si trovano.

$ pm2 monit

Monitora sul terminale CPU e memoria usati da ogni processo.

Ancora, altrettanto intuitivi sono i comandi per la gestione dei processi:

$ pm2 stop     <app_name|id|'all'|json_conf>
$ pm2 restart  <app_name|id|'all'|json_conf>
$ pm2 delete   <app_name|id|'all'|json_conf>

Per ottenere informazioni specifiche su un dato processo in esecuzione:

$ pm2 describe <id|app_name>

Per visualizzare i log in tempo reale di ogni processo in esecuzione:

$ pm2 logs

E’ anche possibile “guardare” i file dei processi e fare in modo che alla modifica di un file automaticamente venga riavviato il processo. Questo aggiungendo il flag --watch durante l’avvio del processo:

$ pm2 start app.js --watch

Eseguire script che vengano interpretati non solo da Node:

$ pm2 start my-python-script.py --interpreter python

e passare parametri addizionali da CLI:

$ pm2 start app.js -- --parametro 123

PM2 essendo un progetto nato da Keymetrics.io è fortemente integrato con la loro Dashboard di controllo. E’ possibile con un singolo comando associare la propria istanza di PM2 ad un bucket e monitorare con la dashboard di keymetrics ogni processo in esecuzione su PM2. Stato, utilizzo di CPU, consumo di memoria, errori, logs generici e tanto altro.
Il pacchetto free di keymetrics attualmente restringe l’utilizzo ad 1 solo bucket ed 1 singolo server.
Motivo per cui inizialmente erano nati dei plugin come https://github.com/achingbrain/pm2-web per hostare direttamente la dashboard presso il proprio server, purtroppo pm2-web è un’interfaccia deprecata perchè aggiornamenti successivi di pm2 hanno adottato soluzioni architetturali differenti per favorire l’uso della loro interfaccia proprietaria.

In futuro si spera vengano “ammorbiditi” i limiti d’utilizzo per la dashboard.