Deploy no Fly.io
Objetivo: Gateway OpenClaw rodando em uma maquina Fly.io com armazenamento persistente, HTTPS automatico e acesso a canais Discord/mensagens.
O que voce precisa
- CLI flyctl instalado
- Conta Fly.io (tier gratuito funciona)
- Auth de modelo: chave API para seu provedor de modelos
- Credenciais de canal: token de bot Discord, token Telegram, etc.
Caminho rapido para iniciantes
- Clonar repo → personalizar
fly.toml - Criar app + volume → definir secrets
- Deploy com
fly deploy - SSH para criar config ou usar a Interface de Controle
1) Criar o app Fly
git clone https://github.com/openclaw/openclaw.git
cd openclaw
fly apps create my-openclaw
fly volumes create openclaw_data --size 1 --region iad
Dica: Escolha uma regiao proxima. Opcoes comuns: lhr (Londres), iad (Virginia), sjc (San Jose).
2) Configurar fly.toml
Edite fly.toml para corresponder ao nome do seu app e requisitos.
Nota de seguranca: A config padrao expoe uma URL publica. Para um deploy hardened sem IP publico, veja Deploy Privado ou use fly.private.toml.
app = "my-openclaw"
primary_region = "iad"
[build]
dockerfile = "Dockerfile"
[env]
NODE_ENV = "production"
OPENCLAW_PREFER_PNPM = "1"
OPENCLAW_STATE_DIR = "/data"
NODE_OPTIONS = "--max-old-space-size=1536"
[processes]
app = "node dist/index.js gateway --allow-unconfigured --port 3000 --bind lan"
[http_service]
internal_port = 3000
force_https = true
auto_stop_machines = false
auto_start_machines = true
min_machines_running = 1
processes = ["app"]
[[vm]]
size = "shared-cpu-2x"
memory = "2048mb"
[mounts]
source = "openclaw_data"
destination = "/data"
Configuracoes-chave:
| Configuracao | Motivo |
|---|---|
--bind lan | Escuta em 0.0.0.0 para que o proxy do Fly alcance o gateway |
--allow-unconfigured | Inicia sem arquivo de config (voce cria depois) |
internal_port = 3000 | Deve corresponder a --port 3000 (ou OPENCLAW_GATEWAY_PORT) para health checks |
memory = "2048mb" | 512MB e muito pouco; 2GB recomendados |
OPENCLAW_STATE_DIR = "/data" | Persiste estado no volume |
3) Definir secrets
fly secrets set OPENCLAW_GATEWAY_TOKEN=$(openssl rand -hex 32)
fly secrets set ANTHROPIC_API_KEY=sk-ant-...
fly secrets set OPENAI_API_KEY=sk-...
fly secrets set GOOGLE_API_KEY=...
fly secrets set DISCORD_BOT_TOKEN=MTQ...
Notas:
- Bindings nao-loopback (
--bind lan) requeremOPENCLAW_GATEWAY_TOKENpara seguranca. - Trate esses tokens como senhas.
- Prefira variaveis de ambiente ao arquivo de config para todas as chaves API e tokens.
4) Deploy
fly deploy
Primeiro deploy constroi a imagem Docker (~2-3 minutos). Deploys subsequentes sao mais rapidos.
Apos o deploy, verifique:
fly status
fly logs
5) Criar arquivo de configuracao
SSH na maquina para criar uma config adequada:
fly ssh console
Crie o diretorio e arquivo de config:
mkdir -p /data
cat > /data/openclaw.json << 'EOF'
{
"agents": {
"defaults": {
"model": {
"primary": "anthropic/claude-opus-4-6",
"fallbacks": ["anthropic/claude-sonnet-4-5", "openai/gpt-4o"]
},
"maxConcurrent": 4
},
"list": [
{
"id": "main",
"default": true
}
]
},
"auth": {
"profiles": {
"anthropic:default": { "mode": "token", "provider": "anthropic" },
"openai:default": { "mode": "token", "provider": "openai" }
}
},
"bindings": [
{
"agentId": "main",
"match": { "channel": "discord" }
}
],
"channels": {
"discord": {
"enabled": true,
"groupPolicy": "allowlist",
"guilds": {
"YOUR_GUILD_ID": {
"channels": { "general": { "allow": true } },
"requireMention": false
}
}
}
},
"gateway": {
"mode": "local",
"bind": "auto"
},
"meta": {
"lastTouchedVersion": "2026.1.29"
}
}
EOF
Reinicie para aplicar:
exit
fly machine restart <machine-id>
6) Acessar o Gateway
Interface de Controle
fly open
Ou visite https://my-openclaw.fly.dev/
Cole seu token do gateway (OPENCLAW_GATEWAY_TOKEN) para autenticar.
Logs
fly logs
fly logs --no-tail
Console SSH
fly ssh console
Solucao de problemas
”App is not listening on expected address”
O gateway esta escutando em 127.0.0.1 em vez de 0.0.0.0.
Correcao: Adicione --bind lan ao comando do processo em fly.toml.
Health checks falhando / conexao recusada
O Fly nao consegue alcancar o gateway na porta configurada.
Correcao: Garanta que internal_port corresponde a porta do gateway (--port 3000 ou OPENCLAW_GATEWAY_PORT=3000).
OOM / Problemas de memoria
Container reiniciando ou sendo morto. Sinais: SIGABRT, v8::internal::Runtime_AllocateInYoungGeneration, ou reinicializacoes silenciosas.
Correcao: Aumente a memoria em fly.toml:
[[vm]]
memory = "2048mb"
Nota: 512MB e muito pouco. 2GB e recomendado.
Problemas de lock do Gateway
Gateway recusa iniciar com erros “already running”. Isso acontece quando o container reinicia mas o arquivo de lock PID persiste no volume.
Correcao:
fly ssh console --command "rm -f /data/gateway.*.lock"
fly machine restart <machine-id>
Atualizacoes
git pull
fly deploy
fly status
fly logs
Deploy Privado (Hardened)
Por padrao, o Fly aloca IPs publicos. Para um deploy hardened sem exposicao publica, use o template privado.
Configuracao
fly deploy -c fly.private.toml
Acessando um deploy privado
Opcao 1: Proxy local
fly proxy 3000:3000 -a my-openclaw
Opcao 2: VPN WireGuard
fly wireguard create
Opcao 3: Apenas SSH
fly ssh console -a my-openclaw
Beneficios de seguranca
| Aspecto | Publico | Privado |
|---|---|---|
| Scanners Internet | Descobrivel | Oculto |
| Ataques diretos | Possivel | Bloqueado |
| Acesso interface | Navegador | Proxy/VPN |
| Webhooks | Direto | Via tunel |
Notas
- Fly.io usa arquitetura x86 (nao ARM)
- O Dockerfile e compativel com ambas arquiteturas
- Para onboarding WhatsApp/Telegram, use
fly ssh console - Dados persistentes ficam no volume em
/data - Signal requer Java + signal-cli; use uma imagem personalizada e mantenha a memoria em 2GB+.
Custo
Com a config recomendada (shared-cpu-2x, 2GB RAM):
- ~10-15 dolares/mes dependendo do uso
- Tier gratuito inclui alguma cota
Consulte precos Fly.io para detalhes.