Ir al contenido

Hetzner

OpenClaw en Hetzner (Guía de VPS de producción con Docker)

Sección titulada «OpenClaw en Hetzner (Guía de VPS de producción con Docker)»

Ejecutar un OpenClaw Gateway persistente en un VPS de Hetzner usando Docker, con estado duradero, binarios integrados y un comportamiento de reinicio seguro.

Si quieres “OpenClaw 24/7 por ~$5”, esta es la configuración más sencilla y confiable. Los precios de Hetzner cambian; elige el VPS más pequeño de Debian/Ubuntu y escala si experimentas errores de falta de memoria (OOMs).

¿Qué estamos haciendo (en términos simples)?

Sección titulada «¿Qué estamos haciendo (en términos simples)?»
  • Alquilar un servidor Linux pequeño (VPS de Hetzner)
  • Instalar Docker (entorno de ejecución de aplicación aislado)
  • Iniciar el OpenClaw Gateway en Docker
  • Persistir ~/.openclaw + ~/.openclaw/workspace en el host (sobrevive a reinicios/reconstrucciones)
  • Acceder a la Interfaz de Control (UI) desde tu portátil a través de un túnel SSH

Se puede acceder al Gateway a través de:

  • Redirección de puertos SSH desde tu portátil
  • Exposición directa de puertos si gestionas el cortafuegos y los tokens tú mismo

Esta guía asume Ubuntu o Debian en Hetzner.
Si estás en otro VPS de Linux, mapea los paquetes correspondientemente. Para el flujo genérico de Docker, consulta Docker.


  1. Aprovisionar VPS de Hetzner
  2. Instalar Docker
  3. Clonar el repositorio de OpenClaw
  4. Crear directorios persistentes en el host
  5. Configurar .env y docker-compose.yml
  6. Integrar los binarios necesarios en la imagen
  7. docker compose up -d
  8. Verificar la persistencia y el acceso al Gateway

  • VPS de Hetzner con acceso root
  • Acceso SSH desde tu portátil
  • Conocimiento básico de SSH + copiar/pegar
  • ~20 minutos
  • Docker y Docker Compose
  • Credenciales de autenticación del modelo
  • Credenciales opcionales del proveedor
    • Código QR de WhatsApp
    • Token del bot de Telegram
    • OAuth de Gmail

Crea un VPS de Ubuntu o Debian en Hetzner.

Conecta como root:

Ventana de terminal
ssh root@YOUR_VPS_IP

Esta guía asume que el VPS tiene estado. No lo trates como infraestructura desechable.


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

Verificar:

Ventana de terminal
docker --version
docker compose version

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

Esta guía asume que construirás una imagen personalizada para garantizar la persistencia de los binarios.


4) Crear directorios persistentes en el host

Sección titulada «4) Crear directorios persistentes en el host»

Los contenedores de Docker son efímeros. Todo el estado de larga duración debe residir en el host.

Ventana de terminal
mkdir -p /root/.openclaw
mkdir -p /root/.openclaw/workspace
# Set ownership to the container user (uid 1000):
chown -R 1000:1000 /root/.openclaw
chown -R 1000:1000 /root/.openclaw/workspace

Cree .env en la raíz del repositorio.

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

Genere secretos seguros:

Ventana de terminal
openssl rand -hex 32

No confirme este archivo.


Cree o actualice 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:
# Recommended: keep the Gateway loopback-only on the VPS; access via SSH tunnel.
# To expose it publicly, remove the `127.0.0.1:` prefix and firewall accordingly.
- "127.0.0.1:${OPENCLAW_GATEWAY_PORT}:18789"
# Optional: only if you run iOS/Android nodes against this VPS and need Canvas host.
# If you expose this publicly, read /gateway/security and firewall accordingly.
# - "18793:18793"
command: ["node", "dist/index.js", "gateway", "--bind", "${OPENCLAW_GATEWAY_BIND}", "--port", "${OPENCLAW_GATEWAY_PORT}"]

7) Integrar los binarios necesarios en la imagen (crítico)

Sección titulada «7) Integrar los binarios necesarios en la imagen (crítico)»

Instalar binarios dentro de un contenedor en ejecución es una trampa. Cualquier cosa instalada en tiempo de ejecución se perderá al reiniciar.

Todos los binarios externos requeridos por las habilidades deben instalarse en el momento de la compilación de la imagen.

Los ejemplos a continuación muestran solo tres binarios comunes:

  • gog para acceso a Gmail
  • goplaces para Google Places
  • wacli para WhatsApp

Estos son ejemplos, no una lista completa. Puede instalar tantos binarios como sea necesario utilizando el mismo patrón.

Si agrega nuevas habilidades más tarde que dependen de binarios adicionales, debe:

  1. Actualizar el Dockerfile
  2. Reconstruir la imagen
  3. Reiniciar los contenedores

Dockerfile de ejemplo

FROM node:22-bookworm
RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/*
# Example binary 1: 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
# Example binary 2: 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
# Example binary 3: 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
# Add more binaries below using the same pattern
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"]

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

Verificar binarios:

Ventana de terminal
docker compose exec openclaw-gateway which gog
docker compose exec openclaw-gateway which goplaces
docker compose exec openclaw-gateway which wacli

Salida esperada:

/usr/local/bin/gog
/usr/local/bin/goplaces
/usr/local/bin/wacli

Ventana de terminal
docker compose logs -f openclaw-gateway

Éxito:

[gateway] listening on ws://0.0.0.0:18789

Desde su portátil:

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

Abrir:

http://127.0.0.1:18789/

Pegue su token de gateway.


OpenClaw se ejecuta en Docker, pero Docker no es la fuente de verdad. Todo el estado de larga duración debe sobrevivir a reinicios, reconstrucciones y rearranques.

ComponenteUbicaciónMecanismo de persistenciaNotas
Configuración de Gateway/home/node/.openclaw/Montaje de volumen de hostIncluye openclaw.json, tokens
Perfiles de autenticación de modelos/home/node/.openclaw/Montaje de volumen de hostTokens OAuth, claves API
Configuraciones de habilidades/home/node/.openclaw/skills/Montaje de volumen de hostEstado a nivel de habilidad
Espacio de trabajo del agente/home/node/.openclaw/workspace/Montaje de volumen de hostCódigo y artefactos del agente
Sesión de WhatsApp/home/node/.openclaw/Montaje de volumen de hostConserva el inicio de sesión QR
Llavero de Gmail/home/node/.openclaw/Volumen de host + contraseñaRequiere GOG_KEYRING_PASSWORD
Binarios externos/usr/local/bin/Imagen DockerDebe integrarse en el momento de la compilación
Tiempo de ejecución de NodeSistema de archivos del contenedorImagen DockerReconstruido en cada compilación de imagen
Paquetes del sistema operativoSistema de archivos del contenedorImagen DockerNo instalar en tiempo de ejecución
Contenedor DockerEfímeroReiniciableSeguro de destruir