bolt Valebyte VPS desde $4/mes — NVMe, despliegue en 60s.

Obtener VPS arrow_forward
eco Principiante Tutorial/Cómo hacer

Implementación de OpenClaw en un VPS: Docker, bot de Telegram, SSL y agentes de IA seguros

calendar_month Oct 15, 2026 schedule 21 min de lectura visibility 84 vistas
Развёртывание OpenClaw на VPS: Docker, Telegram-бот, SSL и безопасные AI-агенты
info

¿Necesitas un servidor para esta guía? Ofrecemos servidores dedicados y VPS en más de 50 países con configuración instantánea.

¿Necesitas un VPS para esta guía?

Explore otras opciones de servidores dedicados en

Implementación de OpenClaw en un VPS: Docker, bot de Telegram, SSL y agentes de IA seguros

1. TL;DR

En esta guía implementaremos OpenClaw en un VPS mediante Docker, conectaremos un bot de Telegram, protegeremos el panel de control con HTTPS mediante Caddy y configuraremos un modelo de acceso seguro para agentes de IA: usuario independiente, claves SSH, firewall, allowlist de Telegram ID, pairing y copias de seguridad.

  • OpenClaw se ejecuta en Docker Compose y almacena el estado en un volume independiente.
  • El bot de Telegram funciona mediante long polling y no requiere una URL de webhook pública.
  • La interfaz web y Gateway estarán disponibles mediante HTTPS a través de Caddy.
  • El acceso a los agentes se limita mediante una lista de usuarios de Telegram autorizados y un código de emparejamiento.
  • Los secretos se almacenan en el archivo .env, que no se incluye en Git ni en las copias de seguridad en texto plano.
  • Para el escenario básico basta un VPS con 2 vCPU, 4 GB de RAM y un disco NVMe de 40–60 GB.

3. Qué configuramos y por qué

Схема: 3. Что мы настраиваем и зачем
Схема: 3. Что мы настраиваем и зачем

OpenClaw es una plataforma self-hosted para ejecutar agentes de IA y conectarlos a canales de comunicación: Telegram, interfaz web, API y otras integraciones. El agente recibe los mensajes del usuario, transmite la solicitud al modelo de lenguaje seleccionado, utiliza las herramientas autorizadas y devuelve el resultado al chat.

El escenario práctico es el siguiente: escribes al bot de Telegram «recopila un breve resumen de los logs del día», «prepara un borrador de respuesta para el cliente», «encuentra el error en el repositorio» o «crea una tarea en el tracker». OpenClaw transmite la solicitud al modelo de IA y, si la política lo permite, utiliza herramientas: HTTP API, sistema de archivos, comandos shell, Git, bases de datos o servicios internos.

La principal ventaja de implementar la solución por cuenta propia en un VPS es el control sobre los datos y los accesos. Tú decides dónde se almacena el historial de conversaciones, qué modelos están conectados, qué herramientas están disponibles para el agente y quién puede enviar comandos. Esto resulta especialmente útil para desarrolladores, equipos pequeños, propietarios de SaaS y usuarios que no quieren transferir sus contextos de trabajo a paneles SaaS públicos.

Qué funcionará después de la configuración

  • OpenClaw Gateway en un contenedor Docker independiente.
  • Un bot de Telegram que recibe mensajes privados de cuentas autorizadas.
  • Un dominio HTTPS para la interfaz administrativa o la API Gateway.
  • Una red Docker aislada entre Caddy y OpenClaw.
  • Almacenamiento persistente para la configuración, las sesiones y los datos de trabajo.
  • Reinicio automático de los contenedores después de reiniciar el VPS.
  • Backup nocturno de la configuración y del Docker volume en un almacenamiento externo compatible con S3.

OpenClaw self-hosted y agentes de IA en la nube

Criterio Servicio cloud-managed OpenClaw en un VPS propio
Control de los datos El historial y la configuración están en manos del proveedor del servicio Las configuraciones, los logs y el historial se almacenan en tu servidor
Conexión de modelos Normalmente limitada a la lista del proveedor Puedes elegir un proveedor de API o un endpoint local compatible
Acceso a herramientas Integraciones predefinidas Políticas flexibles, API internas y herramientas propias
Seguridad Depende de las reglas de la plataforma SaaS Tú controlas el firewall, la red, la allowlist y la auditoría
Soporte El mantenimiento lo realiza el proveedor Tú realizas las actualizaciones, las copias de seguridad y la monitorización
Coste Suscripción más límites de uso VPS, API del modelo y almacenamiento de copias de seguridad

Self-hosted no significa que el modelo deba ejecutarse necesariamente en el mismo servidor. En la mayoría de los casos, el VPS ejecuta OpenClaw y las integraciones, mientras que la generación se realiza mediante la API del modelo. Es más económico: para la inferencia de LLM en CPU se necesitan muchos más recursos y, a veces, incluso una GPU. Si no se pueden enviar datos a una API externa, el modelo puede conectarse a un servidor independiente con Ollama, vLLM u otro punto de acceso compatible con OpenAI.

Modelo de amenazas para un agente de IA

Un agente de IA es más peligroso que un bot de chat normal si tiene acceso a shell, archivos o tokens de servicios de terceros. No concedas al agente acceso root, no conectes el Docker socket sin necesidad y no publiques Gateway directamente en Internet sin HTTPS y autenticación. El Telegram ID del usuario no debe considerarse un secreto, pero resulta útil como barrera adicional de allowlist.

Principio de inicio seguro: el agente responde únicamente al propietario mediante mensajes privados, funciona con un usuario sin privilegios, no tiene acceso al Docker socket y su directorio de trabajo está separado de la configuración del servidor.

4. Qué configuración de VPS se necesita para esta tarea

Схема: 4. Какой VPS-конфиг нужен под эту задачу
Схема: 4. Какой VPS-конфиг нужен под эту задачу

OpenClaw no requiere GPU por sí mismo si utilizas API externas de modelos de lenguaje. La carga depende del número de conversaciones simultáneas, el volumen del historial, la cantidad de herramientas conectadas, la automatización del navegador y los servicios locales como PostgreSQL, Redis o una base de datos vectorial.

Escenario CPU RAM Disco Adecuado para
Mínimo 2 vCPU 2 GB 30 GB NVMe Un bot de Telegram, 1–2 usuarios, API externa del modelo
Recomendado 2–4 vCPU 4 GB 60 GB NVMe Automatización personal, varias herramientas, Caddy y cliente de backup
Equipo 4 vCPU 8 GB 100 GB NVMe Varios agentes, cola de tareas, PostgreSQL, Redis, auditoría
Ampliado 8 vCPU 16 GB+ 200 GB+ Búsqueda vectorial, navegador headless, servicios locales y muchas integraciones

Para la primera implementación en production, es razonable elegir 4 vCPU, 4 GB de RAM, 60 GB NVMe y un canal de al menos 100 Mbit/s. Esta reserva permitirá ejecutar sin problemas Docker, Caddy, OpenClaw, el planificador de copias de seguridad y varios contenedores auxiliares. Por ejemplo, puedes contratar un VPS con las características indicadas y aumentar los recursos cuando crezca la carga.

Por qué 2 GB de RAM pueden ser insuficientes

Los contenedores Docker, los procesos de Node.js, la caché del sistema Linux y Caddy consumen memoria incluso con poco tráfico. Si añades Chromium para la automatización del navegador, PostgreSQL, Redis o un servicio de embeddings, 2 GB dejarán rápidamente de ser un mínimo cómodo. Cuando falta memoria, el kernel empezará a finalizar procesos mediante OOM Killer y el bot desaparecerá periódicamente de la red.

Cuándo se necesita un servidor dedicated

Un servidor dedicated está justificado no para un solo bot de Telegram, sino cuando existe una carga elevada predecible o requisitos especiales de aislamiento. Elige un servidor dedicado si ejecutas modelos locales en CPU o GPU, almacenas un gran volumen de documentos para RAG, atiendes a decenas de usuarios activos, procesas datos internos de la empresa o quieres aislar la infraestructura de IA de otros proyectos.

Dedicated también resulta útil cuando necesitas 32–128 GB de RAM, matrices NVMe locales rápidas, GPU passthrough o un rendimiento estable sin influencia de otros usuarios de la virtualización. Para el funcionamiento habitual de OpenClaw con API de LLM en la nube, un VPS es más barato, más sencillo de mantener y normalmente totalmente suficiente.

Elección de la ubicación

  • Elige una región cercana a ti y a tu equipo si abres con frecuencia la interfaz web.
  • Ten en cuenta los requisitos legales para el almacenamiento de datos personales y laborales.
  • Comprueba la disponibilidad de la API del proveedor de IA seleccionado desde la región del VPS.
  • Para Telegram long polling es fundamental la estabilidad de la conexión saliente, no la latencia mínima.
  • Para el dominio y TLS necesitarás acceso entrante como mínimo a los puertos 80 y 443.

5. Preparación del servidor

Diagrama: 5. Preparación del servidor
Diagrama: 5. Preparación del servidor

A continuación se utiliza Ubuntu Server 24.04 LTS. En 2026 es una opción práctica para hosts Docker: el sistema recibe actualizaciones de seguridad a largo plazo, dispone de paquetes recientes y está bien documentado. Ejecute los comandos como root solo durante la configuración inicial; después trabaje con un usuario independiente.

Actualización del sistema y utilidades básicas

Conéctese al servidor mediante SSH como root, utilizando la contraseña proporcionada después de crear el VPS. Actualice inmediatamente el sistema e instale las herramientas básicas.

apt update && apt full-upgrade -y
apt install -y ca-certificates curl gnupg git jq ufw fail2ban unattended-upgrades

El primer comando instala las actualizaciones de seguridad disponibles. El segundo añade utilidades para trabajar con repositorios HTTPS, firewall, Fail2ban, Git y actualizaciones automáticas.

Creación de un usuario sin privilegios

Crearemos el usuario openclaw. Administrará Docker Compose, pero no tendrá acceso root directo sin sudo.

adduser openclaw
usermod -aG sudo openclaw
mkdir -p /home/openclaw/.ssh
chmod 700 /home/openclaw/.ssh
chown -R openclaw:openclaw /home/openclaw/.ssh

Genere una clave SSH en el equipo local si aún no tiene una. No cree la clave privada en el VPS ni la envíe mediante mensajeros.

ssh-keygen -t ed25519 -a 100 -C "openclaw-admin"

Añada el contenido del archivo local ~/.ssh/id_ed25519.pub al archivo /home/openclaw/.ssh/authorized_keys del servidor. Lo más cómodo es hacerlo mediante un comando desde el equipo local.

ssh-copy-id -i ~/.ssh/id_ed25519.pub openclaw@SERVER_IP

Compruebe el acceso en un terminal separado antes de desactivar la autenticación mediante contraseña:

ssh openclaw@SERVER_IP

Protección de SSH

Después de comprobar correctamente la clave, desactive el acceso del usuario root y la autenticación mediante contraseña. Esto reduce el riesgo de ataques de fuerza bruta por parte de bots.

sudo nano /etc/ssh/sshd_config.d/99-hardening.conf

Inserte los siguientes parámetros.

PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
X11Forwarding no
MaxAuthTries 3
AllowUsers openclaw

Compruebe la sintaxis y reinicie SSH. No cierre la sesión actual hasta confirmar el acceso en una segunda ventana del terminal.

sudo sshd -t && sudo systemctl restart ssh

Firewall y Fail2ban

Abra únicamente SSH, HTTP y HTTPS. Si utiliza un puerto SSH no estándar, sustituya 22 antes de activar UFW.

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment "SSH"
sudo ufw allow 80/tcp comment "HTTP for ACME"
sudo ufw allow 443/tcp comment "HTTPS"
sudo ufw enable
sudo ufw status verbose

Configure Fail2ban para SSH. En Ubuntu normalmente ya existe un jail básico, pero una configuración explícita hace que el comportamiento sea predecible.

sudo tee /etc/fail2ban/jail.d/sshd.local > /dev/null <<'EOF'
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h
EOF
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

Actualizaciones automáticas de seguridad

Instale automáticamente las actualizaciones de seguridad del sistema operativo, pero realice las actualizaciones de las imágenes Docker de OpenClaw de forma controlada después de crear un backup. No conviene mezclar estos procesos.

sudo dpkg-reconfigure --priority=low unattended-upgrades
sudo systemctl enable --now unattended-upgrades

6. Instalación del software — paso a paso

Diagrama: 6. Instalación del software — paso a paso
Diagrama: 6. Instalación del software — paso a paso

A continuación instalaremos Docker Engine desde el repositorio oficial de Docker, Docker Compose Plugin y crearemos la estructura de directorios. En el momento de preparar esta guía, tome como referencia Docker Engine 27 o una versión posterior y Docker Compose v2. Compruebe siempre la etiqueta actual de OpenClaw en el registro oficial de imágenes o en la página de versiones antes de actualizar en production.

Instalación de Docker Engine y Compose Plugin

Elimine los posibles paquetes antiguos de Docker del repositorio del sistema Ubuntu para evitar conflictos de versiones.

sudo apt remove -y docker.io docker-compose docker-compose-v2 podman-docker containerd runc || true

Añada la clave GPG oficial de Docker y el repositorio para Ubuntu 24.04.

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

Instale Docker Engine, CLI, containerd y Compose Plugin.

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo docker version
sudo docker compose version

Añada el usuario openclaw al grupo Docker. Tenga en cuenta que pertenecer a este grupo proporciona de facto privilegios ampliados en el servidor: el usuario puede ejecutar contenedores privilegiados. No añada otros usuarios sin necesidad.

sudo usermod -aG docker openclaw
newgrp docker
docker run --rm hello-world

Creación de la estructura del proyecto

Colocaremos todos los archivos de la aplicación en /opt/openclaw. Los Docker volumes se almacenarán por separado de la configuración de Compose, lo que simplifica el backup y la migración.

sudo mkdir -p /opt/openclaw/{caddy,data,backups}
sudo chown -R openclaw:openclaw /opt/openclaw
cd /opt/openclaw
umask 077

Compruebe que el usuario puede acceder al Docker daemon después de volver a iniciar sesión mediante SSH. Si el comando devuelve el error permission denied, cierre la sesión y vuelva a conectarse.

docker ps

Obtención del Telegram Bot Token

En Telegram, abra el bot oficial BotFather, ejecute el comando /newbot, y establezca un nombre y un username que termine en bot. BotFather proporcionará un token con un formato similar a 123456789:AA.... Guárdelo inmediatamente en un gestor de contraseñas: el token permite controlar completamente el bot.

Averigüe su Telegram ID numérico. Para ello puede utilizar temporalmente un bot de servicio verificado, su propio cliente de Telegram API o consultar la actualización entrante mediante Bot API. No utilice el username como security allowlist: el username puede cambiar. La configuración requiere exactamente el ID numérico, por ejemplo 123456789.

Preparación del dominio

Cree un registro DNS de tipo A para el subdominio, por ejemplo claw.example.com, y especifique la dirección IPv4 pública del VPS. Si utiliza IPv6, añada el registro AAAA solo después de comprobar el enrutamiento y el firewall.

dig +short A claw.example.com
curl -4 ifconfig.me

La IP del primer comando debe coincidir con la IPv4 pública de su servidor. No ejecute Caddy antes de que se propague el DNS: de lo contrario, la emisión del certificado de Let's Encrypt puede finalizar con un error de verificación del dominio.

Elección de la imagen de OpenClaw

En production no utilice la etiqueta latest sin control. Fije una etiqueta de versión verificada, por ejemplo 2026.3.0, después de compararla con la lista oficial de versiones de OpenClaw. En el ejemplo siguiente, el valor se encuentra en .env, por lo que la actualización se reduce a modificar una línea y reiniciar Compose.

cd /opt/openclaw
touch .env
chmod 600 .env
nano .env

7. Configuración de OpenClaw, Telegram y SSL

Esquema: 7. Configuración de OpenClaw, Telegram y SSL
Esquema: 7. Configuración de OpenClaw, Telegram y SSL

En esta sección crearemos un archivo de secretos, una configuración de Docker Compose, un Caddyfile y una configuración básica de OpenClaw. La arquitectura será sencilla: Caddy recibe el tráfico HTTPS en el puerto 443 y lo redirige a través de la red interna de Docker al Gateway. El propio OpenClaw no publica ningún puerto directamente en el host.

Archivo de secretos .env

Abra /opt/openclaw/.env y sustituya todos los valores de demostración. No envíe este archivo a Git, no inserte tokens en el archivo Compose ni los publique en registros o capturas de pantalla.

OPENCLAW_IMAGE=ghcr.io/openclaw/openclaw:2026.3.0
OPENCLAW_DOMAIN=claw.example.com

TELEGRAM_BOT_TOKEN=123456789:REPLACE_WITH_REAL_TOKEN
TELEGRAM_ALLOWED_USER_ID=123456789

OPENAI_API_KEY=sk-replace-with-real-key
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4.1-mini

OPENCLAW_GATEWAY_TOKEN=replace-with-a-long-random-token

Cree un token de Gateway seguro. Es un secreto adicional para las solicitudes administrativas y el acceso a la API. Utilice al menos 32 bytes aleatorios.

openssl rand -hex 32

Inserte el resultado en OPENCLAW_GATEWAY_TOKEN. Si conecta un endpoint compatible distinto de OpenAI, cambie OPENAI_BASE_URL, la clave y el identificador del modelo. No almacene la clave de API del proveedor en la configuración del agente en texto plano.

Docker Compose

Cree el archivo /opt/openclaw/compose.yml. La imagen, el formato de las variables y los comandos disponibles de OpenClaw pueden cambiar entre versiones, por lo que antes del primer inicio compare el parámetro command con la documentación de la versión fijada. A continuación se muestra una pila Gateway típica para la ejecución en contenedores.

services:
  openclaw:
    image: ${OPENCLAW_IMAGE}
    container_name: openclaw
    restart: unless-stopped
    env_file:
      - .env
    environment:
      HOME: /home/node
      OPENCLAW_CONFIG_PATH: /home/node/.openclaw/openclaw.json
      OPENCLAW_GATEWAY_BIND: 0.0.0.0
      OPENCLAW_GATEWAY_PORT: 18789
    volumes:
      - ./data:/home/node/.openclaw
      - /etc/localtime:/etc/localtime:ro
    expose:
      - "18789"
    networks:
      - internal
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    read_only: false
    tmpfs:
      - /tmp:size=256m,mode=1777
    healthcheck:
      test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:18789/health || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 40s

  caddy:
    image: caddy:2.8-alpine
    container_name: openclaw-caddy
    restart: unless-stopped
    env_file:
      - .env
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./caddy/Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config
    networks:
      - internal
    depends_on:
      openclaw:
        condition: service_started
    security_opt:
      - no-new-privileges:true

networks:
  internal:
    driver: bridge

volumes:
  caddy_data:
  caddy_config:

El parámetro cap_drop: ALL elimina las capabilities de Linux que la aplicación no necesita. El contenedor de OpenClaw no recibe privileged: true, no monta /var/run/docker.sock ni tiene acceso al directorio personal del administrador. Esto es más importante que ejecutar el agente en un contenedor «cómodo», pero excesivamente privilegiado.

Configuración de OpenClaw

Cree el directorio de configuración y el archivo openclaw.json. En algunas versiones de OpenClaw existe un comando interactivo de onboarding; puede utilizarlo para generar el archivo inicial. Sin embargo, antes de ejecutarlo, compruebe manualmente que Telegram esté habilitado, que el modo de mensajes privados esté restringido y que la lista de usuarios permitidos esté especificada explícitamente.

cd /opt/openclaw
mkdir -p data
chmod 700 data
nano data/openclaw.json
{
  "gateway": {
    "host": "0.0.0.0",
    "port": 18789,
    "auth": {
      "mode": "token",
      "token": "${OPENCLAW_GATEWAY_TOKEN}"
    }
  },
  "channels": {
    "telegram": {
      "enabled": true,
      "botToken": "${TELEGRAM_BOT_TOKEN}",
      "dmPolicy": "allowlist",
      "allowFrom": [
        "${TELEGRAM_ALLOWED_USER_ID}"
      ],
      "groupPolicy": "disabled"
    }
  },
  "models": {
    "default": {
      "provider": "openai-compatible",
      "baseUrl": "${OPENAI_BASE_URL}",
      "apiKey": "${OPENAI_API_KEY}",
      "model": "${OPENAI_MODEL}"
    }
  },
  "agents": {
    "default": {
      "workspace": "/home/node/.openclaw/workspace",
      "tools": {
        "shell": false,
        "filesystem": true,
        "http": true
      }
    }
  }
}

Los nombres de los parámetros pueden variar en una versión concreta de OpenClaw. Si su versión no admite la sustitución ${VARIABLE} dentro de JSON, no inserte secretos en el archivo: utilice el mecanismo estándar de environment variables o ejecute el onboarding oficial dentro del contenedor. Después de generar la configuración, asegúrese de que los permisos del archivo estén restringidos.

chmod 600 /opt/openclaw/data/openclaw.json
mkdir -p /opt/openclaw/data/workspace
chmod 700 /opt/openclaw/data/workspace

En la configuración inicial, la herramienta shell está desactivada. Actívela únicamente después de realizar un análisis de riesgos independiente. Un agente capaz de ejecutar comandos arbitrarios desde Telegram puede ser atacado mediante prompt injection: por ejemplo, un texto malicioso en un correo electrónico, documento o página web puede intentar inducir al modelo a ejecutar una acción peligrosa.

Configuración de HTTPS mediante Caddy

Cree el Caddyfile. Caddy solicitará y renovará automáticamente el certificado TLS de Let's Encrypt si el registro DNS es correcto y los puertos 80/443 están abiertos.

nano /opt/openclaw/caddy/Caddyfile
{
    email [email protected]
    auto_https prefer_wildcard
}

{$OPENCLAW_DOMAIN} {
    encode zstd gzip

    @health path /health
    reverse_proxy @health openclaw:18789

    reverse_proxy openclaw:18789

    header {
        -Server
        X-Content-Type-Options "nosniff"
        X-Frame-Options "DENY"
        Referrer-Policy "no-referrer"
        Strict-Transport-Security "max-age=31536000; includeSubDomains"
    }

    log {
        output stdout
        format console
    }
}

Si el Gateway no está destinado a un uso público permanente, es mejor restringir el acceso en el nivel de Caddy. Por ejemplo, permita únicamente su IP estática o cierre la interfaz administrativa mediante un túnel VPN WireGuard. El bot de Telegram seguirá funcionando, ya que long polling utiliza una conexión saliente a Telegram.

Ejemplo de IP allowlist para Caddy. Sustituya la dirección IP por su dirección externa y añada la regla antes de reverse_proxy.

@blocked not remote_ip 203.0.113.10
respond @blocked "Forbidden" 403

Primer inicio y comprobación

Compruebe la sintaxis de Compose y descargue las imágenes. El comando no debe mostrar los valores de los secretos.

cd /opt/openclaw
docker compose config -q
docker compose pull
docker compose up -d
docker compose ps

Consulte los primeros registros de OpenClaw. Si el inicio es correcto, normalmente se mostrará la inicialización del Gateway y la conexión del canal de Telegram. No publique estos registros: dependiendo de la versión, pueden contener identificadores técnicos de sesión.

docker compose logs --tail=100 openclaw
docker compose logs --tail=100 caddy

Compruebe el health endpoint localmente a través del contenedor Caddy y después desde una máquina externa mediante HTTPS.

docker exec openclaw-caddy wget -qO- http://openclaw:18789/health
curl -I https://claw.example.com/health
curl -sS https://claw.example.com/health

El resultado esperado depende de la versión: puede ser un JSON con el estado ok, el código 200 u otro documento del health endpoint. Si el endpoint requiere un token, páselo únicamente desde una sesión shell local:

curl -sS \
  -H "Authorization: Bearer $OPENCLAW_GATEWAY_TOKEN" \
  https://claw.example.com/health

Comprobación de Telegram y pairing

Abra el chat con el bot, pulse Start y envíe un mensaje sencillo: «Hola, responde con una sola frase». Si el modo pairing está activado, OpenClaw proporcionará un código de emparejamiento o creará una solicitud pendiente. Confírmela desde la consola administrativa según el mecanismo de su versión.

cd /opt/openclaw
docker compose exec openclaw openclaw doctor
docker compose exec openclaw openclaw status

Si el comando CLI tiene otro nombre, utilice la ayuda integrada del contenedor:

docker compose exec openclaw openclaw --help
docker compose exec openclaw openclaw gateway --help

No cambie Telegram al modo «permitir a todos» para realizar un diagnóstico rápido. Es mejor consultar temporalmente los registros, comprobar que el Telegram ID numérico sea correcto y repetir el intento desde una cuenta autorizada.

Activación segura de herramientas

Después del inicio básico, añada capacidades gradualmente. Primero permita únicamente la lectura desde el directorio de trabajo y solicitudes HTTP seguras a API conocidas de antemano. Para cada herramienta nueva, establezca un scope independiente, un token con los permisos mínimos y una restricción de red.

  • Para Git, utilice una deploy key con acceso únicamente a un repositorio.
  • Para GitHub o GitLab, cree un token sin permisos para eliminar proyectos ni modificar usuarios.
  • Para la base de datos, cree un usuario independiente de read-only.
  • Para las integraciones HTTP, utilice claves de API restringidas por IP, si el proveedor lo admite.
  • Para los comandos shell, utilice un contenedor sandbox independiente, una allowlist de comandos y un mount de solo lectura.
  • No permita que el agente lea .env, las claves SSH, /etc ni el Docker socket.

Si el agente realmente necesita comandos shell, ejecute la herramienta en un contenedor independiente sin root, sin secretos salientes, con límites de CPU/RAM/PID y un tiempo de espera corto. No añada acceso shell al contenedor principal del Gateway.

8. Copias de seguridad y mantenimiento

Схема: 8. Бэкапы и обслуживание
Diagrama: 8. Copias de seguridad y mantenimiento

Para OpenClaw no son críticas las imágenes de Docker, sino el estado: la configuración, las sesiones de pairing permitidas, el workspace, las bases de datos, los Caddy certificates y los secretos. La imagen se puede volver a descargar, pero sin los datos habrá que volver a conectar Telegram, restaurar la configuración de los agentes y perder el historial.

Qué se debe respaldar

  • /opt/openclaw/data — configuración, workspace, historial y estado interno de OpenClaw.
  • /opt/openclaw/compose.yml — descripción de los contenedores.
  • /opt/openclaw/caddy/Caddyfile — configuración de TLS y reverse proxy.
  • /opt/openclaw/.env — secretos, únicamente en un repositorio de backup cifrado.
  • Docker volume openclaw_caddy_data — certificados y estado de Caddy.
  • Volumes independientes de PostgreSQL, Redis o vector DB, si los añade más adelante.

No almacene la única copia del backup en el mismo VPS. Un error del administrador, la eliminación de la máquina virtual, la vulneración del acceso root o los daños en el disco destruirán tanto la aplicación como el archivo local simultáneamente. Utilice object storage compatible con S3, un VPS de backup independiente o un almacenamiento remoto con versioning.

Instalación de restic

Restic cifra las copias de seguridad en el lado del cliente antes de enviarlas al almacenamiento remoto. A continuación se muestra un ejemplo para un bucket compatible con S3. Sustituya los valores de endpoint, bucket y claves por los parámetros de su almacenamiento.

sudo apt install -y restic
sudo mkdir -p /etc/openclaw-backup
sudo chmod 700 /etc/openclaw-backup
sudo nano /etc/openclaw-backup/restic.env
sudo chmod 600 /etc/openclaw-backup/restic.env
RESTIC_REPOSITORY=s3:https://s3.example.net/openclaw-backups
RESTIC_PASSWORD=replace-with-a-long-unique-backup-password
AWS_ACCESS_KEY_ID=replace-with-access-key
AWS_SECRET_ACCESS_KEY=replace-with-secret-key
AWS_DEFAULT_REGION=us-east-1

Inicialice el repositorio una sola vez. La contraseña RESTIC_PASSWORD no debe coincidir con la contraseña del VPS ni con la clave de S3. Perder esta contraseña significa perder el acceso al backup cifrado.

sudo bash -c 'set -a; source /etc/openclaw-backup/restic.env; set +a; restic init'

Script de copia de seguridad

El script archiva temporalmente el volumen de Caddy y después envía la configuración y el archivo a restic. Para garantizar la coherencia durante un uso activo, puede detener OpenClaw durante unos segundos antes del backup o utilizar la exportación integrada de la base de datos, si una versión concreta almacena los datos en PostgreSQL.

sudo nano /usr/local/sbin/openclaw-backup.sh
sudo chmod 700 /usr/local/sbin/openclaw-backup.sh
#!/usr/bin/env bash
set -euo pipefail

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
set -a
source /etc/openclaw-backup/restic.env
set +a

STAMP=$(date +%F-%H%M%S)
WORKDIR="/opt/openclaw/backups/${STAMP}"
mkdir -p "${WORKDIR}"

cd /opt/openclaw

docker run --rm \
  -v openclaw_caddy_data:/source:ro \
  -v "${WORKDIR}":/backup \
  alpine:3.21 \
  tar czf /backup/caddy-data.tar.gz -C /source .

restic backup \
  /opt/openclaw/data \
  /opt/openclaw/compose.yml \
  /opt/openclaw/.env \
  /opt/openclaw/caddy/Caddyfile \
  "${WORKDIR}/caddy-data.tar.gz" \
  --tag openclaw

restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

rm -rf "${WORKDIR}"

Ejecute el backup manualmente y asegúrese de que aparezca la instantánea. El error de autorización de S3 debe corregirse antes de configurar cron.

sudo /usr/local/sbin/openclaw-backup.sh
sudo bash -c 'set -a; source /etc/openclaw-backup/restic.env; set +a; restic snapshots'

Programación de cron

Ejecute el backup por la noche, por ejemplo a las 03:30. Los logs se escribirán en /var/log/openclaw-backup.log.

sudo crontab -e
30 3   * /usr/local/sbin/openclaw-backup.sh >> /var/log/openclaw-backup.log 2>&1

Una vez al mes, realice una restauración de prueba en un directorio temporal independiente. Un backup que nunca se ha restaurado no puede considerarse verificado.

sudo mkdir -p /tmp/openclaw-restore-test
sudo bash -c 'set -a; source /etc/openclaw-backup/restic.env; set +a; restic restore latest --target /tmp/openclaw-restore-test'
sudo find /tmp/openclaw-restore-test -maxdepth 3 -type f | head

Actualizaciones de OpenClaw e imágenes de Docker

No actualice automáticamente el agente de production mediante la etiqueta latest. Una nueva versión puede cambiar el formato de configuración, el modelo de autorización, el conjunto de herramientas o la migración de datos. El proceso seguro es: crear un backup, leer las release notes, cambiar la etiqueta fijada, descargar la imagen, reiniciar y comprobar Telegram.

cd /opt/openclaw
sudo /usr/local/sbin/openclaw-backup.sh
nano .env
docker compose pull openclaw
docker compose up -d --no-deps openclaw
docker compose logs --tail=100 openclaw
docker compose ps

Para un solo bot, la actualización normalmente requiere un breve maintenance window: los mensajes de Telegram pueden llegar con un retraso de varios segundos mientras se reinicia el contenedor. El rolling update solo es útil con varias réplicas, una cola de tareas externa, un estado compatible y un balanceador correctamente configurado; para un OpenClaw Gateway independiente, normalmente añade complejidad sin un beneficio apreciable.

Monitorización mínima

Compruebe periódicamente el estado de los contenedores, el espacio disponible, la memoria y los últimos errores. Active alertas al menos mediante una comprobación con cron o un uptime-monitor externo para la URL /health.

cd /opt/openclaw
docker compose ps
docker stats --no-stream
df -h
free -h
docker compose logs --since=24h openclaw | grep -iE "error|fatal|panic" || true

9. Troubleshooting + FAQ

¿Por qué el bot de Telegram no responde aunque el contenedor esté en ejecución?

Primero compruebe los logs: docker compose logs --tail=200 openclaw. Las causas más frecuentes son un TELEGRAM_BOT_TOKEN incorrecto, que el bot no se haya iniciado mediante el botón Start, un Telegram ID numérico incorrecto en la allowlist o un pairing activado que aún no se ha confirmado. Asegúrese de que el VPS tenga acceso HTTPS saliente a la API de Telegram. No desactive la allowlist para realizar diagnósticos: es mejor añadir temporalmente su segundo ID y reiniciar el contenedor con el comando docker compose up -d.

¿Qué significa el error 401 o 403 al abrir el Gateway mediante el navegador?

El código 401 normalmente indica la ausencia o un valor incorrecto del token del Gateway. Compruebe que el token en .env coincida con la configuración de autorización de OpenClaw y reinicie el contenedor. El código 403 suele estar relacionado con la IP allowlist de Caddy o con la política de acceso del propio OpenClaw. Compruebe el Caddyfile, la IP externa del cliente y los logs docker compose logs caddy. No elimine la autenticación permanentemente: para comprobarlo, es mejor realizar una solicitud local con el encabezado Authorization: Bearer.

¿Por qué Caddy no obtiene el certificado SSL?

Compruebe el DNS: el comando dig +short A claw.example.com debe devolver la IP del VPS. Asegúrese de que UFW y el firewall externo del proveedor permitan los puertos TCP 80 y 443, y de que otro servidor web no esté ocupando esos puertos. Consulte los logs de Caddy: docker compose logs --tail=200 caddy. Si el dominio se encuentra detrás de un CDN, desactive temporalmente el modo proxy o utilice un DNS challenge correctamente configurado. Compruebe también que el dominio no contenga una dirección local ni un registro AAAA incorrecto.

El contenedor de OpenClaw se reinicia constantemente. ¿Qué hacer?

Empiece con docker compose logs --tail=300 openclaw y docker inspect openclaw --format '{{.State.OOMKilled}}'. Si el valor de OOMKilled es true, el servidor no tiene suficiente memoria: aumente la RAM a 4 GB o desactive herramientas pesadas, como la automatización del navegador. Otras causas son un error en la configuración JSON, un parámetro no compatible después de una actualización, una imagen no disponible o un command incorrecto. Compruebe la versión de la imagen, la documentación de la release fijada y ejecute docker compose config.

¿Qué configuración mínima de VPS es adecuada?

Para un bot personal de Telegram que utilice una API externa de un modelo de AI, bastan como mínimo 2 vCPU, 2 GB de RAM y 30 GB de NVMe. Sin embargo, para un funcionamiento estable es mejor elegir desde el principio 2–4 vCPU, 4 GB de RAM y 60 GB de NVMe: Docker, TLS, los logs, el cliente de backup y las futuras integraciones necesitarán recursos adicionales. Si se prevén PostgreSQL, Redis, browser automation o varios agentes, comience con 4 vCPU y 8 GB de RAM.

¿Qué elegir: VPS o dedicated para esta tarea?

Para OpenClaw con APIs externas de LLM, casi siempre basta con un VPS: es más barato, se crea más rápido y se escala fácilmente en CPU, RAM y disco. Un dedicated es necesario para ejecutar localmente modelos grandes, tareas con GPU, almacenar grandes índices RAG, disponer de un aislamiento estricto o soportar una carga constante de muchos usuarios. No elija un dedicated solo por el bot de Telegram: primero mida la CPU, la RAM y la I/O reales mediante docker stats y después tome una decisión basada en las métricas.

¿Se puede permitir que el agente ejecute comandos shell en el VPS?

Técnicamente es posible, pero el contenedor principal de OpenClaw no debe tener acceso shell directo al host. El modelo de AI puede equivocarse, interpretar incorrectamente una instrucción o recibir un prompt malicioso a través de un documento externo. Para las tareas shell, cree un contenedor sandbox independiente sin root, sin Docker socket, con un sistema de archivos read-only, restricciones de red, límite de tiempo y una allowlist de comandos. No le transfiera secretos de .env, claves SSH, tokens de la nube ni acceso al directorio personal del administrador.

¿Cómo añadir de forma segura un segundo usuario de Telegram?

Obtenga su Telegram ID numérico y añada el valor a la matriz allowFrom de la configuración de OpenClaw. Después del cambio, compruebe el JSON y reinicie únicamente el contenedor de la aplicación: docker compose up -d --no-deps openclaw. Para el trabajo en equipo, es mejor crear roles independientes o bots separados para distintas funciones: por ejemplo, un agente read-only para consultas y un segundo agente limitado para operaciones. No utilice chats grupales hasta configurar una política explícita de menciones, la allowlist de grupos y la protección contra prompt injection.

¿Cómo recuperarse después de una actualización fallida?

Primero devuelva la etiqueta anterior de la imagen en el archivo .env y después ejecute docker compose pull y docker compose up -d. Si la nueva versión ha modificado los datos, detenga el contenedor, guarde por separado el directorio actual /opt/openclaw/data y restaure una instantánea verificada de restic en un directorio de staging. No sobrescriba los datos de production antes de comprobar la estructura de la restauración. Después del rollback, compruebe el health endpoint, los logs del Gateway y la respuesta del bot de Telegram desde una cuenta autorizada.

10. Conclusiones y próximos pasos

Схема: 10. Выводы и следующие шаги
Diagrama: 10. Conclusiones y próximos pasos

Ahora OpenClaw se ejecuta en su VPS mediante Docker, recibe mensajes a través de Telegram, está protegido por HTTPS y limitado por una política de acceso segura. La configuración, los datos y el estado de TLS se respaldan periódicamente en un almacenamiento externo, y el Gateway no está publicado directamente sin un reverse proxy.

  1. Añada la monitorización del health endpoint y notificaciones sobre la indisponibilidad del contenedor.
  2. Conecte las herramientas una por una: primero APIs read-only y después Git o bases de datos con los permisos mínimos.
  3. Al aumentar la carga, traslade PostgreSQL, Redis, la cola de tareas o el endpoint de LLM local a contenedores o servidores independientes.

Antes de activar cualquier acción que modifique datos o infraestructura, cree un sandbox independiente, limite los tokens y pruebe los escenarios en un entorno que no sea de producción. Para los agentes de AI, la seguridad del acceso es más importante que la cantidad de herramientas conectadas.

¿Te fue útil esta guía?

Tus comentarios nos ayudan a mejorar nuestras guías.

Compartir esta publicación:

Envía esta guía a alguien a quien pueda resultarle útil.

Telegram VKVK WhatsApp Facebook LinkedIn XX

despliegue de OpenClaw en VPS: Docker, bot de Telegram, SSL y agentes de IA seguros
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.