Skip to main content

Fly.io-distribution

Mål: OpenClaw Gateway körs på en Fly.io-maskin med beständig lagring, automatisk HTTPS och Discord/kanalåtkomst.

Vad du behöver

  • flyctl CLI installerad
  • Fly.io-konto (gratisnivån fungerar)
  • Modellautentisering: Anthropic API-nyckel (eller andra leverantörsnycklar)
  • Kanaluppgifter: Discord-bot-token, Telegram-token, osv.

Snabb väg för nybörjare

  1. Klona repot → anpassa fly.toml
  2. Skapa app + volym → sätt hemligheter
  3. Distribuera med fly deploy
  4. SSH:a in för att skapa konfig eller använd Control UI

1) Skapa Fly-appen

Tips: Välj en region nära dig. Vanliga alternativ: lhr (London), iad (Virginia), sjc (San Jose).

2. Konfigurera fly.toml

Redigera fly.toml så att den matchar ditt appnamn och dina krav. Säkerhetsanteckning: Standardkonfigurationen exponerar en publik URL. För en härdad distribution utan offentlig IP-adress, se Privat distribution eller använd fly.private.toml.
Viktiga inställningar:

3. Sätt hemligheter

Noteringar:
  • Icke-loopback-bindningar (--bind lan) kräver OPENCLAW_GATEWAY_TOKEN av säkerhetsskäl.
  • Behandla dessa token som lösenord.
  • Föredrar env vars över konfigurationsfil för alla API-nycklar och tokens. Detta håller hemligheter från openclaw.json där de kan av misstag exponeras eller loggas.

4. Distribuera

Först distribuera bygger Docker-bilden (~2-3 minuter). Efterföljande distributioner är snabbare. Efter distribution, verifiera:
Du bör se:

5. Skapa konfigfil

SSH:a in i maskinen för att skapa en korrekt konfig:
Skapa konfigkatalogen och filen:
Obs: Med OPENCLAW_STATE_DIR=/data är konfigsökvägen /data/openclaw.json. Obs: Discord-token kan komma från antingen:
  • Miljövariabel: DISCORD_BOT_TOKEN (rekommenderas för hemligheter)
  • Konfigfil: channels.discord.token
Om du använder env var, behöver du inte lägga till token för att konfigurera. Gateway läser DISCORD_BOT_TOKEN automatiskt. Starta om för att tillämpa:

6. Åtkomst till Gateway

Kontrollgränssnitt

Öppna i webbläsare:
Eller besök https://my-openclaw.fly.dev/ Klistra in din gateway-token (den från OPENCLAW_GATEWAY_TOKEN) för att autentisera.

Loggar

SSH-konsol

Felsökning

”App is not listening on expected address”

Gatewayen binder till 127.0.0.1 istället för 0.0.0.0. Åtgärd: Lägg till --bind lan i ditt processkommando i fly.toml.

Hälsokontroller misslyckas / anslutning nekas

Fly kan inte nå gatewayen på den konfigurerade porten. Åtgärd: Säkerställ att internal_port matchar gateway-porten (sätt --port 3000 eller OPENCLAW_GATEWAY_PORT=3000).

OOM / Minnesproblem

Behållare fortsätter att starta om eller bli dödad. Skyltar: SIGABRT, v8::internal::Runtime_AllocateInYoungGeneration, eller tyst omstart. Åtgärd: Öka minnet i fly.toml:
Eller uppdatera en befintlig maskin:
Obs: 512MB är för litet. 1GB kan fungera men kan OOM under belastning eller med verbose loggning. 2GB rekommenderas.

Gateway-låsproblem

Gatewayen vägrar starta med ”already running”-fel. Detta händer när containern startar om men PID-låsfilen finns kvar på volymen. Åtgärd: Ta bort låsfilen:
Låsfilen finns på /data/gateway.*.lock (inte i en underkatalog).

Konfig läses inte

Om du använder --allow-unconfigured, skapar gateway en minimal konfiguration. Din anpassade konfiguration på /data/openclaw.json ska läsas vid omstart. Verifiera att konfigen finns:

Skriva konfig via SSH

Kommandot fly ssh console -C stöder inte skalomdirigering. För att skriva en konfigurationsfil:
Obs: ‘fly sftp’ kan misslyckas om filen redan finns. Ta bort först:

Tillstånd sparas inte

Om du tappar uppgifter eller sessioner efter en omstart skrivs tillståndskatalogen till containerns filsystem. Åtgärd: Säkerställ att OPENCLAW_STATE_DIR=/data är satt i fly.toml och distribuera om.

Uppdateringar

Uppdatera maskinkommando

Om du behöver ändra startkommandot utan full omdistribution:
Obs: Efter fly deploy, kan maskinkommandot återställas till vad som finns i fly.toml. Om du gjort manuella ändringar, åter tillämpa dem efter distribution.

Privat distribution (Härdad)

Som standard, Fly allokerar offentliga IP-adresser, vilket gör din gateway tillgänglig på https://your-app.fly.dev. Detta är bekvämt men innebär att din distribution är upptäckbar av internet-skannrar (Shodan, Censys, etc.). För en härdad distribution med ingen offentlig exponering, använd den privata mallen.

När ska privat distribution användas

  • Du gör endast utgående anrop/meddelanden (inga inkommande webhooks)
  • Du använder ngrok eller Tailscale-tunnlar för webhook-callbacks
  • Du når gatewayen via SSH, proxy eller WireGuard istället för webbläsare
  • Du vill att distributionen ska vara dold för internetscanners

Konfigurering

Använd fly.private.toml istället för standardkonfigen:
Eller konvertera en befintlig distribution:
Efter detta ska fly ips list endast visa en private-typ av IP:

Åtkomst till privat distribution

Eftersom det inte finns någon offentlig URL, använd en av dessa metoder: Alternativ 1: Lokal proxy (enklast)
Alternativ 2: WireGuard VPN
Alternativ 3: Endast SSH

Webhooks med privat distribution

Om du behöver webhook callbacks (Twilio, Telnyx, etc.) utan offentlig exponering:
  1. ngrok-tunnel – Kör ngrok i containern eller som sidecar
  2. Tailscale Funnel – Exponera specifika sökvägar via Tailscale
  3. Endast utgående – Vissa leverantörer (Twilio) fungerar bra för utgående samtal utan webhooks
Exempel på röstkonfig med ngrok:
Den ngrok tunneln körs inne i behållaren och ger en publik webhook URL utan att exponera Fly appen själv. Ange webhookSecurity.allowedHosts till det publika tunnelns värdnamn så vidarekopplade värdhuvuden accepteras.

Säkerhetsfördelar

Noteringar

  • Fly.io använder x86-arkitektur (inte ARM)
  • Dockerfile är kompatibel med båda arkitekturerna
  • För WhatsApp/Telegram-introduktion, använd fly ssh console
  • Beständig data finns på volymen vid /data
  • Signal kräver Java + signal-cli; använd en anpassad image och håll minnet på 2GB+.

Kostnad

Med den rekommenderade konfigen (shared-cpu-2x, 2GB RAM):
  • ~10–15 USD/månad beroende på användning
  • Gratisnivån inkluderar viss tilldelning
Se Fly.io-prissättning för detaljer.