Hosting

Hetzner

Objetivo

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

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

Recordatorio del modelo de seguridad:

  • Los agentes compartidos por la empresa están bien cuando todos están dentro del mismo límite de confianza y el entorno de ejecución es solo empresarial.
  • Mantén una separación estricta: VPS/runtime dedicado + cuentas dedicadas; no perfiles personales de Apple/Google/navegador/gestor de contraseñas en ese host.
  • Si los usuarios son adversarios entre sí, sepáralos por Gateway/host/usuario del sistema operativo.

Consulta Seguridad y Alojamiento de VPS.

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

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

Ese estado montado de ~/.openclaw incluye openclaw.json, por agente agents/<agentId>/agent/auth-profiles.json y .env.

Se puede acceder al Gateway mediante:

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

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


Ruta rápida (operadores con experiencia)

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

Qué necesitas

  • VPS de Hetzner con acceso root
  • Acceso SSH desde tu portátil
  • Comodidad 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

  • Aprovisionar el VPS

    Crea un VPS Ubuntu o Debian en Hetzner.

    Conéctate como root:

    ssh root@YOUR_VPS_IP
    

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

  • 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
    
  • Clonar el repositorio de OpenClaw

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

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

  • Crear directorios persistentes en el host

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

    mkdir -p /root/.openclaw/workspace
    
    # Set ownership to the container user (uid 1000):
    chown -R 1000:1000 /root/.openclaw
    
  • Configurar variables de entorno

    Crea .env en la raíz del repositorio.

    OPENCLAW_IMAGE=openclaw:latest
    OPENCLAW_GATEWAY_TOKEN=
    OPENCLAW_GATEWAY_BIND=lan
    OPENCLAW_GATEWAY_PORT=18789
    
    OPENCLAW_CONFIG_DIR=/root/.openclaw
    OPENCLAW_WORKSPACE_DIR=/root/.openclaw/workspace
    
    GOG_KEYRING_PASSWORD=
    XDG_CONFIG_HOME=/home/node/.openclaw
    

    Define OPENCLAW_GATEWAY_TOKEN cuando quieras gestionar el token estable del gateway mediante .env; de lo contrario, configura gateway.auth.token antes de depender de clientes entre reinicios. Si ninguna de las dos fuentes existe, OpenClaw usa un token solo de runtime para ese arranque. Genera una contraseña de llavero y pégala en GOG_KEYRING_PASSWORD:

    openssl rand -hex 32
    

    No confirmes este archivo en git.

    Este archivo .env es para env de contenedor/runtime, como OPENCLAW_GATEWAY_TOKEN. La autenticación OAuth/clave API de proveedores almacenada vive en el archivo montado ~/.openclaw/agents/<agentId>/agent/auth-profiles.json.

  • 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:
          # 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"
        command:
          [
            "node",
            "dist/index.js",
            "gateway",
            "--bind",
            "${OPENCLAW_GATEWAY_BIND}",
            "--port",
            "${OPENCLAW_GATEWAY_PORT}",
            "--allow-unconfigured",
          ]
    

    --allow-unconfigured es solo para facilitar el arranque inicial, no sustituye una configuración de Gateway adecuada. Aun así, configura la autenticación (gateway.auth.token o contraseña) y usa ajustes de enlace seguros para tu despliegue.

  • Pasos compartidos del runtime de VM Docker

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

  • Acceso específico de Hetzner

    Después de los pasos compartidos de compilación y lanzamiento, completa la siguiente configuración para abrir el túnel:

    Requisito previo: Asegúrate de que la configuración de sshd de tu VPS permite el reenvío TCP. Si has reforzado tu configuración de SSH, revisa /etc/ssh/sshd_config y define:

    AllowTcpForwarding local
    

    local permite reenvíos locales ssh -L desde tu portátil y bloquea reenvíos remotos desde el servidor. Configurarlo en no hará que el túnel falle con: channel 3: open failed: administratively prohibited: open failed

    Después de confirmar que el reenvío TCP está habilitado, reinicia el servicio SSH (systemctl restart ssh) y ejecuta el 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 el secreto compartido configurado. Esta guía usa el token del gateway de forma predeterminada; si cambiaste a autenticación por contraseña, usa esa contraseña en su lugar.

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

    Infraestructura como código (Terraform)

    Para equipos que prefieren flujos de trabajo 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 mediante cloud-init
    • Scripts de despliegue (bootstrap, despliegue, copia de seguridad/restauración)
    • Refuerzo de seguridad (firewall, UFW, acceso solo por SSH)
    • Configuración de túnel SSH para acceso al gateway

    Repositorios:

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

    Siguientes pasos

    Relacionado