Deploy di una applicazione Node.js con PM2
Abbiamo finito la nostra applicazione Node.js, e la vogliamo caricare sul server.
Sappiamo che ci basta un comando per avviarla, o uno script per impostare anche qualche variabile.
Ma non penso sia il metodo migliore, perchè comunque non tengono in considerazione diversi fattori.
Un modo migliore è usare PM2, che sostanzialmente è un Process Manager!
Io mi sto trovando bene, in quanto l'installazione è stata facile, il suo utilizzo anche.
Io lo sto usando su Debian 10.
Inoltre, nella documentazione, non si esclude di poterlo usare anche con script di altri linguaggi, o direttamente con eseguibili.
Per l'installazione basta questo comando:
# npm install pm2@latest -g
Per avviare il nostro script basterà questo:
$ pm2 start app.js --watch
Con l'opzione --watch gli indichiamo di riavviare il processo nel caso si stoppi per qualche motivo.
Ovviamente PM2 non finisce qui; ad esempio possiamo vedere i processi attivi:
$ pm2 list
┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐ │ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │ ├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤ │ 0 │ app │ default │ 0.0.0 │ fork │ 9284 │ 21h │ 72 │ online │ 0.6% │ 64.2mb │ root │ enabled │
Possiamo anche stopparlo, riavviarlo o cancellarlo:
$ pm2 stop app
$ pm2 restart app
$ pm2 delete app
Possiamo sia indicare il nome che l'id.
Per avere più informazioni:
$ pm2 show 0
Describing process with id 0 - name app ┌───────────────────┬───────────────────────────────┐ │ status │ online │ │ name │ app │ │ namespace │ default │ │ version │ 0.0.0 │ │ restarts │ 72 │ │ uptime │ 21h │ │ script path │ /var/www/html/films/app.js │ │ script args │ N/A │ │ error log path │ /root/.pm2/logs/app-error.log │ │ out log path │ /root/.pm2/logs/app-out.log │ │ pid path │ /root/.pm2/pids/app-0.pid │ │ interpreter │ node │ │ interpreter args │ N/A │ │ script id │ 0 │ │ exec cwd │ /var/www/html/films │ │ exec mode │ fork_mode │ │ node.js version │ 10.15.2 │ │ node env │ N/A │ │ watch & reload │ ✔ │ │ unstable restarts │ 0 │ │ created at │ 2020-03-28T18:23:01.917Z │ └───────────────────┴───────────────────────────────┘ Actions available ┌────────────────────────┐ │ km:heapdump │ │ km:cpu:profiling:start │ │ km:cpu:profiling:stop │ │ km:heap:sampling:start │ │ km:heap:sampling:stop │ └────────────────────────┘ Trigger via: pm2 trigger app Code metrics value ┌────────────────────────┬───────────┐ │ Heap Size │ 21.50 MiB │ │ Heap Usage │ 82.4 % │ │ Used Heap Size │ 17.72 MiB │ │ Active requests │ 0 │ │ Active handles │ 15 │ │ Event Loop Latency │ 0.67 ms │ │ Event Loop Latency p95 │ 3.81 ms │ │ HTTP │ 0 req/min │ │ HTTP Mean Latency │ 755 ms │ │ HTTP P95 Latency │ 30009 ms │ └────────────────────────┴───────────┘ Divergent env variables from local env ┌────────────────┬────────────────────────────────────────┐ │ PWD │ /var/www/html/films │ │ SSH_CONNECTION │ 62.211.201.61 57090 217.114.221.118 22 │ │ XDG_SESSION_ID │ 34 │ │ SSH_CLIENT │ 62.211.201.61 57090 22 │ └────────────────┴────────────────────────────────────────┘
Per visualizzare il consumo di risorse:
$ pm2 monit
Verrà visualizzata una "schermata" con l'utilizzo in tempo reale.
Per tutto il resto vi rimando alla documentazione che è davvero ben fatta.
Enjoy!
nodejs pm2
Commentami!