Node.js Monitor PM2


Eine Node.js Applikation wird normalerweise wie folgt gestartet:
~
node app.js
~
Jetzt läuft die Node Applikationen. Im Vergleich zu PHP ist das ein komplett andere Denkweise: Apache und PHP gehen Hand in Hand. Apache kann gut ohne PHP leben, PHP jedoch kaum ohne Apache (oder entsprechendem Webserver). Mit einer .php Datei allein wird man kaum eine Sinnvolle Web Applikation bauen, mit einer .js Datei hingegen schon.

Eine Node App ist ein vollwertiger Server

Um eine Node Applikation zu betreiben ist kein zusätzlicher Webserver notwendig. Der Webserver ist Teil der App. Das hat jedoch auch einige Folgen: Fehler in der Applikation sind fatal. Nehmen wir wieder PHP als Beispiel. Ein Fehler in der Anwendung führen dazu, dass der Request mit einem Error 500 abgebrochen wird. Der nächste User findet wieder eine jungfräuliche Umgebung vor. Anders bei Node.js: Ein Fehler ist fatal, denn er führt dazu dass die ganze Applikation und damit auch der Server abstürzt und nicht mehr wieder selber hoch kommt. Damit bleibt die Node.js App nach einem Fehler nicht mehr erreichbar, bis sie wieder gestartet wird.

Node Forever

Das Modul gibts und ist wohl eines der bekannteren. Node Forever schaut, dass eine Node Applikation wenn sie abstürzt wieder gestartet wird. Ich habe mich nie mit Forever beschäftigt sondern bin eigentlich nur zufällig auf pm2 gestossen.

Node Runner: PM2

PM2 ist ein exzellentes Modul, scheint stabil zu sein und sehr einfach zu bedienen und bietet ein paar nützliche Features:
– Autorestart bei Absturz
– Logging
– Hot Reload von Code
– Monitor
– Load balancing (noch nicht ausprobiert)
– Mehrere Apps laufen lassen (noch nicht ausprobiert)
– und noch mehr
PM2 Node.js Monitor
Der Monitor für eine Node.js Applikation. Nicht in alle tiefen, aber doch auf einen Blick den Stand.
Die Installation und die In Betriebnahme ist denkbar einfach:
~
npm install -g pm2
pm2 start app.js
~
That’s it. Von jetzt an kann die App noch so fehlerhaft sein und regelmässig abstürzen, sie kommt immer wieder hoch (sollte natürlich das Ziel sein, dass das nie vorkommt).