OpenClaw en Hetzner (Docker, Guía VPS de Producción)

Objetivo

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

Si quieres “OpenClaw 24/7 por ~$5”, esta es la configuración más simple y confiable. Los precios de Hetzner pueden cambiar; elige el VPS más pequeño con Debian/Ubuntu y escala si encuentras OOMs.

Recordatorio del modelo de seguridad:

  • Los agentes compartidos de empresa están bien cuando todos están en el mismo límite de confianza y el runtime es solo para negocios.
  • Mantén una separación estricta: VPS/runtime dedicado + cuentas dedicadas; sin perfiles personales de Apple/Google/navegador/gestor de contraseñas en ese host.
  • Si los usuarios son adversarios entre sí, separa por gateway/host/usuario del SO.

Consulta Seguridad y Hosting VPS.

¿Qué vamos a hacer (en términos simples)?

  • Alquilar un servidor Linux pequeño (VPS de Hetzner)
  • Instalar Docker (runtime aislado de aplicaciones)
  • Iniciar el Gateway de OpenClaw en Docker
  • Persistir ~/.openclaw + ~/.openclaw/workspace en el host (sobrevive a reinicios/recompilaciones)
  • Acceder al Control UI desde tu portátil vía túnel SSH

El Gateway se puede acceder vía:

  • Reenvío de puertos SSH desde tu portátil
  • Exposición directa de puertos si gestionas el firewall y tokens tú mismo

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


Ruta rápida (operadores experimentados)

  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. Incluir binarios requeridos en la imagen
  7. docker compose up -d
  8. Verificar persistencia y acceso al Gateway

Qué necesitas

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

1) Aprovisionar el VPS

Crea un VPS de Ubuntu o Debian en Hetzner.

Conéctate como root:

ssh root@YOUR_VPS_IP

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


2) Instalar Docker (en el VPS)

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

Verifica:

docker --version
docker compose version

3) Clonar el repositorio de OpenClaw

git clone https://github.com/openclaw/openclaw.git
cd openclaw

Esta guía asume que vas a compilar una imagen personalizada para garantizar la persistencia de binarios.


4) Crear directorios persistentes en el host

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

mkdir -p /root/.openclaw/workspace

# Establecer permisos para el usuario del contenedor (uid 1000):
chown -R 1000:1000 /root/.openclaw

5) Configurar variables de entorno

Crea .env en la raíz del repositorio.

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

Genera secretos fuertes:

openssl rand -hex 32

No hagas commit de este archivo.


6) Configuración de Docker Compose

Crea o actualiza 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:
      # Recomendado: mantener el Gateway en loopback en el VPS; acceder vía túnel SSH.
      # Para exponerlo públicamente, quita el prefijo `127.0.0.1:` y configura el firewall.
      - "127.0.0.1:${OPENCLAW_GATEWAY_PORT}:18789"
    command:
      [
        "node",
        "dist/index.js",
        "gateway",
        "--bind",
        "${OPENCLAW_GATEWAY_BIND}",
        "--port",
        "${OPENCLAW_GATEWAY_PORT}",
        "--allow-unconfigured",
      ]

--allow-unconfigured es solo una conveniencia para el bootstrap, no reemplaza una configuración adecuada del gateway. Aún así configura auth (gateway.auth.token o password) y usa configuraciones de binding seguras para tu despliegue.


7) Pasos compartidos del runtime Docker en VM

Usa la guía de runtime compartido para el flujo común de Docker en host:


8) Acceso específico de Hetzner

Después de los pasos compartidos de build y lanzamiento, crea un túnel desde tu portátil:

ssh -N -L 18789:127.0.0.1:18789 root@YOUR_VPS_IP

Abre:

http://127.0.0.1:18789/

Pega tu token del gateway.


El mapa de persistencia compartido está en Docker VM Runtime.

Infrastructure as Code (Terraform)

Para equipos que prefieren flujos de infraestructura como código, una configuración de Terraform mantenida por la comunidad proporciona:

  • Configuración modular de Terraform con gestión de estado remoto
  • Aprovisionamiento automatizado vía cloud-init
  • Scripts de despliegue (bootstrap, deploy, backup/restore)
  • Hardening de seguridad (firewall, UFW, acceso solo SSH)
  • Configuración de túnel SSH para acceso al gateway

Repositorios:

Este enfoque complementa la configuración Docker anterior con despliegues reproducibles, infraestructura versionada y recuperación de desastres automatizada.

Nota: Mantenido por la comunidad. Para problemas o contribuciones, consulta los enlaces de los repositorios.