Zum Inhalt springen
Deutsch

Process-Manager-Deployment

Für Deployments ohne Container-Orchestrierung — Bare-Metal, VMs, kleinere Setups — überwachen Process Manager wie systemd (Linux) oder PM2 (Node-fokussiert) actor-ts-Prozesse.

/etc/systemd/system/actor-ts.service
[Unit]
Description=actor-ts application
After=network-online.target
Wants=network-online.target
[Service]
Type=exec
User=actor-ts
Group=actor-ts
WorkingDirectory=/opt/actor-ts
Environment="NODE_ENV=production"
EnvironmentFile=/etc/env
ExecStart=/usr/bin/bun /opt/dist/main.js
Restart=on-failure
RestartSec=10s
TimeoutStopSec=60s
KillSignal=SIGTERM
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Terminal-Fenster
sudo systemctl daemon-reload
sudo systemctl enable actor-ts
sudo systemctl start actor-ts
sudo systemctl status actor-ts
sudo journalctl -u actor-ts -f
DirektiveZweck
Restart=on-failureAuto-Restart bei Non-Zero-Exit. Kombiniert mit RestartSec=10s für Backoff.
TimeoutStopSec=60sWie lange systemd nach SIGTERM vor SIGKILL wartet. Dimensioniert passend zum Phasen-Budget des Coordinated Shutdown.
KillSignal=SIGTERMDas Graceful-Shutdown-Signal. Triggert die Coordinated-Shutdown-Hooks des Frameworks.
User/GroupAls Non-Root ausführen. Immer.
StandardOutput=journalLogs fließen nach journald — zentral eingesammelt.
# /etc/env auf jedem Host:
ACTOR_TS_HOSTNAME=10.0.0.5 # IP dieses Hosts
ACTOR_TS_PORT=2552
ACTOR_TS_SEEDS=10.0.0.5:2552,10.0.0.6:2552,10.0.0.7:2552

Drei Hosts; jeder kennt die vollständige Seed-Liste. Einen weiteren Host später hinzufügen: an die Seed-Liste anhängen und ausrollen.

Für dynamische Deployments (autoskalierende VMs) nutze den DNS-Seed-Provider, gestützt durch deinen DNS-SD-Provider (Consul, Eureka etc.).

Terminal-Fenster
# Einen Node nach dem anderen stoppen, auf Cluster-Konvergenz warten,
# dann weiter:
ssh host-1 'sudo systemctl restart actor-ts'
# Auf Re-Up warten:
ssh host-2 'curl http://localhost:8558/ready'
# Dann:
ssh host-2 'sudo systemctl restart actor-ts'
# ...

Manuell, aber geradlinig. Tooling wie Ansible oder Salt automatisiert die Orchestrierung.

PM2 ist Node-fokussiert; funktioniert gut für actor-ts auf Node (Bun bietet native Unterstützung, integriert sich aber nicht nativ mit PM2s Binary).

ecosystem.config.json
{
"apps": [
{
"name": "actor-ts",
"script": "dist/main.js",
"exec_mode": "fork",
"instances": 1,
"max_memory_restart": "2G",
"kill_timeout": 60000,
"env_production": {
"NODE_ENV": "production",
"ACTOR_TS_PORT": "2552"
},
"error_file": "/var/log/error.log",
"out_file": "/var/log/out.log"
}
]
}
Terminal-Fenster
pm2 start ecosystem.config.json --env production
pm2 startup # systemd-Config generieren, damit PM2 beim Boot startet
pm2 save # aktuellen Zustand persistieren
OptionZweck
exec_mode: "fork"Ein Prozess pro actor-ts-Node. Nimm nicht Cluster-Mode (PM2s Cluster-Mode verwirrt Cluster-Semantik).
instances: 1Eine Instanz. Mehrere actor-ts im Cluster-Mode würden jeweils versuchen, derselbe Node zu sein, und Dinge kaputtmachen.
kill_timeout: 60000SIGTERM-bis-SIGKILL-Fenster. Mit Coordinated Shutdown abstimmen.
max_memory_restartAuto-Restart, wenn Speicher überschritten wird. Kombiniert mit Metriken, um vor dem Kill zu alerten.
SzenarioWahl
≤ 5 VMs, stabil, manueller Betriebsystemd / PM2
Dynamisches Skalieren, ≥ 10 VMsKubernetes
Bare-Metal mit Hardware-Affinitätsystemd
Multi-Cloud / On-Prem-HybridKubernetes (oder HashiCorp Nomad)

Process Manager sind niedrigere Abstraktion — weniger Features, aber weniger Dependencies. Für eine Single-Machine-Prod oder eine kleine VM-Flotte lohnt sich der K8s-Overhead nicht.