Hosting
Entorno de ejecución de máquina virtual Docker
Pasos de ejecución compartidos para instalaciones de Docker basadas en máquinas virtuales, como GCP, Hetzner y proveedores de VPS similares.
Incluir los binarios necesarios en la imagen
Instalar binarios dentro de un contenedor en ejecución es una trampa: todo lo instalado durante la ejecución se pierde al reiniciar. Incluye en la imagen, durante la compilación, todos los binarios externos que necesite una skill.
Los siguientes ejemplos abarcan únicamente tres binarios, en orden alfabético:
gog(degogcli) para acceder a Gmailgoplacespara Google Placeswaclipara WhatsApp
Son ejemplos, no una lista completa. Instala tantos binarios como necesiten tus skills siguiendo el mismo patrón. Cuando posteriormente añadas una skill que necesite un binario nuevo:
- Actualiza el Dockerfile.
- Vuelve a compilar la imagen.
- Reinicia los contenedores.
Dockerfile de ejemplo
FROM node:24-bookworm RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/* # Binario de ejemplo 1: CLI de Gmail (gogcli; se instala como `gog`)# Copia la URL actual del recurso para Linux desde https://github.com/steipete/gogcli/releasesRUN curl -L https://github.com/steipete/gogcli/releases/latest/download/gogcli_linux_amd64.tar.gz \ | tar -xzO gog > /usr/local/bin/gog; \ chmod +x /usr/local/bin/gog # Binario de ejemplo 2: CLI de Google Places# Copia la URL actual del recurso para Linux desde https://github.com/steipete/goplaces/releasesRUN curl -L https://github.com/steipete/goplaces/releases/latest/download/goplaces_linux_amd64.tar.gz \ | tar -xzO goplaces > /usr/local/bin/goplaces; \ chmod +x /usr/local/bin/goplaces # Binario de ejemplo 3: CLI de WhatsApp# Copia la URL actual del recurso para Linux desde https://github.com/steipete/wacli/releasesRUN curl -L https://github.com/steipete/wacli/releases/latest/download/wacli-linux-amd64.tar.gz \ | tar -xzO wacli > /usr/local/bin/wacli; \ chmod +x /usr/local/bin/wacli # Añade más binarios a continuación siguiendo el mismo patrón WORKDIR /appCOPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./COPY ui/package.json ./ui/package.jsonCOPY scripts ./scripts RUN corepack enableRUN pnpm install --frozen-lockfile COPY . .RUN pnpm buildRUN pnpm ui:installRUN pnpm ui:build ENV NODE_ENV=production CMD ["node","dist/index.js"]Compilar e iniciar
docker compose builddocker compose up -d openclaw-gatewaySi la compilación falla con Killed o con el código de salida 137 durante pnpm install --frozen-lockfile, la máquina virtual se ha quedado sin memoria. Utiliza una clase de máquina más grande antes de volver a intentarlo.
Comprueba los binarios:
docker compose exec openclaw-gateway which gogdocker compose exec openclaw-gateway which goplacesdocker compose exec openclaw-gateway which wacliSalida esperada:
/usr/local/bin/gog/usr/local/bin/goplaces/usr/local/bin/wacliComprueba que el Gateway esté en funcionamiento:
docker compose logs -f openclaw-gatewaycurl -fsS http://127.0.0.1:18789/healthzQue /healthz devuelva una respuesta 200 confirma que el proceso del Gateway está escuchando y funciona correctamente; la instrucción HEALTHCHECK integrada en la imagen consulta el mismo endpoint.
Qué se conserva y dónde
OpenClaw se ejecuta en Docker, pero Docker no es la fuente de verdad. Todo el estado de larga duración debe sobrevivir a reinicios, recompilaciones y reinicios del sistema.
| Componente | Ubicación | Mecanismo de persistencia | Notas |
|---|---|---|---|
| Configuración del Gateway | /home/node/.openclaw/ |
Montaje de volumen del host | Incluye openclaw.json |
| Credenciales de canal/proveedor | /home/node/.openclaw/credentials/ |
Montaje de volumen del host | Material de credenciales de canales y proveedores |
| Perfiles de autenticación del modelo | /home/node/.openclaw/agents/ |
Montaje de volumen del host | agents/<agentId>/agent/auth-profiles.json (OAuth, claves de API) |
| Archivo heredado de claves OAuth | /home/node/.config/openclaw/ |
Montaje de volumen del host | Compatibilidad de solo lectura con archivos auxiliares OAuth anteriores a la migración; openclaw doctor --fix los migra a auth-profiles.json |
| Configuraciones de skills | /home/node/.openclaw/skills/ |
Montaje de volumen del host | Estado de cada skill |
| Espacio de trabajo del agente | /home/node/.openclaw/workspace/ |
Montaje de volumen del host | Código y artefactos del agente |
| Sesión de WhatsApp | /home/node/.openclaw/ |
Montaje de volumen del host | Conserva el inicio de sesión mediante QR |
| Llavero de Gmail | /home/node/.openclaw/ |
Volumen del host + contraseña | Requiere GOG_KEYRING_PASSWORD |
| Paquetes de Plugins | /home/node/.openclaw/npm, /home/node/.openclaw/git |
Montaje de volumen del host | Raíces descargables de paquetes de Plugins |
| Binarios externos | /usr/local/bin/ |
Imagen de Docker | Deben incluirse durante la compilación |
| Entorno de ejecución de Node | Sistema de archivos del contenedor | Imagen de Docker | Se reconstruye con cada compilación de la imagen |
| Paquetes del sistema operativo | Sistema de archivos del contenedor | Imagen de Docker | No los instales durante la ejecución |
| Contenedor de Docker | Efímero | Reiniciable | Se puede destruir de forma segura |
Actualizaciones
Para actualizar OpenClaw en la máquina virtual:
git pulldocker compose builddocker compose up -d