cryeffect.net

PM2 vs systemd – Prozessmanagement für Node.js-Anwendungen

Übersicht: PM2 und systemd im Vergleich

Was ist PM2?

PM2 ist ein Production Process Manager für Node.js-Anwendungen. Es bietet eine einfache und intuitive Möglichkeit, Node.js-Prozesse zu verwalten, zu überwachen und automatisch neu zu starten.

Was ist systemd?

systemd ist das Standard-Init-System moderner Linux-Distributionen. Es verwaltet alle Systemdienste und kann auch für Node.js-Anwendungen verwendet werden, erfordert aber mehr Konfiguration.

Warum PM2 verwenden?

  • Einfachheit: Keine komplexe Konfiguration nötig
  • Hot Reload: Zero-Downtime-Deployments
  • Monitoring: Eingebaute Überwachung und Logs
  • Cluster-Modus: Automatische Load-Balancing
  • Auto-Restart: Automatischer Neustart bei Fehlern

Installation von PM2

1
npm install -g pm2

PM2 - Grundlegende Bedienung

Anwendung starten

1
2
3
4
5
6
7
8
# Einfacher Start
pm2 start app.js

# Mit Namen
pm2 start app.js --name "meine-app"

# Mit Konfiguration
pm2 start app.js --name "api" --instances 4

Anwendungen verwalten

1
2
3
4
5
6
7
8
9
10
11
# Status aller Prozesse
pm2 status

# Prozess stoppen
pm2 stop app-name

# Prozess neu starten
pm2 restart app-name

# Prozess löschen
pm2 delete app-name

Logs anzeigen

1
2
3
4
5
6
7
8
# Alle Logs
pm2 logs

# Logs einer spezifischen App
pm2 logs app-name

# Live-Logs verfolgen
pm2 logs --lines 100

Erweiterte Funktionen

1
2
3
4
5
6
7
8
# Cluster-Modus (nutzt alle CPU-Kerne)
pm2 start app.js -i max

# Zero-Downtime Reload
pm2 reload app-name

# Monitoring
pm2 monit

systemd - Konfiguration für Node.js

Service-Datei erstellen

1
sudo nano /etc/systemd/system/meine-app.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=Meine Node.js App
After=network.target

[Service]
Type=simple
User=nodejs
WorkingDirectory=/var/www/meine-app
ExecStart=/usr/bin/node app.js
Restart=on-failure
RestartSec=10
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

systemd-Befehle

1
2
3
4
5
6
7
8
9
10
11
# Service aktivieren
sudo systemctl enable meine-app

# Service starten
sudo systemctl start meine-app

# Status prüfen
sudo systemctl status meine-app

# Logs anzeigen
sudo journalctl -u meine-app -f

Vergleich: PM2 vs systemd

Einfachheit der Einrichtung

  • PM2: Ein Befehl genügt: pm2 start app.js
  • systemd: Erfordert Service-Datei und mehrere Befehle

Entwicklerfreundlichkeit

  • PM2: Speziell für Node.js entwickelt, viele integrierte Features
  • systemd: Generisches System, weniger Node.js-spezifische Features

Performance und Ressourcen

  • PM2: Cluster-Modus für Multi-Core-Nutzung
  • systemd: Einzelprozess, manueller Load-Balancing nötig

Monitoring und Debugging

  • PM2: Eingebautes Monitoring: pm2 monit
  • systemd: Standard-Linux-Tools: journalctl, systemctl status

Hot Reloading

  • PM2: Zero-Downtime: pm2 reload app-name
  • systemd: Erfordert Service-Restart mit kurzer Downtime

Wann welches Tool verwenden?

PM2 eignet sich für:

  • Node.js-Entwickler ohne Linux-Admin-Erfahrung
  • Schnelle Deployments und Prototyping
  • Anwendungen, die häufig aktualisiert werden
  • Multi-Core-Anwendungen (Cluster-Modus)

systemd eignet sich für:

  • Produktionsserver mit strikten System-Standards
  • Integration in bestehende systemd-Infrastruktur
  • Anwendungen mit minimalen Ressourcenanforderungen
  • Systemadministratoren, die einheitliche Service-Verwaltung bevorzugen

Praktisches Beispiel

PM2-Konfigurationsdatei (ecosystem.config.js)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
module.exports = {
apps: [{
name: 'web-api',
script: './app.js',
instances: 'max',
exec_mode: 'cluster',
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production',
PORT: 3000
}
}]
};
1
2
# Starten mit Konfiguration
pm2 start ecosystem.config.js --env production

Tipps

  • Nutze PM2 für Entwicklung und kleinere Deployments
  • Verwende systemd für große Produktionssysteme
  • PM2 kann mit systemd kombiniert werden: PM2 als systemd-Service
  • Beide Tools unterstützen Umgebungsvariablen und Logging

Fazit

PM2 bietet eine deutlich einfachere und entwicklerfreundlichere Lösung für Node.js-Anwendungen, während systemd mehr Kontrolle und Integration in Linux-Systeme bietet. Für die meisten Node.js-Projekte ist PM2 die bessere Wahl, besonders wenn schnelle Deployments und einfache Bedienung wichtig sind.