Ir al contenido

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.

  • 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.

Si tienes prisa, este es el camino de 5 minutos:

  1. Clona el repo y personaliza el archivo fly.toml.
  2. Crea la app y el volume para tus datos.
  3. Define tus secrets (claves de API).
  4. Ejecuta fly deploy y configura el archivo final vía SSH.

Primero, prepara el terreno. Abre tu terminal y sigue estos pasos:

Ventana de terminal
# Clona el repositorio
git clone https://github.com/openclaw/openclaw.git
cd 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 iad

Tip: Elige una región cercana a ti. Opciones habituales: lhr (Londres), iad (Virginia), sjc (San José).

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:

AjustePor qué
--bind lanEscucha en 0.0.0.0 para que el proxy de Fly llegue al Gateway.
--allow-unconfiguredPermite que arranque sin archivo de configuración inicial.
internal_port = 3000Debe coincidir con el puerto del Gateway para los health checks.
memory = "2048mb"512MB es poco; 2GB es lo recomendado para evitar fallos.

No guardes tus claves en archivos de texto. Usa el sistema de secrets de Fly:

Ventana de terminal
# Token del Gateway (obligatorio para binds que no sean localhost)
fly secrets set OPENCLAW_GATEWAY_TOKEN=$(openssl rand -hex 32)
# API Keys de modelos
fly secrets set ANTHROPIC_API_KEY=sk-ant-...
fly secrets set OPENAI_API_KEY=sk-...
# Tokens de canales
fly 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.

Lanza tu aplicación al mundo:

Ventana de terminal
fly deploy

El 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.

Entra en la máquina mediante SSH para crear el archivo openclaw.json real:

Ventana de terminal
fly ssh console

Dentro de la consola de la máquina, ejecuta esto:

Ventana de terminal
mkdir -p /data
cat > /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"
}
}
EOF

Sal de la consola con exit y reinicia para aplicar los cambios: fly machine restart <machine-id>.

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.

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.

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"

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.

OpenClaw

OpenClaw Expert

Sigues atascado?

Si esta pagina no resolvio tu caso, pregunta a OpenClaw Expert para pasos concretos.