Ziel: OpenClaw Gateway auf einer Fly.io-Maschine mit persistentem Speicher, automatischem HTTPS und Discord-/Channel-Zugriff betreiben.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Was Sie benötigen
- Installierte flyctl CLI
- Fly.io-Konto (kostenlose Stufe funktioniert)
- Modellauthentifizierung: API-Schlüssel für Ihren gewählten Modell-Provider
- Channel-Zugangsdaten: Discord-Bot-Token, Telegram-Token usw.
Schneller Einstieg für Anfänger
- Repository klonen →
fly.tomlanpassen - App + Volume erstellen → Secrets setzen
- Mit
fly deploybereitstellen - Per SSH verbinden, um die Konfiguration zu erstellen, oder die Steuerungs-UI verwenden
Fly-App erstellen
lhr (London), iad (Virginia), sjc (San Jose).fly.toml konfigurieren
Bearbeiten Sie Das OpenClaw-Docker-Image verwendet
fly.toml, damit sie zu Ihrem App-Namen und Ihren Anforderungen passt.Sicherheitshinweis: Die Standardkonfiguration stellt eine öffentliche URL bereit. Für eine gehärtete Bereitstellung ohne öffentliche IP siehe Private Bereitstellung oder verwenden Sie deploy/fly.private.toml.tini als Einstiegspunkt. Fly-Prozessbefehle ersetzen Docker CMD, ohne ENTRYPOINT zu ersetzen; der Prozess läuft daher weiterhin unter tini.Wichtige Einstellungen:| Einstellung | Warum |
|---|---|
--bind lan | Bindet an 0.0.0.0, damit der Proxy von Fly das Gateway erreichen kann |
--allow-unconfigured | Startet ohne Konfigurationsdatei (Sie erstellen sie anschließend) |
internal_port = 3000 | Muss für Fly-Health-Checks zu --port 3000 (oder OPENCLAW_GATEWAY_PORT) passen |
memory = "2048mb" | 512 MB sind zu wenig; 2 GB empfohlen |
OPENCLAW_STATE_DIR = "/data" | Persistiert den Zustand auf dem Volume |
Secrets setzen
- Nicht-loopback-Bindings (
--bind lan) erfordern einen gültigen Gateway-Authentifizierungspfad. Dieses Fly.io-Beispiel verwendetOPENCLAW_GATEWAY_TOKEN, abergateway.auth.passwordoder eine korrekt konfigurierte nicht-loopback-trusted-proxy-Bereitstellung erfüllen die Anforderung ebenfalls. - Behandeln Sie diese Tokens wie Passwörter.
- Verwenden Sie für alle API-Schlüssel und Tokens bevorzugt Umgebungsvariablen statt einer Konfigurationsdatei. So bleiben Secrets aus
openclaw.jsonheraus, wo sie versehentlich offengelegt oder protokolliert werden könnten.
Bereitstellen
Konfigurationsdatei erstellen
Verbinden Sie sich per SSH mit der Maschine, um eine passende Konfiguration zu erstellen:Erstellen Sie das Konfigurationsverzeichnis und die Datei:Hinweis: Mit
OPENCLAW_STATE_DIR=/data ist der Konfigurationspfad /data/openclaw.json.Hinweis: Ersetzen Sie https://my-openclaw.fly.dev durch den tatsächlichen Origin Ihrer Fly-App. Der Gateway-Start initialisiert lokale Origins für die Steuerungs-UI aus den Laufzeitwerten --bind und --port, damit der erste Start erfolgen kann, bevor eine Konfiguration existiert. Für den Browserzugriff über Fly muss der genaue HTTPS-Origin jedoch weiterhin in gateway.controlUi.allowedOrigins aufgeführt sein.Hinweis: Das Discord-Token kann aus einer der folgenden Quellen stammen:- Umgebungsvariable:
DISCORD_BOT_TOKEN(für Secrets empfohlen) - Konfigurationsdatei:
channels.discord.token
DISCORD_BOT_TOKEN automatisch.Zum Anwenden neu starten:Auf das Gateway zugreifen
Steuerungs-UI
Im Browser öffnen:https://my-openclaw.fly.dev/Authentifizieren Sie sich mit dem konfigurierten gemeinsamen Secret. Diese Anleitung verwendet das Gateway-Token aus OPENCLAW_GATEWAY_TOKEN; wenn Sie auf Passwortauthentifizierung umgestellt haben, verwenden Sie stattdessen dieses Passwort.Logs
SSH-Konsole
Fehlerbehebung
„App is not listening on expected address“
Das Gateway bindet an127.0.0.1 statt an 0.0.0.0.
Behebung: Fügen Sie Ihrem Prozessbefehl in fly.toml --bind lan hinzu.
Health-Checks schlagen fehl / Verbindung abgelehnt
Fly kann das Gateway auf dem konfigurierten Port nicht erreichen. Behebung: Stellen Sie sicher, dassinternal_port zum Gateway-Port passt (setzen Sie --port 3000 oder OPENCLAW_GATEWAY_PORT=3000).
OOM / Speicherprobleme
Der Container startet immer wieder neu oder wird beendet. Anzeichen:SIGABRT, v8::internal::Runtime_AllocateInYoungGeneration oder stille Neustarts.
Behebung: Erhöhen Sie den Speicher in fly.toml:
Gateway-Lock-Probleme
Das Gateway verweigert den Start mit „already running“-Fehlern. Das passiert, wenn der Container neu startet, die PID-Lock-Datei aber auf dem Volume bestehen bleibt. Behebung: Löschen Sie die Lock-Datei:/data/gateway.*.lock (nicht in einem Unterverzeichnis).
Konfiguration wird nicht gelesen
--allow-unconfigured umgeht nur die Startprüfung. Es erstellt oder repariert /data/openclaw.json nicht. Stellen Sie daher sicher, dass Ihre echte Konfiguration existiert und gateway.mode="local" enthält, wenn Sie einen normalen lokalen Gateway-Start wünschen.
Prüfen Sie, ob die Konfiguration existiert:
Konfiguration über SSH schreiben
Der Befehlfly ssh console -C unterstützt keine Shell-Umleitung. Um eine Konfigurationsdatei zu schreiben:
fly sftp kann fehlschlagen, wenn die Datei bereits existiert. Löschen Sie sie zuerst:
Zustand wird nicht persistiert
Wenn Sie nach einem Neustart Authentifizierungsprofile, Channel-/Provider-Zustand oder Sitzungen verlieren, schreibt das Zustandsverzeichnis in das Container-Dateisystem. Behebung: Stellen Sie sicher, dassOPENCLAW_STATE_DIR=/data in fly.toml gesetzt ist, und stellen Sie erneut bereit.
Aktualisierungen
Maschinenbefehl aktualisieren
Wenn Sie den Startbefehl ohne vollständige erneute Bereitstellung ändern müssen:fly deploy kann der Maschinenbefehl auf den Inhalt von fly.toml zurückgesetzt werden. Wenn Sie manuelle Änderungen vorgenommen haben, wenden Sie sie nach der Bereitstellung erneut an.
Private Bereitstellung (gehärtet)
Standardmäßig weist Fly öffentliche IPs zu, wodurch Ihr Gateway unterhttps://your-app.fly.dev erreichbar ist. Das ist praktisch, bedeutet aber, dass Ihre Bereitstellung von Internet-Scannern (Shodan, Censys usw.) gefunden werden kann.
Für eine gehärtete Bereitstellung mit keiner öffentlichen Exposition verwenden Sie die private Vorlage.
Wann Sie eine private Bereitstellung verwenden sollten
- Sie führen nur ausgehende Aufrufe/Nachrichten aus (keine eingehenden Webhooks)
- Sie verwenden ngrok- oder Tailscale-Tunnel für Webhook-Callbacks
- Sie greifen statt über den Browser per SSH, Proxy oder WireGuard auf das Gateway zu
- Sie möchten, dass die Bereitstellung vor Internet-Scannern verborgen ist
Einrichtung
Verwenden Siedeploy/fly.private.toml statt der Standardkonfiguration:
fly ips list nur noch eine IP vom Typ private anzeigen:
Zugriff auf eine private Bereitstellung
Da es keine öffentliche URL gibt, verwenden Sie eine dieser Methoden: Option 1: Lokaler Proxy (am einfachsten)Webhooks bei privatem Deployment
Wenn Sie Webhook-Callbacks (Twilio, Telnyx usw.) ohne öffentliche Exponierung benötigen:- ngrok-Tunnel - Führen Sie ngrok im Container oder als Sidecar aus
- Tailscale Funnel - Machen Sie bestimmte Pfade über Tailscale zugänglich
- Nur ausgehend - Einige Provider (Twilio) funktionieren für ausgehende Anrufe auch ohne Webhooks problemlos
webhookSecurity.allowedHosts auf den öffentlichen Tunnel-Hostnamen, damit weitergeleitete Host-Header akzeptiert werden.
Sicherheitsvorteile
| Aspekt | Öffentlich | Privat |
|---|---|---|
| Internet-Scanner | Auffindbar | Versteckt |
| Direkte Angriffe | Möglich | Blockiert |
| Zugriff auf Steuerungs-UI | Browser | Proxy/VPN |
| Webhook-Zustellung | Direkt | Über Tunnel |
Hinweise
- Fly.io verwendet x86-Architektur (nicht ARM)
- Das Dockerfile ist mit beiden Architekturen kompatibel
- Verwenden Sie für das WhatsApp/Telegram-Onboarding
fly ssh console - Persistente Daten liegen auf dem Volume unter
/data - Signal erfordert Java + signal-cli; verwenden Sie ein eigenes Image und halten Sie den Arbeitsspeicher bei 2 GB+.
Kosten
Mit der empfohlenen Konfiguration (shared-cpu-2x, 2 GB RAM):
- ca. 10-15 USD/Monat, abhängig von der Nutzung
- Der kostenlose Tarif enthält ein gewisses Kontingent
Nächste Schritte
- Richten Sie Messaging-Kanäle ein: Kanäle
- Konfigurieren Sie den Gateway: Gateway-Konfiguration
- Halten Sie OpenClaw aktuell: Aktualisierung