Skip to main content

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

  1. Repo klonen → fly.toml aanpassen
  2. App + volume aanmaken → secrets instellen
  3. Deployen met fly deploy
  4. Via SSH inloggen om config te maken of de Control UI gebruiken

1) De Fly-app maken

Tip: Kies een regio dicht bij jou. Veelgebruikte opties: lhr (Londen), iad (Virginia), sjc (San Jose).

2. fly.toml configureren

Bewerk fly.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.
Belangrijke instellingen:

3. Secrets instellen

Notities:
  • Niet-loopback binds (--bind lan) vereisen OPENCLAW_GATEWAY_TOKEN voor 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

De eerste deploy bouwt het Docker-image (~2–3 minuten). Volgende deploys zijn sneller. Controleer na de deploy:
Je zou moeten zien:

5. Configbestand maken

Log via SSH in op de machine om een juiste config te maken:
Maak de configmap en het bestand aan:
Let op: Met 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
Bij gebruik van de env var hoef je geen token aan de config toe te voegen. De Gateway leest DISCORD_BOT_TOKEN automatisch. Herstarten om toe te passen:

6. Toegang tot de Gateway

Bedieningsinterface

Open in de browser:
Of ga naar 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 aan 127.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 dat internal_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:
Of werk een bestaande machine bij:
Let op: 512MB is te klein. 1GB kan werken maar kan OOM raken onder belasting of bij uitgebreide logging. 2GB wordt aanbevolen.

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:
Het lockbestand staat op /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 commando fly ssh console -C ondersteunt geen shell-redirection. Om een configbestand te schrijven:
Let op: 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 dat OPENCLAW_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:
Let op: Na 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 via https://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

Gebruik fly.private.toml in plaats van de standaardconfig:
Of converteer een bestaande implementatie:
Hierna zou 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)
Optie 2: WireGuard VPN
Optie 3: Alleen SSH

Webhooks met private deployment

Als je webhook-callbacks nodig hebt (Twilio, Telnyx, enz.) zonder publieke blootstelling:
  1. ngrok-tunnel – Draai ngrok in de container of als sidecar
  2. Tailscale Funnel – Stel specifieke paden bloot via Tailscale
  3. Alleen uitgaand – Sommige providers (Twilio) werken prima voor uitgaande oproepen zonder webhooks
Voorbeeld voice-call-config met ngrok:
De ngrok-tunnel draait in de container en levert een publieke webhook-URL zonder de Fly-app zelf bloot te stellen. Stel webhookSecurity.allowedHosts in op de publieke tunnel-hostname zodat doorgestuurde host-headers worden geaccepteerd.

Beveiligingsvoordelen

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
Zie Fly.io-prijzen voor details.