Deploy di una applicazione Node.js con PM2

Mattepuffo's logo
Deploy di una applicazione Node.js con PM2

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!


Condividi

Commentami!