pm2 je serverový process manager pro NodeJS aplikace. Jedná se o užitečnou utilitu, která vám pomůže lépe a jednodušeji spravovat vaše NodeJS aplikace na serveru.
NodeJS: JavaScript na serveru
Základní funkcí pm2 je spouštení NodeJS scriptů. Spouštěním se tady rozumí i znovu spuštění aplikace po nějaké havárii. To znamená, že když vám vaše aplikace zhavaruje, pm2 se postará o její automatické znovu-spuštění.
pm2 start server.js
pm2 start --watch server.js # bude monitorovat změny v server.js a reloadovat aplikaci v případě změny
pm2 stop server # zastaví provádění scriptu
pm2 delete server # zastaví script a navíc jej zruší
pm2 list # seznam spuštěných, ale i pozastavených, aplikací
Vedle toho umí pm2 sledovat i změny ve scriptech vaší aplikace a automaticky reloadovat aplikaci při jakékoliv změně. To se hodí například když pushujete na server novou verzi aplikace. pm2 se postará o její znovuspuštění na základě změny v souborech.
Vedle tohoto můžete spuštěné aplikace monitorovat. Sledovat vytížení CPU či paměti.
pm2 monit
Další významnou funkcí je clustering. Pokud nepoužíváte nějaký load balancer jako je například Nginx, pak pm2 umí spustit požadovaný počet kopii vaší aplikace a postará se o jejich clusterizaci.
pm2 start server.js -i 0 # spustí tolik kopii, kolik máte jader
Vedle toho můžete spustit pm2 v módu webového serveru a pak na portu 9615 získat debog info v JSON formátu.
pm2 web
Další užitečnou funkcinoalito pm2 je vytváření startovacích init scriptů pro váš server.
pm2 startup centos
pm2 vytvoří script do /etc/init.d a tak zajistí automatické spouštění webové aplikace po restartování celého serveru.
pm2 samzřejmě umí i předávat parametry zadané na příkazové řádce interpeteru nodejs
pm2 start server.js -- -p 8080
# nebo
pm2 start server.js --node-args="--debug=7001 --trace-deprecation"
pm2 obsahuje i V8 GC memory leak detection.
Alternativou k pm2, co by serverového process managera může být například modul forever, nebo passenger.
Passenger ja pak daleko všestranější, ale i složitější, nástroj, který se neomezuje na NodeJS aplikace a umí spravovat v podstatě jakoukoliv aplikaci v Pythonu, Ruby a podobně.