Cómo desplegar OpenClaw en Fly.io
¿Alguna vez has intentado desplegar un bot o un Gateway y has terminado peleándote con servidores complicados o configuraciones de red que parecen imposibles? Yo también. Es frustrante cuando solo quieres que tu código funcione en la nube sin pasar horas configurando certificados SSL o volúmenes de datos. Por eso Fly.io es mi opción favorita: es rápido, gestiona el HTTPS por ti y te permite escalar sin dramas.
En esta guía te enseño a configurar tu OpenClaw Gateway de forma directa. Vamos a usar contenedores y almacenamiento persistente para que no pierdas nada cuando reinicies la máquina.
What you need
Sección titulada «What you need»- flyctl CLI instalado en tu equipo.
- Una cuenta en Fly.io (el plan gratuito es suficiente para empezar).
- Tu Anthropic API key (u otras keys de proveedores de modelos).
- Credenciales de canales: Discord bot token, Telegram token, etc.
Inicio rápido
Sección titulada «Inicio rápido»Si tienes prisa, este es el camino de 5 minutos:
- Clona el repo y personaliza el archivo
fly.toml. - Crea la app y el volume para tus datos.
- Define tus secrets (claves de API).
- Ejecuta
fly deployy configura el archivo final vía SSH.
1) Crear la app en Fly.io
Sección titulada «1) Crear la app en Fly.io»Primero, prepara el terreno. Abre tu terminal y sigue estos pasos:
# Clona el repositoriogit clone https://github.com/openclaw/openclaw.gitcd openclaw
# Crea una nueva app (elige un nombre único)fly apps create mi-openclaw
# Crea un volume persistente (1GB suele bastar)fly volumes create openclaw_data --size 1 --region iadTip: Elige una región cercana a ti. Opciones habituales: lhr (Londres), iad (Virginia), sjc (San José).
2) Configurar fly.toml
Sección titulada «2) Configurar fly.toml»Edita tu fly.toml para que coincida con el nombre de tu app. Esta configuración básica expone una URL pública.
app = "mi-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"Ajustes clave:
| Ajuste | Por qué |
|---|---|
--bind lan | Escucha en 0.0.0.0 para que el proxy de Fly llegue al Gateway. |
--allow-unconfigured | Permite que arranque sin archivo de configuración inicial. |
internal_port = 3000 | Debe coincidir con el puerto del Gateway para los health checks. |
memory = "2048mb" | 512MB es poco; 2GB es lo recomendado para evitar fallos. |
3) Configurar secrets
Sección titulada «3) Configurar secrets»No guardes tus claves en archivos de texto. Usa el sistema de secrets de Fly:
# Token del Gateway (obligatorio para binds que no sean localhost)fly secrets set OPENCLAW_GATEWAY_TOKEN=$(openssl rand -hex 32)
# API Keys de modelosfly secrets set ANTHROPIC_API_KEY=sk-ant-...fly secrets set OPENAI_API_KEY=sk-...
# Tokens de canalesfly secrets set DISCORD_BOT_TOKEN=MTQ...Te recomiendo usar variables de entorno para todas las API keys. Así evitas que aparezcan en tu openclaw.json y que se filtren por accidente en logs.
4) Deploy
Sección titulada «4) Deploy»Lanza tu aplicación al mundo:
fly deployEl primer deploy tarda unos 2 o 3 minutos mientras construye la imagen de Docker. Los siguientes serán mucho más rápidos. Cuando termine, verifica que todo vaya bien con fly status y fly logs.
5) Crear el archivo de configuración
Sección titulada «5) Crear el archivo de configuración»Entra en la máquina mediante SSH para crear el archivo openclaw.json real:
fly ssh consoleDentro de la consola de la máquina, ejecuta esto:
mkdir -p /datacat > /data/openclaw.json << 'EOF'{ "agents": { "defaults": { "model": { "primary": "anthropic/claude-3-5-sonnet-latest", "fallbacks": ["openai/gpt-4o"] }, "maxConcurrent": 4 }, "list": [ { "id": "main", "default": true } ] }, "auth": { "profiles": { "anthropic:default": { "mode": "token", "provider": "anthropic" }, "openai:default": { "mode": "token", "provider": "openai" } } }, "channels": { "discord": { "enabled": true, "groupPolicy": "allowlist", "guilds": { "TU_GUILD_ID": { "channels": { "general": { "allow": true } }, "requireMention": false } } } }, "gateway": { "mode": "local", "bind": "auto" }}EOFSal de la consola con exit y reinicia para aplicar los cambios: fly machine restart <machine-id>.
Solución de problemas
Sección titulada «Solución de problemas»El Gateway no responde o da “connection refused”
Sección titulada «El Gateway no responde o da “connection refused”»Es probable que esté escuchando en 127.0.0.1 en lugar de 0.0.0.0.
Solución: Asegúrate de incluir --bind lan en el comando de ejecución dentro de tu fly.toml.
Problemas de memoria (OOM)
Sección titulada «Problemas de memoria (OOM)»Si ves errores como SIGABRT o reinicios constantes, la máquina se ha quedado sin RAM.
Solución: Sube la memoria a 2GB en el fly.toml o usa fly machine update --vm-memory 2048. 512MB no es suficiente para un uso real.
Errores de “Gateway already running”
Sección titulada «Errores de “Gateway already running”»Esto pasa si la máquina se reinicia de golpe y queda un archivo de bloqueo (lock) en el volume.
Solución: Borra el archivo manualmente:
fly ssh console --command "rm -f /data/gateway.*.lock"
El estado no se guarda
Sección titulada «El estado no se guarda»Si pierdes sesiones al reiniciar, es que los datos se están escribiendo fuera del volume.
Solución: Verifica que OPENCLAW_STATE_DIR=/data esté bien definido en tus variables de entorno.
¿Necesitas ayuda personalizada con tu configuración? Usa nuestro AI Setup Assistant.
Próximos pasos
Sección titulada «Próximos pasos»OpenClaw Expert
Sigues atascado?
Si esta pagina no resolvio tu caso, pregunta a OpenClaw Expert para pasos concretos.