Fly.io-implementatie
Doel: OpenClaw Gateway draaiend op een Fly.io-machine met persistente opslag, automatische HTTPS en Discord-/kanaaltoegang.Wat je nodig hebt
- flyctl CLI geïnstalleerd
- Fly.io-account (gratis tier werkt)
- Modelauthenticatie: Anthropic API-sleutel (of andere provider-sleutels)
- Kanaalreferenties: Discord-bot-token, Telegram-token, enz.
Snelle route voor beginners
- Repo klonen →
fly.tomlaanpassen - App + volume aanmaken → secrets instellen
- Deployen met
fly deploy - Via SSH inloggen om config te maken of de Control UI gebruiken
1) De Fly-app maken
lhr (Londen), iad (Virginia), sjc (San Jose).
2. fly.toml configureren
Bewerkfly.toml zodat deze overeenkomt met je app-naam en vereisten.
Beveiligingsnotitie: De standaardconfig stelt een publieke URL bloot. Voor een geharde implementatie zonder openbaar IP, zie Private Deployment of gebruik fly.private.toml.
| Instelling | Waarom |
|---|---|
--bind lan | Bindt aan 0.0.0.0 zodat de proxy van Fly de Gateway kan bereiken |
--allow-unconfigured | Start zonder configbestand (je maakt er later een) |
internal_port = 3000 | Moet overeenkomen met --port 3000 (of OPENCLAW_GATEWAY_PORT) voor Fly-healthchecks |
memory = "2048mb" | 512MB is te klein; 2GB aanbevolen |
OPENCLAW_STATE_DIR = "/data" | Houdt status persistent op het volume |
3. Secrets instellen
- Niet-loopback binds (
--bind lan) vereisenOPENCLAW_GATEWAY_TOKENvoor beveiliging. - Behandel deze tokens als wachtwoorden.
- Geef de voorkeur aan omgevingsvariabelen boven het configbestand voor alle API-sleutels en tokens. Zo blijven secrets uit
openclaw.json, waar ze per ongeluk blootgesteld of gelogd kunnen worden.
4. Deployen
5. Configbestand maken
Log via SSH in op de machine om een juiste config te maken:OPENCLAW_STATE_DIR=/data is het configpad /data/openclaw.json.
Let op: Het Discord-token kan uit één van de volgende bronnen komen:
- Omgevingsvariabele:
DISCORD_BOT_TOKEN(aanbevolen voor secrets) - Configbestand:
channels.discord.token
DISCORD_BOT_TOKEN automatisch.
Herstarten om toe te passen:
6. Toegang tot de Gateway
Bedieningsinterface
Open in de browser:https://my-openclaw.fly.dev/
Plak je gateway-token (die uit OPENCLAW_GATEWAY_TOKEN) om te authenticeren.
Logboeken
SSH-console
Problemen oplossen
”App luistert niet op het verwachte adres”
De Gateway bindt aan127.0.0.1 in plaats van 0.0.0.0.
Oplossing: Voeg --bind lan toe aan je process-commando in fly.toml.
Healthchecks falen / verbinding geweigerd
Fly kan de Gateway niet bereiken op de geconfigureerde poort. Oplossing: Zorg datinternal_port overeenkomt met de Gateway-poort (stel --port 3000 of OPENCLAW_GATEWAY_PORT=3000 in).
OOM / geheugenproblemen
De container blijft herstarten of wordt beëindigd. Signalen:SIGABRT, v8::internal::Runtime_AllocateInYoungGeneration, of stille herstarts.
Oplossing: Verhoog het geheugen in fly.toml:
Gateway-lockproblemen
De Gateway weigert te starten met fouten als “already running”. Dit gebeurt wanneer de container herstart maar het PID-lockbestand op het volume blijft bestaan. Oplossing: Verwijder het lockbestand:/data/gateway.*.lock (niet in een submap).
Config wordt niet gelezen
Bij gebruik van--allow-unconfigured maakt de Gateway een minimale config aan. Je aangepaste config op /data/openclaw.json zou bij herstart gelezen moeten worden.
Controleer of de config bestaat:
Config schrijven via SSH
Het commandofly ssh console -C ondersteunt geen shell-redirection. Om een configbestand te schrijven:
fly sftp kan falen als het bestand al bestaat. Verwijder het eerst:
Staat niet Persisterend
Als je na een herstart referenties of sessies verliest, schrijft de statusmap naar het containerbestandssysteem. Oplossing: Zorg datOPENCLAW_STATE_DIR=/data is ingesteld in fly.toml en deploy opnieuw.
Updates
Machine-commando bijwerken
Als je het opstartcommando wilt wijzigen zonder een volledige redeploy:fly deploy kan het machine-commando worden teruggezet naar wat in fly.toml staat. Als je handmatige wijzigingen hebt gemaakt, pas ze na de deploy opnieuw toe.
Private Deployment (gehard)
Standaard wijst Fly publieke IP’s toe, waardoor je Gateway toegankelijk is viahttps://your-app.fly.dev. Dit is handig, maar betekent dat je implementatie vindbaar is voor internetscanners (Shodan, Censys, enz.).
Voor een geharde implementatie met geen publieke blootstelling, gebruik het private template.
Wanneer private deployment gebruiken
- Je doet alleen uitgaande oproepen/berichten (geen inkomende webhooks)
- Je gebruikt ngrok- of Tailscale-tunnels voor webhook-callbacks
- Je benadert de Gateway via SSH, proxy of WireGuard in plaats van de browser
- Je wilt de implementatie verborgen houden voor internetscanners
Installatie
Gebruikfly.private.toml in plaats van de standaardconfig:
fly ips list alleen een IP van het type private moeten tonen:
Toegang tot een private deployment
Omdat er geen publieke URL is, gebruik één van deze methoden: Optie 1: Lokale proxy (simpelst)Webhooks met private deployment
Als je webhook-callbacks nodig hebt (Twilio, Telnyx, enz.) zonder publieke blootstelling:- ngrok-tunnel – Draai ngrok in de container of als sidecar
- Tailscale Funnel – Stel specifieke paden bloot via Tailscale
- Alleen uitgaand – Sommige providers (Twilio) werken prima voor uitgaande oproepen zonder webhooks
webhookSecurity.allowedHosts in op de publieke tunnel-hostname zodat doorgestuurde host-headers worden geaccepteerd.
Beveiligingsvoordelen
| Aspect | Publiek | Privé |
|---|---|---|
| Internetscanners | Vindbaar | Hidden |
| Directe aanvallen | Mogelijk | Geblokkeerd |
| Control UI-toegang | Browser | Proxy/VPN |
| Webhook-bezorging | Direct | Via tunnel |
Notities
- Fly.io gebruikt x86-architectuur (geen ARM)
- Het Dockerfile is compatibel met beide architecturen
- Voor WhatsApp-/Telegram-onboarding, gebruik
fly ssh console - Persistente data staat op het volume op
/data - Signal vereist Java + signal-cli; gebruik een custom image en houd het geheugen op 2GB+.
Kosten
Met de aanbevolen config (shared-cpu-2x, 2GB RAM):
- ~$10–15/maand afhankelijk van gebruik
- De gratis tier bevat enige tegoeden