Teams, die OpenClaw in 2026 pilotieren, wollen häufig ein Staging-Gateway neben einem Produktions-Gateway auf derselben physischen Mac mini-Maschine betreiben, um Beschaffungszyklen zu sparen—und beobachten dann, wie beide Profile denselben Token-Cache überschreiben, um TCP 8787 ringen oder sich gegenseitig den PATH vererben, weil launchd dieselbe plist-Vorlage wiederverwendet hat. Dieser Artikel beschreibt eine betriebsnahe Trennung: getrennte Heimatverzeichnisse für Konfigurationszustand, nicht überlappende Listener-Ports, unterschiedliche LaunchAgent-Labels, pro Profil eigene Logdateien und ein doctor-first-Smoke-Pfad, der mit EADDRINUSE-Triage, Erststart-PATH- und Node-Checks sowie doctor-Diagnostik zusammenpasst.
Sie erhalten eine Port-Matrix, eine Checkliste für Tickets und harte Zahlen—Miet-Baseline etwa 16,9 $ pro Tag, Port-Paar 8787/8788, Verzeichnisrechte 700 und ein fünfminütiges Smoke-Fenster vor Live-Traffic.
Warum zwei Profile auf einem Mac
Apple-Silicon-Mac-mini-Knoten bleiben unter parallelen Gateways leise, liefern natives launchd-Verhalten und entsprechen dem CapEx-armen Pilot, den Finanzteams erwarten. Miete über MacHTML liegt typischerweise bei etwa 16,9 $/Tag auf öffentlichen Preisseiten—günstiger, als das falsche Profil in Produktion zu schieben, weil staging eine API-Key-Datei rotierte, die beide Instanzen lasen. Getrennte Profile halten experimentelle Tool-Allowlists von kundenorientierter Automation fern und erlauben dennoch plist-Diffs auf echter Hardware statt in Linux-CI ohne Schlüsselbund-Dialoge.
Halten Sie das Modell strikt: Profile sind Isolationsgrenzen, keine Feature-Flags. Jedes Profil besitzt eigenes Konfigurationsroot, Logverzeichnis, Listener-Port, LaunchAgent-Label und einen Kalender für Secret-Rotation.
Verzeichnislayout und Geheimnisse
Legen Sie zwei Wurzeln wie ~/.openclaw-staging und ~/.openclaw-prod mit chmod 700 an, damit andere Konsolenbenutzer auf einem geteilten Mini keine Caches traversieren. Speichern Sie Provider-Tokens, sqlite-Zustand und heruntergeladene Skills je Root—niemals staging per Symlink in Produktion „zur Platteersparnis“. Platte ist billiger als Incident Response: selbst eine 512 GB-Maschine kostet weniger als eine falsch geroutete Produktionskonversation, wenn staging-Zugangsdaten über einen gemeinsamen Cache-Pfad leaken.
Dokumentieren Sie, welcher Automatisierungsbenutzer welchen Baum besitzt. Laufen beide Agenten als derselbe macOS-Benutzer, hängt die Trennung vollständig an Verzeichnissen und plist-Argumenten—bei späterer Benutzertrennung helfen unveränderte Verzeichnisnamen bei der Migration.
LaunchAgent-Labels, Logs, Umgebung
Verwenden Sie unterschiedliche Labels wie com.example.openclaw.gateway.staging und com.example.openclaw.gateway.prod; doppelte Labels lassen launchctl kickstart -k die falsche Welt neu starten. Setzen Sie StandardOutPath und StandardErrorPath auf profilspezifische Dateien unter ~/Library/Logs/OpenClaw/, damit tail -F ohne Vermischung möglich ist.
Innerhalb jeder plist setzen Sie LaunchEnvironmentVariables mit dem absoluten Node-Binary aus which node, einem gestutzten PATH, der Homebrew- oder volta-Shims vor Systempfaden listet, und einer Variable wie OPENCLAW_PROFILE_DIR auf das Profilroot. Proben Sie die plist zuerst manuell; erst dann launchctl bootstrap gui/$(id -u) wie im Erststart-Leitfaden beschrieben.
Setzen Sie ThrottleInterval auf mindestens 10 Sekunden in Crash-Schleifen, damit launchd nicht stündlich tausende identische Stacktraces schreibt.
Port- und Besitz-Matrix
| Dimension | Staging | Produktion |
|---|---|---|
| Listener-Port | 8787 | 8788 |
| Konfig-Root | ~/.openclaw-staging | ~/.openclaw-prod |
| LaunchAgent-Label | …gateway.staging | …gateway.prod |
| API-Key-Rotation | wöchentlich bei aktiver Entwicklung | monatlich oder nach Change-Window |
| doctor | vor jedem Merge-Preview | nach jedem Deploy-Tag |
Überwachung, Drift und launchctl-Snapshots
Speichern Sie wöchentlich die Ausgabe von launchctl print gui/$(id -u) je Profil und vergleichen Sie die Hash-Summen der exportierten plist-Dateien mit dem Configuration-Management-System. Wenn sich nur ein Whitespace unterscheidet, markieren Sie den Commit trotzdem als riskant: manche Editoren fügen BOM-Zeichen ein, die launchd still ignoriert oder falsch parst.
Für Metriken empfiehlt sich ein schlankes Histogramm pro Profil: Anzahl aktiver Tool-Calls, mittlere Latenz zur Modell-API, Rate von 429-Antworten und Anzahl erfolgreicher doctor-Läufe pro Tag. Halten Sie die Kardinalität niedrig—nicht jede Benutzer-ID als Label, höchstens 12 Buckets pro Histogramm, damit Prometheus oder VictoriaMetrics auf dem Mini nicht speicherhungrig wird.
Backup- und Restore-Tests gehören in denselben Kalender wie Secret-Rotation: einmal im Quartal staging komplett löschen und aus dem letzten Tarball wiederherstellen, dann Produktion nur trocken simulieren (Dry-Run-Skripte ohne Live-Traffic). Dokumentieren Sie die benötigte Zeit—Ziel ist unter 30 Minuten bis wieder grüner Health-Check.
Reverse-Proxys, Loopback-Binds und Fallen
Die meisten Teams terminieren TLS auf nginx oder Caddy und leiten auf Loopback weiter. Beide Gateways sollten nur auf 127.0.0.1 lauschen, sofern keine explizite Firewall existiert—0.0.0.0 auf einem geteilten Mini exponiert Automation ins LAN. Spiegeln Sie Idle-Timeouts zwischen staging und Produktion innerhalb von ±5 %, sonst verschwinden Reproduktoren hinter künstlich kurzen Idle-Fenstern.
Schlüsselbund-Prompts koppeln stillschweigend: importieren beide Profile dieselbe Signatur- oder Client-Zertifikatsidentität, cached macOS Entsperrungen pro Sitzung. Führen Sie security find-identity -v -p codesigning je Profil aus und hängen Sie Screenshots ans Ticket.
Für Incident-Response: ein einseitiges Runbook—welches Label zuerst bootout, welcher Port geleert wird, welches Backup-Tar von ~/.openclaw-prod zurückkommt, welche doctor-Flags zuletzt grün waren. Ohne dies landen Teams bei killall node, was launchd ignoriert und einen dritten Prozess garantiert.
Rollout-Checkliste
- Beide Verzeichnisse mit
chmod 700anlegen und mitls -leprüfen. - Ports mit
lsof -nP -iTCP:8787 -sTCP:LISTENund8788reservieren; Zombies vor dem Bind freigeben. - plist-Vorlagen kopieren und diffen—nur Label, Pfade, Ports, Umgebung ändern.
openclaw doctorje Profilverzeichnis mit exportierter Zielumgebung ausführen.- Zuerst staging starten; synthetischen Health-Check auf
127.0.0.1:8787mit drei Versuchen à zwei Sekunden Abstand und 200-Antworten. - Danach Produktion bootstrappen und auf 8788 wiederholen.
- plist-SHA-256 im Ticket archivieren, damit Drift-Reviews Hashes statt Augenmaß nutzen.
- Rollback dokumentieren: Produktions-
bootout, plist revert, ggf. nur staging neu bootstrap.
Schlagen Health-Probes fehl, obwohl doctor grün ist, prüfen Sie Bind-Adressen: gemischtes 127.0.0.1 und 0.0.0.0 lässt Checks lügen—die Probe-URL muss exakt zum ProgramArguments-Bind passen.
Leistung, RAM-Budget und sanfte Degradation
Zwei Node-Gateways plus Reverse-Proxy verbrauchen auf einem 16 GB-Mini schnell 6–8 GB residenten Speicher, wenn Tool-Outputs puffern. Setzen Sie harte Limits für gleichzeitige Tool-Aufrufe pro Profil—zum Beispiel höchstens vier parallele Worker in staging und acht in Produktion—und dokumentieren Sie die Zahlen im Capacity-Review. Überschreiten staging-Werte regelmäßig Produktion, ist das Profil zu optimistisch dimensioniert.
CPU-Last ist auf Apple Silicon meist kein Engpass, aber thermische Drosselung nach längeren Builds kann JIT-Verhalten beeinflussen. Planen Sie Nachtjobs so, dass sie nicht mit dem täglichen doctor-Fenster kollidieren; idealerweise 45 Minuten Puffer nach großen npm-Installationen, bevor Health-Checks wieder grün sein müssen.
Wenn ein Profil dennoch OOM erreicht, booten Sie nur dieses Label aus, nicht beide: so bleibt das zweite Gateway als Referenz online, während Sie Heap-Dumps ziehen. Verweisen Sie im Postmortem auf die Exit-Code-Artikelserie, statt generisch „Node crashed“ zu schreiben.
FAQ
Können zwei Gateways ein Konfigverzeichnis teilen?
Nein—Token-Caches, sqlite-Sperren und Skills laufen ins Gehege; immer Bäume trennen.
Nur ein öffentlicher Hostname?
TLS am Proxy terminieren und per SNI oder Pfad auf zwei Loopback-Ports routen; Gateways lokal binden.
Wie Isolation gegenüber Security belegen?
Getrennte Labels, Logs, API-Keys und zeitgestempelte doctor-Ausgaben je Profil vorlegen.
Warum nicht beides in Docker auf Linux?
launchd, Schlüsselbund und Apple-Silicon-Pfade fehlen—viele OpenClaw-Toolchains setzen Desktop-macOS voraus.
Apple-Silicon-Mac-mini-Mieten kombinieren niedrige Leerlaufleistung—oft unter 12 W am Schreibtisch—mit genug Luft für zwei Node-Gateways, Safari-Smokes und log stream. MacHTML-Cloud-Minis bieten SSH und optionales VNC für Pair-Reviews von plist-XML ohne Laptop-Post. Pilot Ende: Instanz stoppen und nur Kalendertage zahlen.
Diese Elastizität passt zu OpenClaw, weil Profile temporär sind: staging soll wöchentlich wechseln, Produktion langweilig bleiben. Mieten hält beides auf einem leisen Schreibtisch, ohne eine zweite Metallbox zu kaufen, die nach dem Feature lange steht.
Doppelprofile auf echtem macOS proben
Mieten Sie einen Cloud-Mac-mini, um plist-Isolation, getrennte Ports und doctor-Läufe vor Produktionsmerges zu verifizieren.