Ir al contenido

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.

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

Sigue estos pasos para tener tu Gateway funcionando en 5 minutos:

  1. Provisiona tu VPS: Crea la instancia en Hetzner y conéctate por SSH.
  2. Instala Docker: Ejecuta el script oficial de instalación.
  3. Clona el repo: Descarga el código de OpenClaw.
  4. Prepara la persistencia: Crea los directorios en el host y ajusta los permisos.
  5. Configura el entorno: Crea tu archivo .env y define el docker-compose.yml.
  6. Integra los binarios: Añade las herramientas necesarias (como gog o wacli) directamente en el Dockerfile.
  7. Lanza el servicio: Construye la imagen y levanta el contenedor con docker compose up -d.
  8. Verifica: Comprueba los logs y accede mediante un túnel SSH.

Crea un VPS Ubuntu o Debian en Hetzner. Conéctate como root:

Ventana de terminal
ssh root@YOUR_VPS_IP

Instala Docker y las dependencias básicas:

Ventana de terminal
apt-get update
apt-get install -y git curl ca-certificates
curl -fsSL https://get.docker.com | sh

Verifica las versiones:

Ventana de terminal
docker --version
docker compose version

Clona el repositorio oficial para construir tu propia imagen personalizada:

Ventana de terminal
git clone https://github.com/openclaw/openclaw.git
cd openclaw

Crea los directorios donde se guardarán los datos para que no se borren al reiniciar el contenedor:

Ventana de terminal
mkdir -p /root/.openclaw
mkdir -p /root/.openclaw/workspace
# Ajusta los permisos para el usuario del contenedor (uid 1000):
chown -R 1000:1000 /root/.openclaw
chown -R 1000:1000 /root/.openclaw/workspace

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

Ventana de terminal
OPENCLAW_IMAGE=openclaw:latest
OPENCLAW_GATEWAY_TOKEN=cambia-esto-ahora
OPENCLAW_GATEWAY_BIND=lan
OPENCLAW_GATEWAY_PORT=18789
OPENCLAW_CONFIG_DIR=/root/.openclaw
OPENCLAW_WORKSPACE_DIR=/root/.openclaw/workspace
GOG_KEYRING_PASSWORD=cambia-esto-ahora
XDG_CONFIG_HOME=/home/node/.openclaw

Configura 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}",
]

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 CLI
RUN 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 CLI
RUN 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 CLI
RUN 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 /app
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./
COPY ui/package.json ./ui/package.json
COPY scripts ./scripts
RUN corepack enable
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
RUN pnpm ui:install
RUN pnpm ui:build
ENV NODE_ENV=production
CMD ["node","dist/index.js"]

Ejecuta la construcción y levanta el servicio:

Ventana de terminal
docker compose build
docker compose up -d openclaw-gateway

Verifica que el Gateway esté escuchando:

Ventana de terminal
docker compose logs -f openclaw-gateway

Si 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:

Ventana de terminal
ssh -N -L 18789:127.0.0.1:18789 root@YOUR_VPS_IP

Ahora abre http://127.0.0.1:18789/ en tu navegador y pega tu token.

  • Los binarios desaparecen: Si instalaste algo manualmente con apt o curl dentro 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:1000 en las carpetas del host.
  • No puedo acceder a la UI: Por seguridad, el docker-compose.yml vincula el puerto a 127.0.0.1. Esto significa que solo es accesible vía túnel SSH o desde dentro del VPS.
ComponenteUbicaciónMecanismo
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 NodeSistema de archivos del contenedorImagen Docker
Contenedor DockerEfímeroReiniciable

¿Necesitas ayuda con una configuración específica? Prueba el AI Setup Assistant.

OpenClaw

OpenClaw Expert

Sigues atascado?

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