Saltar al contenido principal
beginnerPart 1

Desplegar OpenClaw en una instancia WEC a través de Docker Compose

· 14 min de lectura
Rafael Fernandes
Ingeniero de PLN y Redactor Técnico en WiLine
Share:
OpenClaw++
0/6
🎯 Skill path0/6 earned
Self-hosting OpenClaw

Tu asistente de IA no tiene que vivir en la nube de otra persona.

Despliega un agente de IA OpenClaw autoalojado en una instancia WEC con Docker Compose — desde iniciar la VM hasta un agente que realmente responde, usando tu propia clave de API de modelo. Cada comando, versión y error a continuación fue capturado de un despliegue real en una instancia WEC.

Reproducibilidad

Traes tu propia clave de API de modelo (OpenAI en esta guía); WiLine maneja el alojamiento. Esto se reprodujo en una instancia WEC — Ubuntu 22.04.5 LTS, 8 vCPU, 15 GiB RAM, 25 GB de disco libre. Versión de OpenClaw 2026.6.8, imagen ghcr.io/openclaw/openclaw:latest.


Lo que construirás

Un único contenedor gateway de OpenClaw, configurado con tu proveedor de modelo, accesible a través de su interfaz de Control UI web y CLI.


Requisitos previos

  • Una cuenta de WiLine Edge Cloud
  • Una clave de API de modelo — esta guía utiliza OpenAI; Anthropic y modelos locales también funcionan
  • Un par de claves SSH en tu máquina (~/.ssh/id_ed25519 o similar)
  • Aproximadamente 20 minutos

Paso 1 — Provisión de la VM en WiLine

Inicia una VM de WiLine que cumpla con estos requisitos:

RequisitoValor
SOUbuntu 22.04 LTS (o 24.04 LTS)
Cómputo≥ 2 vCPU / 4 GB RAM — OpenClaw necesita ≥ 2 GB; la primera ejecución puede ser OOM-killed (salida 137) en hosts de 1 GB
Disco30 GB NVMe — 10 GB se llena rápido una vez que las imágenes de Docker y los registros se almacenan
AccesoTu clave pública SSH añadida en el momento del despliegue, para que puedas iniciar sesión sin contraseña

La guía del portal ya está documentada — sigue estos pasos y vuelve:

Una vez que esté en funcionamiento, inicia sesión por SSH:

ssh ubuntu@<tu-ip-vm>

Paso 2 — Verifica la máquina

Antes de instalar cualquier cosa, confirma con qué estás trabajando — la versión del SO y los recursos disponibles. Toma nota de estos números; son útiles cuando compares el rendimiento o abras un ticket de soporte.

lsb_release -a
nproc
free -h
df -h /

En nuestra instancia WEC: Ubuntu 22.04.5 LTS, 8 vCPU, ~15 GiB RAM, 25 GB de disco libre.

Terminal mostrando la versión del SO, CPU, RAM y disco


Paso 3 — Instalar Docker + Compose

Verifica si Docker ya está presente:

docker --version
docker compose version

Si no está instalado, sigue la guía oficial de Docker para tu distribución — Instalar Docker Engine en Ubuntu. El camino más rápido es el script de conveniencia de Docker, seguido de añadir tu usuario al grupo docker para que puedas ejecutarlo sin sudo:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

Necesitas Docker Compose v2 (el subcomando docker compose, no el binario legado docker-compose).

nota

Si Docker ya está presente, el script get.docker.com lo detecta y advierte en lugar de reinstalar — no lo fuerces en una máquina con contenedores en ejecución. En una VM limpia se instala desde cero. Este despliegue se realizó en un host donde Docker 29.1.3 / Compose v5.0.2 ya estaba instalado.

docker --version y salida de docker compose version


Paso 4 — Obtener el archivo Compose

Crea un directorio de proyecto y descarga el docker-compose.yml oficial de OpenClaw:

mkdir openclaw && cd openclaw
curl -fsSL https://raw.githubusercontent.com/openclaw/openclaw/main/docker-compose.yml -o docker-compose.yml

El archivo define dos servicios — openclaw-gateway (el gateway de agente de larga duración) y openclaw-cli (una CLI de un solo uso que comparte la red del gateway). Por defecto, se construye desde el código fuente; en su lugar, lo apuntaremos a la imagen preconstruida.


Paso 5 — Configurar .env

Crea un .env junto al archivo compose. Fija la imagen preconstruida y establece un token de panel:

OPENCLAW_IMAGE=ghcr.io/openclaw/openclaw:latest
OPENCLAW_GATEWAY_TOKEN=<pega la salida de: openssl rand -hex 32>
Mantén .env fuera de git

Contiene tu token de gateway (y cualquier clave). Agrégalo a .gitignore. En su lugar, compromete un .env.example con valores de marcador de posición.

Descarga la imagen:

docker compose pull

docker compose pull completando con la línea Pulled


Paso 6 — Precrear el directorio de configuración

OpenClaw monta ~/.openclaw en el contenedor. Créalo como tu propio usuario primero — de lo contrario, Docker lo crea como root y el contenedor (que se ejecuta como usuario node, uid 1000) no puede escribir en él:

mkdir -p ~/.openclaw ~/.openclaw-auth-profile-secrets

Si omites esto, recibirás un error de permisos en la primera ejecución — consulta Solución de problemas.


Paso 7 — Incorporación

Aquí es donde traes tu propio modelo — la incorporación solicita tu proveedor y clave de API. Esta guía utiliza OpenAI, pero Anthropic y modelos locales funcionan de la misma manera.

Ejecuta la incorporación de OpenClaw a través del contenedor gateway. Es interactivo — solicita tu proveedor y clave de API y escribe la configuración:

docker compose run --rm --no-deps --entrypoint node openclaw-gateway \
dist/index.js onboard --mode local --no-install-daemon

Sigue los pasos:

  • Continúa más allá del aviso de seguridad de uso personal →
  • Modo de configuraciónQuickStart
  • ProveedorOpenAI (o tu proveedor), luego pega tu clave de API
  • Modelo predeterminado → mantén el sugerido (openai/gpt-5.5)
  • Canal → busca skipSaltar por ahora (los canales de mensajería son una guía posterior)
  • Habilidades / HooksNo / Saltar por ahora (configura más tarde con openclaw configure)
  • Incubar tu agenteIncubar más tarde (iniciaremos el gateway como un servicio a continuación)

Termina con Incorporación completa.

Incorporación — seleccionando el proveedor OpenAI

Incorporación — &quot;Modelo configurado: openai/gpt-5.5&quot;


Paso 8 — Aplicar la configuración del gateway y comenzar

La incorporación escribió tu proveedor y modelo. Ahora establece las opciones de tiempo de ejecución del gateway — modo de ejecución, enlace de red y los orígenes de Control UI que aceptará — y luego inícialo como un servicio en segundo plano.

docker compose run --rm --no-deps --entrypoint node openclaw-gateway \
dist/index.js config set --batch-json '[{"path":"gateway.mode","value":"local"},{"path":"gateway.bind","value":"lan"},{"path":"gateway.controlUi.allowedOrigins","value":["http://localhost:18789","http://127.0.0.1:18789"]}]'

docker compose up -d openclaw-gateway

docker compose up -d creando el contenedor gateway


Paso 9 — Verificación de salud

Salud del contenedor:

docker compose ps

Quieres Up ... (healthy). Luego accede al endpoint de salud:

curl http://127.0.0.1:18789/healthz
# {"ok":true,"status":"live"}

docker compose ps saludable y la respuesta JSON de healthz

Confirma que tu clave de proveedor es utilizable:

docker compose run --rm openclaw-cli models status
# openai ... api_key=1 ... status=usable
Redactar antes de capturar pantalla

models status imprime un prefijo de clave enmascarado (sk-proj-…). Recorta o difumina antes de publicar la captura de pantalla.

Ahora la verdadera prueba de extremo a extremo. El comando agent necesita un objetivo, así que lista los agentes primero, luego envía un mensaje al predeterminado (main):

docker compose run --rm openclaw-cli agents list
# - main (predeterminado)

docker compose run --rm openclaw-cli agent --agent main \
--message "Responde con exactamente una palabra: funcionando"
# funcionando

Si responde funcionando, toda la cadena — gateway → OpenAI → respuesta — está activa.

El agente respondiendo &quot;funcionando&quot; — la prueba

La Control UI está en http://<tu-ip-instancia>:18789/; pega tu OPENCLAW_GATEWAY_TOKEN en Configuración para iniciar sesión.

Abrirlo desde otra máquina

Los navegadores bloquean la Control UI a través de HTTP simple en una IP remota ("Se requiere contexto de navegador seguro"). Accede a ella a través de un túnel SSH para que se cargue como 127.0.0.1 — consulta Solución de problemas #3.

Interfaz de Control de OpenClaw en el navegador, iniciada sesión


Solución de problemas (errores reales)

Estos son errores que realmente encontramos durante este despliegue — no hipotéticos.

1. EACCES: permiso denegado, mkdir '/home/node/.openclaw/state'

Ocurrió en la primera ejecución de incorporación cuando ~/.openclaw no existía previamente:

[openclaw] El comando CLI falló.
[openclaw] Razón: Falló al abrir la base de datos de estado del plugin.
| EACCES: permiso denegado, mkdir '/home/node/.openclaw/state' | EACCES

Causa: Docker creó automáticamente la fuente de montaje vinculada ~/.openclaw propiedad de root (0:0). El contenedor se ejecuta como usuario node (uid 1000), por lo que no puede escribir dentro de ese directorio de propiedad de root.

Solución: da el directorio al uid 1000 (que también es tu usuario ubuntu):

sudo chown -R 1000:1000 ~/.openclaw

Precrear el directorio tú mismo (Paso 6) evita esto por completo.

Error de permisos EACCES en la terminal

2. No se seleccionó sesión de destino

La primera vez que ejecutamos agent sin especificar a quién hablar:

Error: No se seleccionó sesión de destino. Usa --agent <id>, --session-key <key>,
--session-id <id>, o --to <E.164>. Ejecuta openclaw agents list para ver agentes.

Causa: openclaw agent ejecuta un turno contra un agente/sesión específica; sin un canal configurado no hay un objetivo implícito.

Solución: lista los agentes y pasa el id explícitamente:

docker compose run --rm openclaw-cli agents list # muestra: main (predeterminado)
docker compose run --rm openclaw-cli agent --agent main --message "..."

El error &quot;No se seleccionó sesión de destino&quot;

3. Control UI: "Se requiere contexto de navegador seguro"

Abrir la Control UI desde otra máquina (por ejemplo, macOS) en la IP de la VM a través de HTTP simple, la página se niega a conectar:

Se requiere contexto de navegador seguro
Esta página se está ejecutando a través de HTTP simple, por lo que el navegador no puede crear la
identidad del dispositivo que espera el Gateway.

Causa: los navegadores solo exponen las API criptográficas que OpenClaw necesita en un contexto seguro — HTTPS, o localhost/127.0.0.1. Un http://<ip>:18789 remoto no es ninguno de los dos, por lo que está bloqueado en el navegador, independientemente de la bandera del lado del servidor gateway.controlUi.allowInsecureAuth.

Solución: tunela el puerto a través de SSH para que el navegador hable con 127.0.0.1 (un contexto seguro). En tu máquina local:

ssh -L 18789:127.0.0.1:18789 ubuntu@<tu-ip-vm>

Luego abre http://127.0.0.1:18789/#token=<tu-token> localmente. La solución adecuada a largo plazo es HTTPS a través de un proxy inverso — la próxima guía.

El mensaje rojo &quot;Se requiere contexto de navegador seguro&quot; en la Control UI


Notas de seguridad

Al iniciar, el gateway registró advertencias que vale la pena actuar antes de cualquier exposición pública:

  • Vinculando a una dirección no de bucle invertido — el gateway escucha en la LAN. No expongas el puerto 18789 a Internet público sin autenticación delante de él.
  • gateway.controlUi.allowInsecureAuth=true — marcado como peligroso. Ejecuta docker compose run --rm openclaw-cli security audit.
  • plugins.allow está vacío — los plugins no empaquetados (por ejemplo, codex) pueden cargarse automáticamente. Establece una lista de permitidos explícita de ids de plugins de confianza.

Endurecer esto detrás de un proxy inverso con HTTPS es el tema de la próxima guía.

Habilidad desbloqueada 🏅

Ahora puedes desplegar y operar tu propio agente de IA en una máquina que controlas.


Lo que has logrado

Pasaste de una instancia WEC vacía a un agente de IA autoalojado en funcionamiento:

  • Provisionaste y verificaste una VM de Ubuntu en WEC
  • Levantaste el gateway de OpenClaw con Docker Compose y la imagen preconstruida oficial
  • Conectaste tu propio proveedor de modelo (OpenAI) y confirmaste que funciona de extremo a extremo — el agente respondió a través de la CLI y la Control UI
  • Encontraste (y solucionaste) los problemas reales de permisos, sesión y contexto seguro en el camino

El agente es tuyo: tu clave, tu máquina, tus datos. A partir de aquí se trata de hacerlo seguro, accesible y útil.


¿Qué puedes hacer con él?

OpenClaw no es un chatbot — es un agente autónomo que puede actuar en tu máquina. Ahora que está en funcionamiento, aquí hay lo que desbloquea (algunas funciones necesitan configuración adicional, y cubrimos las más importantes más adelante en esta serie):

  • Ejecutar trabajo real en la máquina. Puede ejecutar comandos de shell y leer/escribir archivos — "ver qué está usando el disco," "seguir los registros y resumir los errores" — con sandboxing configurable sobre cuánto le permites tocar.
  • Hablar con él desde tu teléfono. OpenClaw se conecta a WhatsApp, Telegram, Discord, Slack, Signal e iMessage, por lo que delegas tareas conversacionalmente sin SSH. (Conectamos Telegram en la próxima guía.)
  • Navegar y actuar en la web. La automatización de navegador incorporada le permite navegar por sitios, llenar formularios y extraer datos de forma autónoma.
  • Escribir y ejecutar código. Se integra con Claude Code para codificación autónoma — escribiendo y modificando código, ejecutando pruebas e incluso abriendo PRs.
  • Trabajar en segundo plano, proactivamente. Se ejecuta 24/7, puede ejecutar tareas en segundo plano, y realiza chequeos de "latido" en lugar de solo reaccionar cuando le envías un mensaje.
  • Crecer contigo. Una biblioteca de habilidades comunitarias (ClawHub), herramientas autoescritas y orquestación de múltiples agentes significan que se vuelve más capaz con el tiempo — respaldado por una memoria persistente que lleva contexto a través de conversaciones.

Usos reales típicos que la gente realiza: gestión de bandejas de entrada y calendarios, procesamiento de documentos, tareas de infraestructura en la máquina, tuberías de contenido y pruebas de código autónomas.


Finished this tutorial?
Mark it complete to earn Deploy your own AI assistant on your skill path.

¿Qué sigue?

Esta es Parte 1 de la serie Autoalojamiento de OpenClaw sobre cómo ejecutar infraestructura de IA de calidad de producción en una instancia WEC. Próximamente:

Los archivos complementarios para esta guía — docker-compose.yml y .env.example — se encuentran en el repositorio de manifiestos de WiLine (enlace que vendrá con el repositorio).


Desmontaje

docker compose down # detener + eliminar contenedores
docker compose down --rmi all -v # también eliminar la imagen y volúmenes

Para eliminar la configuración/estado en el host: rm -rf ~/.openclaw ~/.openclaw-auth-profile-secrets. Para detener la facturación por completo, elimina la VM desde el portal de WiLine.

Comments & questions

Hit an error, spotted a typo, or have a question? Leave a note below.