Voraussetzungen
- flyctl CLI installiert
- Fly.io-Konto (kostenloser Tarif ist ausreichend)
- Modellauthentifizierung: API-Schlüssel für Ihren gewählten Modell-Provider
- Kanal-Anmeldedaten: Discord-Bot-Token, Telegram-Token usw.
Schnelleinstieg für Anfänger
- Repository klonen,
fly.tomlanpassen - App und Volume erstellen, Secrets festlegen
- Mit
fly deploybereitstellen - Per SSH anmelden, um die Konfiguration zu erstellen, oder die Control UI verwenden
1
Fly-App erstellen
lhr (London), iad (Virginia), sjc (San Jose).2
fly.toml konfigurieren
Bearbeiten Sie Der Einstiegspunkt des OpenClaw-Docker-Images ist
fly.toml entsprechend Ihrem App-Namen und Ihren Anforderungen. Die im Repository verwaltete Datei fly.toml ist die unten gezeigte öffentliche Vorlage; deploy/fly.private.toml ist die gehärtete Variante ohne öffentliche IP-Adresse (siehe Private Bereitstellung).tini und führt standardmäßig node openclaw.mjs gateway aus. Fly [processes] ersetzt Docker CMD (hier wird direkt node dist/index.js gateway ..., derselbe kompilierte Einstiegspunkt, ausgeführt), ohne ENTRYPOINT zu verändern, sodass der Prozess weiterhin unter tini ausgeführt wird.Wichtige Einstellungen:3
Secrets festlegen
--bind lan) erfordern einen gültigen Gateway-Authentifizierungspfad. Dieses Beispiel verwendet OPENCLAW_GATEWAY_TOKEN, aber gateway.auth.password oder eine korrekt konfigurierte Trusted-Proxy-Bereitstellung außerhalb von Loopback erfüllen die Anforderung ebenfalls. Informationen zum SecretRef-Vertrag finden Sie unter Secret-Verwaltung.Behandeln Sie diese Token wie Passwörter. Verwenden Sie für API-Schlüssel und Token vorzugsweise Umgebungsvariablen/fly secrets statt der Konfigurationsdatei, damit Secrets nicht in openclaw.json gespeichert werden.4
Bereitstellen
gateway ready, sobald der HTTP-/WebSocket-Listener aktiv ist. Flys eigene Systemdiagnose überwacht gemäß fly.toml den Endpunkt internal_port = 3000; die Docker-Anweisung HEALTHCHECK des Images fragt zusätzlich /healthz auf dem Standardport 18789 ab, der hier nicht verwendet wird, da diese Bereitstellung für das Gateway stattdessen --port 3000 festlegt.5
Konfigurationsdatei erstellen
Melden Sie sich per SSH bei der Maschine an, um eine ordnungsgemäße Konfiguration zu erstellen:Mit
OPENCLAW_STATE_DIR=/data lautet der Konfigurationspfad /data/openclaw.json.Ersetzen Sie https://my-openclaw.fly.dev durch den tatsächlichen Ursprung Ihrer Fly-App. Beim Start übernimmt das Gateway lokale Ursprünge für die Control UI aus den Laufzeitwerten --bind und --port, sodass der erste Start erfolgen kann, bevor eine Konfiguration vorhanden ist. Für den Browserzugriff über Fly muss der genaue HTTPS-Ursprung dennoch in gateway.controlUi.allowedOrigins aufgeführt sein.Das Discord-Token kann aus einer der folgenden Quellen stammen:- Umgebungsvariable
DISCORD_BOT_TOKEN(für Secrets empfohlen); sie muss nicht zur Konfiguration hinzugefügt werden, da das Gateway sie automatisch liest - Konfigurationsdatei
channels.discord.token
6
Fehlerbehebung
„App lauscht nicht an der erwarteten Adresse“
Das Gateway bindet an127.0.0.1 statt an 0.0.0.0.
Lösung: Fügen Sie dem Prozessbefehl in fly.toml die Option --bind lan hinzu.
Fehlgeschlagene Systemdiagnosen / Verbindung abgelehnt
Fly kann das Gateway am konfigurierten Port nicht erreichen. Lösung: Stellen Sie sicher, dassinternal_port mit dem Gateway-Port (--port 3000 oder OPENCLAW_GATEWAY_PORT=3000) übereinstimmt.
OOM-/Speicherprobleme
Der Container wird ständig neu gestartet oder beendet. Anzeichen:SIGABRT, v8::internal::Runtime_AllocateInYoungGeneration oder Neustarts ohne Fehlermeldung.
Lösung: Erhöhen Sie den Speicher in fly.toml:
Probleme mit der Gateway-Sperre
Nach einem Container-Neustart verweigert das Gateway den Start mit Fehlern, die besagen, dass es „bereits ausgeführt wird“. Die Laufzeitsperrdateien befinden sich unter<tmpdir>/openclaw-<uid>/gateway.<hash>.lock
und gateway.state.<hash>.lock (Linux:
/tmp/openclaw-<uid>/gateway.*.lock), nicht auf dem persistenten Volume /data. Daher werden
sie bei einem vollständigen Container-Neustart normalerweise zusammen mit dem übrigen
Container-Dateisystem entfernt. Falls eine Sperre bestehen bleibt (beispielsweise bei einem fly machine restart,
der das Container-Dateisystem beibehält) und den Start blockiert, entfernen Sie sie
manuell:
Konfiguration wird nicht gelesen
--allow-unconfigured umgeht lediglich die Startsperre. Es erstellt oder repariert /data/openclaw.json nicht. Stellen Sie daher sicher, dass Ihre tatsächliche Konfiguration vorhanden ist und für einen normalen lokalen Gateway-Start "gateway": { "mode": "local" } enthält.
Überprüfen Sie, ob die Konfiguration vorhanden ist:
Konfiguration per SSH schreiben
fly ssh console -C unterstützt keine Shell-Umleitung. So schreiben Sie eine Konfigurationsdatei:
fly sftp kann fehlschlagen, wenn die Datei bereits vorhanden ist; löschen Sie sie zuerst:
Zustand bleibt nicht erhalten
Wenn Authentifizierungsprofile, Kanal-/Provider-Zustand oder Sitzungen nach einem Neustart verloren gehen, wird das Zustandsverzeichnis in das Container-Dateisystem statt auf das Volume geschrieben. Lösung: Stellen Sie sicher, dassOPENCLAW_STATE_DIR=/data in fly.toml festgelegt ist, und stellen Sie erneut bereit.
Aktualisieren
git pull + fly deploy ist hier der überwachte Pfad: Dadurch wird das Image aus dem Dockerfile neu erstellt, sodass die CLI-/Gateway-Version, das Basis-Betriebssystem-Image und alle Änderungen am Dockerfile gemeinsam aktualisiert werden. openclaw update innerhalb des laufenden Containers ist nicht derselbe Vorgang, da das Image als von Docker erstellter dist/-Baum ohne .git-Checkout und ohne eine von npm verwaltete globale Installation ausgeliefert wird, die dieser Vorgang erkennen könnte. Informationen zu diesem Ablauf bei VM-ähnlichen Installationen finden Sie unter Aktualisieren.
Maschinenbefehl aktualisieren
So ändern Sie den Startbefehl ohne vollständige erneute Bereitstellung:fly deploy setzt den Maschinenbefehl auf den Inhalt von fly.toml zurück. Wenden Sie manuelle Änderungen nach einer erneuten Bereitstellung erneut an.
Private Bereitstellung (gehärtet)
Standardmäßig weist Fly öffentliche IP-Adressen zu. Dadurch ist Ihr Gateway unterhttps://your-app.fly.dev erreichbar und kann von Internet-Scannern wie Shodan, Censys usw. gefunden werden.
Verwenden Sie deploy/fly.private.toml für eine gehärtete Bereitstellung ohne öffentliche IP-Adresse: Da [http_service] ausgelassen wird, wird kein öffentlicher Eingang zugewiesen.
Wann eine private Bereitstellung verwendet werden sollte
- Nur ausgehende Aufrufe/Nachrichten (keine eingehenden Webhooks)
- ngrok- oder Tailscale-Tunnel verarbeiten alle Webhook-Rückrufe
- Der Zugriff auf das Gateway erfolgt über SSH, Proxy oder WireGuard statt über einen Browser
- Die Bereitstellung soll vor Internet-Scannern verborgen bleiben
Einrichtung
fly ips list nur eine IP vom Typ private anzeigen:
Zugriff auf eine private Bereitstellung
Option 1: Lokaler Proxy (am einfachsten)Webhooks bei einer privaten Bereitstellung
Für Webhook-Rückrufe (Twilio, Telnyx usw.) ohne öffentliche Erreichbarkeit:- ngrok-Tunnel: ngrok im Container oder als Sidecar ausführen
- Tailscale Funnel: bestimmte Pfade über Tailscale öffentlich bereitstellen
- Nur ausgehend: Einige Provider (Twilio) unterstützen ausgehende Anrufe ohne Webhooks
plugins.entries.voice-call.config:
webhookSecurity.allowedHosts auf den Hostnamen des Tunnels, damit weitergeleitete Host-Header akzeptiert werden.
Sicherheitsabwägungen
Hinweise
- Fly.io verwendet die x86-Architektur; das Dockerfile ist sowohl mit x86 als auch mit ARM kompatibel.
- Verwenden Sie für das Onboarding von WhatsApp/Telegram
fly ssh console. - Persistente Daten befinden sich auf dem Volume unter
/data. - Signal benötigt signal-cli (eine Java-basierte CLI) im Image; verwenden Sie ein benutzerdefiniertes Image und mindestens 2 GB Arbeitsspeicher.
Kosten
Mit der empfohlenen Konfiguration (shared-cpu-2x, 2 GB RAM) können Sie je nach Nutzung mit ungefähr 10–15 $ pro Monat rechnen; der kostenlose Tarif deckt ein gewisses Grundkontingent ab. Die aktuellen Preise finden Sie unter Fly.io-Preise.
Nächste Schritte
- Messaging-Kanäle einrichten: Kanäle
- Gateway konfigurieren: Gateway-Konfiguration
- OpenClaw auf dem neuesten Stand halten: Aktualisierung