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.
systemd
Abschnitt betitelt „systemd“[Unit]Description=actor-ts applicationAfter=network-online.targetWants=network-online.target
[Service]Type=execUser=actor-tsGroup=actor-tsWorkingDirectory=/opt/actor-tsEnvironment="NODE_ENV=production"EnvironmentFile=/etc/envExecStart=/usr/bin/bun /opt/dist/main.jsRestart=on-failureRestartSec=10sTimeoutStopSec=60sKillSignal=SIGTERMStandardOutput=journalStandardError=journal
[Install]WantedBy=multi-user.targetsudo systemctl daemon-reloadsudo systemctl enable actor-tssudo systemctl start actor-ts
sudo systemctl status actor-tssudo journalctl -u actor-ts -fWichtige Direktiven
Abschnitt betitelt „Wichtige Direktiven“| Direktive | Zweck |
|---|---|
Restart=on-failure | Auto-Restart bei Non-Zero-Exit. Kombiniert mit RestartSec=10s für Backoff. |
TimeoutStopSec=60s | Wie lange systemd nach SIGTERM vor SIGKILL wartet. Dimensioniert passend zum Phasen-Budget des Coordinated Shutdown. |
KillSignal=SIGTERM | Das Graceful-Shutdown-Signal. Triggert die Coordinated-Shutdown-Hooks des Frameworks. |
User/Group | Als Non-Root ausführen. Immer. |
StandardOutput=journal | Logs fließen nach journald — zentral eingesammelt. |
Cluster über systemd-Hosts hinweg
Abschnitt betitelt „Cluster über systemd-Hosts hinweg“# /etc/env auf jedem Host:ACTOR_TS_HOSTNAME=10.0.0.5 # IP dieses HostsACTOR_TS_PORT=2552ACTOR_TS_SEEDS=10.0.0.5:2552,10.0.0.6:2552,10.0.0.7:2552Drei 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.).
Rolling Restart auf systemd
Abschnitt betitelt „Rolling Restart auf systemd“# 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).
{ "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" } ]}pm2 start ecosystem.config.json --env productionpm2 startup # systemd-Config generieren, damit PM2 beim Boot startetpm2 save # aktuellen Zustand persistierenWichtige Optionen
Abschnitt betitelt „Wichtige Optionen“| Option | Zweck |
|---|---|
exec_mode: "fork" | Ein Prozess pro actor-ts-Node. Nimm nicht Cluster-Mode (PM2s Cluster-Mode verwirrt Cluster-Semantik). |
instances: 1 | Eine Instanz. Mehrere actor-ts im Cluster-Mode würden jeweils versuchen, derselbe Node zu sein, und Dinge kaputtmachen. |
kill_timeout: 60000 | SIGTERM-bis-SIGKILL-Fenster. Mit Coordinated Shutdown abstimmen. |
max_memory_restart | Auto-Restart, wenn Speicher überschritten wird. Kombiniert mit Metriken, um vor dem Kill zu alerten. |
Typische Stolperfallen vermeiden
Abschnitt betitelt „Typische Stolperfallen vermeiden“Wann Process Manager vs K8s
Abschnitt betitelt „Wann Process Manager vs K8s“| Szenario | Wahl |
|---|---|
| ≤ 5 VMs, stabil, manueller Betrieb | systemd / PM2 |
| Dynamisches Skalieren, ≥ 10 VMs | Kubernetes |
| Bare-Metal mit Hardware-Affinität | systemd |
| Multi-Cloud / On-Prem-Hybrid | Kubernetes (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.
Wohin als nächstes
Abschnitt betitelt „Wohin als nächstes“- Kubernetes-Deployment — die K8s-Alternative.
- Docker Compose — für lokale Multi-Node-Setups.
- Coordinated Shutdown —
worauf dein
TimeoutStopSec/kill_timeoutSpielraum lassen muss. - Operations-Überblick — Produktions-Checkliste.