Cómo desplegar OpenClaw en Hetzner con Docker
¿Te ha pasado que configuras una herramienta en un servidor y todo parece ir bien hasta que el contenedor se reinicia y pierdes la sesión? Gestionar servicios que requieren persistencia de estado y binarios específicos suele ser un dolor de cabeza si no se tiene una estrategia clara desde el primer minuto.
Si buscas ejecutar OpenClaw 24/7 por unos 5 USD al mes, esta es la configuración más fiable y sencilla que puedes usar.
Requisitos previos
Sección titulada «Requisitos previos»- VPS de Hetzner con acceso root (Debian o Ubuntu recomendado).
- Acceso SSH desde tu ordenador.
- Docker y Docker Compose instalados.
- Credenciales de autenticación para tus modelos.
- Credenciales opcionales de proveedores (WhatsApp QR, Telegram bot token, Gmail OAuth).
- Unos 20 minutos de tiempo.
Inicio rápido
Sección titulada «Inicio rápido»Sigue estos pasos para tener tu Gateway funcionando en 5 minutos:
- Provisiona tu VPS: Crea la instancia en Hetzner y conéctate por SSH.
- Instala Docker: Ejecuta el script oficial de instalación.
- Clona el repo: Descarga el código de OpenClaw.
- Prepara la persistencia: Crea los directorios en el host y ajusta los permisos.
- Configura el entorno: Crea tu archivo
.envy define eldocker-compose.yml. - Integra los binarios: Añade las herramientas necesarias (como
gogowacli) directamente en el Dockerfile. - Lanza el servicio: Construye la imagen y levanta el contenedor con
docker compose up -d. - Verifica: Comprueba los logs y accede mediante un túnel SSH.
1. Provisionar el VPS e instalar Docker
Sección titulada «1. Provisionar el VPS e instalar Docker»Crea un VPS Ubuntu o Debian en Hetzner. Conéctate como root:
ssh root@YOUR_VPS_IPInstala Docker y las dependencias básicas:
apt-get updateapt-get install -y git curl ca-certificatescurl -fsSL https://get.docker.com | shVerifica las versiones:
docker --versiondocker compose version2. Clonar y preparar el entorno
Sección titulada «2. Clonar y preparar el entorno»Clona el repositorio oficial para construir tu propia imagen personalizada:
git clone https://github.com/openclaw/openclaw.gitcd openclawCrea los directorios donde se guardarán los datos para que no se borren al reiniciar el contenedor:
mkdir -p /root/.openclawmkdir -p /root/.openclaw/workspace
# Ajusta los permisos para el usuario del contenedor (uid 1000):chown -R 1000:1000 /root/.openclawchown -R 1000:1000 /root/.openclaw/workspace3. Configuración de variables y Docker Compose
Sección titulada «3. Configuración de variables y Docker Compose»Crea un archivo .env en la raíz del proyecto. No compartas este archivo.
OPENCLAW_IMAGE=openclaw:latestOPENCLAW_GATEWAY_TOKEN=cambia-esto-ahoraOPENCLAW_GATEWAY_BIND=lanOPENCLAW_GATEWAY_PORT=18789
OPENCLAW_CONFIG_DIR=/root/.openclawOPENCLAW_WORKSPACE_DIR=/root/.openclaw/workspace
GOG_KEYRING_PASSWORD=cambia-esto-ahoraXDG_CONFIG_HOME=/home/node/.openclawConfigura el archivo docker-compose.yml:
services: openclaw-gateway: image: ${OPENCLAW_IMAGE} build: . restart: unless-stopped env_file: - .env environment: - HOME=/home/node - NODE_ENV=production - TERM=xterm-256color - OPENCLAW_GATEWAY_BIND=${OPENCLAW_GATEWAY_BIND} - OPENCLAW_GATEWAY_PORT=${OPENCLAW_GATEWAY_PORT} - OPENCLAW_GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN} - GOG_KEYRING_PASSWORD=${GOG_KEYRING_PASSWORD} - XDG_CONFIG_HOME=${XDG_CONFIG_HOME} - PATH=/home/linuxbrew/.linuxbrew/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin volumes: - ${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw - ${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace ports: - "127.0.0.1:${OPENCLAW_GATEWAY_PORT}:18789" command: [ "node", "dist/index.js", "gateway", "--bind", "${OPENCLAW_GATEWAY_BIND}", "--port", "${OPENCLAW_GATEWAY_PORT}", ]4. Hornear binarios en la imagen (Crítico)
Sección titulada «4. Hornear binarios en la imagen (Crítico)»Instalar binarios dentro de un contenedor en ejecución es un error; se perderán al reiniciar. Debes incluirlos en el Dockerfile durante la construcción.
Usa este ejemplo de Dockerfile para incluir gog, goplaces y wacli:
FROM node:22-bookworm
RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/*
# Ejemplo: Gmail CLIRUN curl -L https://github.com/steipete/gog/releases/latest/download/gog_Linux_x86_64.tar.gz \ | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/gog
# Ejemplo: Google Places CLIRUN curl -L https://github.com/steipete/goplaces/releases/latest/download/goplaces_Linux_x86_64.tar.gz \ | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/goplaces
# Ejemplo: WhatsApp CLIRUN curl -L https://github.com/steipete/wacli/releases/latest/download/wacli_Linux_x86_64.tar.gz \ | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/wacli
WORKDIR /appCOPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./COPY ui/package.json ./ui/package.jsonCOPY scripts ./scripts
RUN corepack enableRUN pnpm install --frozen-lockfile
COPY . .RUN pnpm buildRUN pnpm ui:installRUN pnpm ui:build
ENV NODE_ENV=production
CMD ["node","dist/index.js"]5. Construcción y verificación
Sección titulada «5. Construcción y verificación»Ejecuta la construcción y levanta el servicio:
docker compose builddocker compose up -d openclaw-gatewayVerifica que el Gateway esté escuchando:
docker compose logs -f openclaw-gatewaySi ves [gateway] listening on ws://0.0.0.0:18789, todo va bien. Para acceder a la UI desde tu laptop de forma segura, crea un túnel SSH:
ssh -N -L 18789:127.0.0.1:18789 root@YOUR_VPS_IPAhora abre http://127.0.0.1:18789/ en tu navegador y pega tu token.
Solución de problemas
Sección titulada «Solución de problemas»- Los binarios desaparecen: Si instalaste algo manualmente con
aptocurldentro del contenedor, se borrará al reiniciar. Debes editar el Dockerfile y reconstruir la imagen. - Error de permisos en volúmenes: Si el Gateway no puede escribir logs o configuraciones, asegúrate de haber ejecutado
chown -R 1000:1000en las carpetas del host. - No puedo acceder a la UI: Por seguridad, el
docker-compose.ymlvincula el puerto a127.0.0.1. Esto significa que solo es accesible vía túnel SSH o desde dentro del VPS.
Qué persiste y dónde
Sección titulada «Qué persiste y dónde»| Componente | Ubicación | Mecanismo |
|---|---|---|
| Configuración Gateway | /home/node/.openclaw/ | Volumen en Host |
| Perfiles Auth Modelos | /home/node/.openclaw/ | Volumen en Host |
| Configuración de Skills | /home/node/.openclaw/skills/ | Volumen en Host |
| Workspace del Agente | /home/node/.openclaw/workspace/ | Volumen en Host |
| Sesión de WhatsApp | /home/node/.openclaw/ | Volumen en Host |
| Binarios externos | /usr/local/bin/ | Imagen Docker |
| Runtime de Node | Sistema de archivos del contenedor | Imagen Docker |
| Contenedor Docker | Efímero | Reiniciable |
¿Necesitas ayuda con una configuración específica? Prueba el 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.