Fly.io-Bereitstellung
Ziel: OpenClaw Gateway auf einer Fly.io-Maschine mit persistentem Speicher, automatischem HTTPS und Discord-/Kanal-Zugriff.Was Sie benötigen
- Installierte flyctl CLI
- Fly.io-Konto (Free-Tier reicht aus)
- Modell-Authentifizierung: Anthropic-API-Schlüssel (oder andere Anbieter-Schlüssel)
- Kanal-Zugangsdaten: Discord-Bot-Token, Telegram-Token usw.
Schneller Einstieg für Anfänger
- Repository klonen →
fly.tomlanpassen - App + Volume erstellen → Secrets setzen
- Mit
fly deploydeployen - Per SSH anmelden, um Konfiguration zu erstellen, oder Control UI verwenden
1) Fly-App erstellen
lhr (London), iad (Virginia), sjc (San Jose).
2. fly.toml konfigurieren
Bearbeiten Siefly.toml, damit es 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 Deployment oder verwenden Sie fly.private.toml.
| Einstellung | Warum |
|---|---|
--bind lan | Bindet an 0.0.0.0, damit der Fly-Proxy das Gateway erreichen kann |
--allow-unconfigured | Startet ohne Konfigurationsdatei (Sie erstellen diese später) |
internal_port = 3000 | Muss mit --port 3000 (oder OPENCLAW_GATEWAY_PORT) für Fly-Health-Checks übereinstimmen |
memory = "2048mb" | 512 MB sind zu wenig; 2 GB empfohlen |
OPENCLAW_STATE_DIR = "/data" | Persistiert den Zustand auf dem Volume |
3. Secrets setzen
- Nicht-Loopback-Bindings (
--bind lan) erfordern aus SicherheitsgründenOPENCLAW_GATEWAY_TOKEN. - Behandeln Sie diese Tokens wie Passwörter.
- Bevorzugen Sie Umgebungsvariablen gegenüber der Konfigurationsdatei für alle API-Schlüssel und Tokens. So bleiben Secrets aus
openclaw.jsonheraus, wo sie versehentlich offengelegt oder geloggt werden könnten.
4. Deploy
5. Konfigurationsdatei erstellen
Melden Sie sich per SSH an der Maschine an, um eine vollständige Konfiguration zu erstellen:OPENCLAW_STATE_DIR=/data ist der Konfigurationspfad /data/openclaw.json.
Hinweis: Das Discord-Token kann aus einer der folgenden Quellen stammen:
- Umgebungsvariable:
DISCORD_BOT_TOKEN(empfohlen für Secrets) - Konfigurationsdatei:
channels.discord.token
DISCORD_BOT_TOKEN automatisch.
Zum Anwenden neu starten:
6. Zugriff auf das Gateway
Bedienoberfläche
Im Browser öffnen:https://my-openclaw.fly.dev/
Fügen Sie Ihr Gateway-Token (das aus OPENCLAW_GATEWAY_TOKEN) zur Authentifizierung ein.
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 --bind lan zum Prozessbefehl in fly.toml hinzu.
Health-Checks schlagen fehl / Verbindung abgelehnt
Fly kann das Gateway auf dem konfigurierten Port nicht erreichen. Behebung: Stellen Sie sicher, dassinternal_port mit dem Gateway-Port übereinstimmt (setzen Sie --port 3000 oder OPENCLAW_GATEWAY_PORT=3000).
OOM- / Speicherprobleme
Der Container startet ständig 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 startet nicht und meldet „already running“-Fehler. Dies passiert, wenn der Container neu startet, aber die PID-Lockdatei auf dem Volume bestehen bleibt. Behebung: Löschen Sie die Lockdatei:/data/gateway.*.lock (nicht in einem Unterverzeichnis).
Konfiguration wird nicht gelesen
Bei Verwendung von--allow-unconfigured erstellt das Gateway eine minimale Konfiguration. Ihre benutzerdefinierte Konfiguration unter /data/openclaw.json sollte nach einem Neustart gelesen werden.
Prüfen Sie, ob die Konfiguration existiert:
Konfiguration per 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 nach einem Neustart Zugangsdaten oder Sitzungen verloren gehen, schreibt das Zustandsverzeichnis in das Container-Dateisystem. Behebung: Stellen Sie sicher, dassOPENCLAW_STATE_DIR=/data in fly.toml gesetzt ist, und deployen Sie erneut.
Aktualisierungen
Maschinenbefehl aktualisieren
Wenn Sie den Startbefehl ändern müssen, ohne einen vollständigen Redeploy durchzuführen:fly deploy kann der Maschinenbefehl auf den Wert in fly.toml zurückgesetzt werden. Wenn Sie manuelle Änderungen vorgenommen haben, wenden Sie diese nach dem Deploy 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 bequem, bedeutet aber, dass Ihre Bereitstellung für Internet-Scanner (Shodan, Censys usw.) auffindbar ist.
Für eine gehärtete Bereitstellung ohne öffentliche Exponierung verwenden Sie das private Template.
Wann eine private Bereitstellung sinnvoll ist
- Sie tätigen nur ausgehende Aufrufe/Nachrichten (keine eingehenden Webhooks)
- Sie nutzen ngrok- oder Tailscale-Tunnel für Webhook-Callbacks
- Sie greifen über SSH, Proxy oder WireGuard statt über den Browser auf das Gateway zu
- Sie möchten die Bereitstellung vor Internet-Scannern verbergen
Einrichtung
Verwenden Siefly.private.toml statt der Standardkonfiguration:
fly ips list nur eine IP vom Typ private anzeigen:
Zugriff auf eine private Bereitstellung
Da es keine öffentliche URL gibt, verwenden Sie eine der folgenden Methoden: Option 1: Lokaler Proxy (am einfachsten)Webhooks mit privater Bereitstellung
Wenn Sie Webhook-Callbacks (Twilio, Telnyx usw.) ohne öffentliche Exponierung benötigen:- ngrok-Tunnel – ngrok innerhalb des Containers oder als Sidecar ausführen
- Tailscale Funnel – Bestimmte Pfade über Tailscale freigeben
- Nur ausgehend – Einige Anbieter (Twilio) funktionieren für ausgehende Anrufe auch ohne Webhooks
webhookSecurity.allowedHosts auf den öffentlichen Tunnel-Hostname, damit weitergeleitete Host-Header akzeptiert werden.
Sicherheitsvorteile
| Aspekt | Öffentlich | Privat |
|---|---|---|
| Internet-Scanner | Auffindbar | Versteckt |
| Direkte Angriffe | Möglich | Blockiert |
| Control-UI-Zugriff | Browser | Proxy/VPN |
| Webhook-Zustellung | Direkt | Über Tunnel |
Hinweise
- Fly.io verwendet eine x86-Architektur (nicht ARM)
- Das Dockerfile ist mit beiden Architekturen kompatibel
- Für WhatsApp-/Telegram-Onboarding verwenden Sie
fly ssh console - Persistente Daten liegen auf dem Volume unter
/data - Signal erfordert Java + signal-cli; verwenden Sie ein benutzerdefiniertes Image und halten Sie den Speicher bei 2 GB+.
Kosten
Mit der empfohlenen Konfiguration (shared-cpu-2x, 2 GB RAM):
- ~10–15 USD/Monat je nach Nutzung
- Das Free-Tier enthält ein gewisses Kontingent