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.
Incorporar 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. Incorpore en la imagen, durante la compilación, todos los binarios externos que necesite una skill.
Los siguientes ejemplos abarcan solo tres binarios, en orden alfabético:
gog(degogcli) para acceder a Gmailgoplacespara Google Placeswaclipara WhatsApp
Son ejemplos, no una lista completa. Instale tantos binarios como necesiten sus skills siguiendo el mismo patrón. Cuando posteriormente añada una skill que necesite un binario nuevo:
- Actualice el Dockerfile.
- Vuelva a compilar la imagen.
- Reinicie 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`)# Copie 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# Copie 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# Copie 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ñada 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. Use una clase de máquina más grande antes de volver a intentarlo.
Verifique 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/wacliVerifique que el Gateway esté activo:
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; el HEALTHCHECK integrado en la imagen consulta el mismo endpoint.
Qué persiste 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 canales/proveedores | /home/node/.openclaw/credentials/ |
Montaje de volumen del host | Material de credenciales de canales y proveedores |
| Perfiles de autenticación de modelos | /home/node/.openclaw/agents/ |
Montaje de volumen del host | agents/<agentId>/agent/auth-profiles.json (OAuth, claves de API) |
| Archivo de claves OAuth heredado | /home/node/.config/openclaw/ |
Montaje de volumen del host | Compatibilidad de solo lectura para archivos auxiliares de 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 a nivel de 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 de paquetes de plugins descargables |
| Binarios externos | /usr/local/bin/ |
Imagen de Docker | Deben incorporarse durante la compilación |
| Entorno de ejecución de Node | Sistema de archivos del contenedor | Imagen de Docker | Se reconstruye en cada compilación de la imagen |
| Paquetes del sistema operativo | Sistema de archivos del contenedor | Imagen de Docker | No los instale 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