Node.js Anwendungen mit PM2 verwalten
Node.js ist eine Open-Source-Laufzeitumgebung für JavaScript, die die Ausführung von JavaScript-Code außerhalb des Browsers ermöglicht. Sie basiert auf der V8-Engine von Chrome, die für Geschwindigkeit und Skalierbarkeit bekannt ist. Damit eignet sich Node.js besonders für Echtzeit- und Hochleistungsanwendungen. Der Betrieb von Node-Anwendungen in Produktionsumgebungen bringt jedoch spezielle Herausforderungen mit sich – darunter die Handhabung unerwarteter Abstürze, die Prozessverwaltung und die Sicherstellung einer kontinuierlichen Verfügbarkeit. PM2 ist ein Prozessmanager für Node.js-Anwendungen, der diese Aufgaben vereinfacht, indem er Monitoring, Neustarts und Optimierungsfunktionen bereitstellt.
In dieser Anleitung erfahren Sie, wie Sie Node.js-Anwendungen mit PM2 verwalten, welche zentralen Funktionen zur Verfügung stehen und welche Best Practices für den Einsatz in Produktionsumgebungen gelten.
Voraussetzungen
Stellen Sie sicher, dass Sie Zugriff auf Ihr System als nicht-root Benutzer mit Sudo-Rechten haben und dass macOS, Linux oder Windows mit installierten Node- und NPM-Paketen genutzt wird.
PM2 mit NPM installieren
Installieren Sie PM2 über den NPM-Paketmanager:
$ sudo npm install pm2 -g
Eine Beispiel-Node.js-Anwendung erstellen
Gehen Sie wie folgt vor, um eine Beispielanwendung mit Node.js zu erstellen.
Zum Home-Verzeichnis wechseln
$ cd ~
Anwendungsdatei erstellen
Legen Sie eine Datei mit dem Namen app.js an, beispielsweise mit dem Editor vim:
$ vim app.js
Code in die Datei einfügen
Fügen Sie folgenden Code in die Datei ein:
const http = require('http');
const hostname = '0.0.0.0';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
Die Datei app.js ist eine einfache Node.js-Webanwendung, die auf Port 3000 lauscht. Bei einer HTTP-Anfrage antwortet sie mit der Nachricht „Hello World“.
Anwendung mit PM2 starten
Starten Sie Ihre Node.js-Anwendung mit PM2. Ersetzen Sie app.js bei Bedarf durch die Einstiegspunkt-Datei Ihrer Anwendung:
$ pm2 start app.js
Die Ausgabe sollte in etwa so aussehen:
[PM2] Starting /home/linuxuser/app.js in fork_mode (1 instance)
[PM2] Done.
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0 │ app │ fork │ 0 │ online │ 0% │ 4.4mb │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
Zusätzliche Parameter
PM2 bietet zusätzliche Parameter zur Verwaltung Ihrer Anwendung:
--name <app_name>– einen Namen für die Anwendung festlegen--watch– Anwendung automatisch neu starten, wenn sich eine Datei ändert--max-memory-restart <memory>– Speicherlimit festlegen, ab dem ein Neustart erfolgt--log <log_file>– eine Logdatei definieren--restart-delay <delay>– Zeitverzögerung zwischen automatischen Neustarts (in ms)--time– Zeitstempel in Logs hinzufügen--no-autorestart– automatische Neustarts deaktivieren--cron– Cron-Muster für automatische Neustarts verwenden--no-daemon– verhindern, dass die Anwendung im Hintergrundprozess läuft
Die vollständige Liste aller Parameter finden Sie in der offiziellen Dokumentation.
Anwendung verwalten
Mit PM2 können Sie Ihre Node.js-Anwendung verwalten, indem Sie Aktionen wie Neustart, Reload, Stopp oder Löschen durchführen.
Anwendung neu starten
$ pm2 restart app
Anwendung neu laden
$ pm2 reload app
Anwendung stoppen
$ pm2 stop app
Anwendung löschen
$ pm2 delete app
Alle Anwendungen auflisten
Zeigen Sie alle aktuell von PM2 verwalteten Anwendungen an:
$ pm2 list
Logs anzeigen
Sehen Sie sich die von Ihrer Anwendung erzeugten Logs in Echtzeit an:
$ pm2 logs
Um ältere Logs einzusehen, geben Sie mit dem Parameter --lines die gewünschte Anzahl Zeilen an:
$ pm2 logs --lines 200
Ressourcennutzung überwachen
Überwachen Sie in nahezu Echtzeit, wie viele Ressourcen Ihre Anwendungen verbrauchen:
$ pm2 monit
Ein webbasiertes Dashboard einrichten
Richten Sie ein webbasiertes PM2-Dashboard mit folgendem Befehl ein:
$ pm2 plus
Folgen Sie den Anweisungen, um ein PM2-Konto zu erstellen oder sich einzuloggen. Falls Sie noch kein Konto besitzen, geben Sie die erforderlichen Daten an und akzeptieren Sie die Lizenzvereinbarung.
Die Ausgabe sieht beispielsweise so aus:
[PM2 I/O] Do you have a pm2.io account? (y/n) n
[PM2 I/O] No problem! We just need a few details to create your account.
[PM2 I/O] Please choose a username: centronexampleuser
[PM2 I/O] Please choose an email: admin@example.com
[PM2 I/O] Please choose a password: ************
...
[PM2 I/O] Do you accept the terms and privacy policy (https://pm2.io/legals/terms_conditions.pdf)? (y/n) y
[PM2 I/O] Successfully authenticated
[PM2 I/O] Successfully validated
[+] PM2+ activated!
[PM2 I/O] Successfully connected to bucket PM2 Plus Monitoring
[PM2 I/O] You can use the web interface here: https://app.pm2.io/#/bucket/67cb27ccd623d57f6d4c63c0
Ersetzen Sie centronexampleuser durch Ihren gewünschten Benutzernamen, admin@example.com durch Ihre Login-E-Mail-Adresse und vergeben Sie ein starkes Passwort zum Schutz Ihres Kontos.
Nächste Schritte
- Öffnen Sie einen Webbrowser und rufen Sie die angegebene URL auf.
- Melden Sie sich mit Ihren PM2-Zugangsdaten an.
- Beginnen Sie mit der Überwachung und Verwaltung Ihrer Anwendungen über das PM2 Plus Dashboard.
Hinweis: PM2 Plus ist ein abonnementbasiertes Angebot. Die Kosten hängen von der Anzahl der zu überwachenden Prozesse ab. Details finden Sie auf der PM2 Plus Preisseite.
PM2 für den automatischen Start beim Server-Boot konfigurieren
Erzeugen Sie ein Startskript und konfigurieren Sie PM2 so, dass es beim Systemstart automatisch ausgeführt wird:
$ pm2 startup
Die Ausgabe sollte in etwa so aussehen:
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/home/linuxuser/.nvm/versions/node/v22.14.0/bin /home/linuxuser/.nvm/versions/node/v22.14.0/lib/node_modules/pm2/bin/pm2 startup systemd -u linuxuser --hp /home/linuxuser
Kopieren Sie den angegebenen Befehl und führen Sie ihn aus, um den PM2-Prozess dauerhaft einzurichten:
$ sudo env PATH=$PATH:/home/linuxuser/.nvm/versions/node/v22.14.0/bin /home/linuxuser/.nvm/versions/node/v22.14.0/lib/node_modules/pm2/bin/pm2 startup systemd -u linuxuser --hp /home/linuxuser
Die Ausgabe sollte so ähnlich aussehen:
...
[PM2] Writing init configuration in /etc/systemd/system/pm2-linuxuser.service
Created symlink /etc/systemd/system/multi-user.target.wants/pm2-linuxuser.service → /etc/systemd/system/pm2-linuxuser.service.
...
Anwendungen für den automatischen Start beim Server-Boot konfigurieren
Damit Ihre PM2-Anwendungen automatisch beim Serverstart gestartet werden, speichern Sie diese in einer Liste:
Laufende Anwendungen speichern
$ pm2 save
Die erwartete Ausgabe sieht so aus:
[PM2] Saving current process list...
[PM2] Successfully saved in /home/linuxuser/.pm2/dump.pm2
Anwendungen manuell wiederherstellen
Falls Sie die gespeicherten Anwendungen manuell wiederherstellen möchten, nutzen Sie folgenden Befehl:
$ pm2 resurrect
Die Ausgabe sieht in etwa so aus:
[PM2] Resurrecting
[PM2] Restoring processes located in /home/linuxuser/.pm2/dump.pm2
[PM2] Process /home/linuxuser/app.js restored
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0 │ app │ fork │ 0 │ online │ 0% │ 21.3mb │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
Auf Updates prüfen
Zeigen Sie eine Liste veralteter NPM-Pakete auf Ihrem System an:
$ npm outdated -g
Mit diesem Befehl wird eine Liste global installierter NPM-Pakete angezeigt, für die neuere Versionen verfügbar sind.
PM2 aktualisieren
Aktualisieren Sie das PM2-Paket über NPM. Während des Upgrades werden alle laufenden PM2-Prozesse angehalten, bis die Aktualisierung abgeschlossen ist – dadurch kommt es zu Ausfallzeiten für Ihre Anwendungen:
$ npm install pm2@latest -g
Führen Sie anschließend ein In-Memory-Update von PM2 durch:
$ pm2 update
Best Practices und Sicherheitsaspekte
Ausfallzeiten mit dem Cluster-Modus vermeiden
PM2-Prozesse können im Lebenszyklus mehrfach neu starten, was kurzfristige Ausfälle verursachen kann. Nutzen Sie den Cluster-Modus von PM2, um Ausfallzeiten zu reduzieren. Dabei laufen mehrere Instanzen Ihrer Anwendung parallel, sodass bei einem Neustart jeweils nur eine Instanz neu startet, während die übrigen weiterhin Anfragen bedienen.
Löschen Sie die Anwendung zunächst, bevor Sie den Cluster-Modus aktivieren:
$ pm2 delete app
Starten Sie die Anwendung im Cluster-Modus und geben Sie die Anzahl der Instanzen mit dem Parameter -i an:
$ pm2 start app.js -i 3
Dieser Befehl startet drei Instanzen Ihrer Anwendung im PM2-Cluster-Modus.
Sie können die Anwendung skalieren, indem Sie die neue Instanzanzahl angeben:
$ pm2 scale app 4
Damit wird die Anwendung auf vier Instanzen skaliert.
Fehlgeschlagene Anfragen mit einem sauberen Shutdown vermeiden
PM2 ermöglicht einen geordneten Shutdown, indem Signale an Ihre Anwendung gesendet werden, damit diese kontrolliert beendet wird. So lassen sich Datenverlust oder -korruption vermeiden, weil laufende Aufgaben vor dem Beenden abgeschlossen werden können.
PM2 handhabt den Graceful-Shutdown wie folgt:
- Vor dem Herunterfahren sendet PM2 ein
SIGINT-Signal an die Anwendung. - Die Anwendung fängt dieses Signal ab.
- Sie beendet aktive Anforderungen und schließt Ressourcen wie Datenbankverbindungen.
- Die Anwendung beendet sich.
Fügen Sie folgenden Code ein, um den sauberen Shutdown in Ihrer Anwendung zu aktivieren:
process.on('SIGINT', function() {
// sigint signal received, log a message to the console
console.log('Shutdown signal intercepted');
// close the http server
server.close();
// exit the process
process.exit();
});
Der obige Code ermöglicht einen geordneten Shutdown: Das SIGINT-Signal wird abgefangen, eine Meldung protokolliert, der HTTP-Server geschlossen und der Prozess sauber beendet.
Fazit
In diesem Artikel haben Sie gelernt, wie Sie PM2 installieren und einsetzen, um Node.js-Anwendungen in Produktion zu verwalten. Sie haben PM2 für den automatischen Start beim Systemboot konfiguriert, die Ressourcennutzung überwacht, Logs in Echtzeit betrachtet und das webbasierte PM2-Plus-Dashboard eingerichtet. Mit diesen Schritten bleiben Ihre Node.js-Anwendungen zuverlässig verfügbar, erholen sich automatisch von Abstürzen und lassen sich dank des umfangreichen Funktionsumfangs von PM2 einfacher betreiben. Weitere Informationen finden Sie in der offiziellen Dokumentation.


