Hosting
Runtime de VM do Docker
Etapas compartilhadas de runtime para instalações do Docker baseadas em VM, como GCP, Hetzner e provedores de VPS semelhantes.
Inclua os binários necessários na imagem
Instalar binários dentro de um contêiner em execução é uma armadilha: tudo o que for instalado em runtime será perdido ao reiniciar. Inclua na imagem, durante a compilação, todos os binários externos necessários para uma skill.
Os exemplos abaixo abrangem apenas três binários, em ordem alfabética:
gog(dogogcli) para acesso ao Gmailgoplacespara o Google Placeswaclipara o WhatsApp
Estes são exemplos, não uma lista completa. Instale quantos binários forem necessários para suas skills usando o mesmo padrão. Quando você adicionar posteriormente uma skill que exija um novo binário:
- Atualize o Dockerfile.
- Recompile a imagem.
- Reinicie os contêineres.
Exemplo de Dockerfile
FROM node:24-bookworm RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/* # Exemplo de binário 1: CLI do Gmail (gogcli — instalado como `gog`)# Copie a URL atual do artefato para Linux de 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 # Exemplo de binário 2: CLI do Google Places# Copie a URL atual do artefato para Linux de 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 # Exemplo de binário 3: CLI do WhatsApp# Copie a URL atual do artefato para Linux de 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 # Adicione mais binários abaixo usando o mesmo padrão 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"]Compile e inicie
docker compose builddocker compose up -d openclaw-gatewaySe a compilação falhar com Killed ou código de saída 137 durante pnpm install --frozen-lockfile, a VM está sem memória. Use uma classe de máquina maior antes de tentar novamente.
Verifique os binários:
docker compose exec openclaw-gateway which gogdocker compose exec openclaw-gateway which goplacesdocker compose exec openclaw-gateway which wacliSaída esperada:
/usr/local/bin/gog/usr/local/bin/goplaces/usr/local/bin/wacliVerifique se o Gateway está ativo:
docker compose logs -f openclaw-gatewaycurl -fsS http://127.0.0.1:18789/healthzUma resposta 200 de /healthz confirma que o processo do Gateway está escutando e íntegro; o HEALTHCHECK integrado à imagem consulta o mesmo endpoint.
O que persiste e onde
O OpenClaw é executado no Docker, mas o Docker não é a fonte da verdade. Todo estado de longa duração deve sobreviver a reinicializações, recompilações e reinícios da máquina.
| Componente | Localização | Mecanismo de persistência | Observações |
|---|---|---|---|
| Configuração do Gateway | /home/node/.openclaw/ |
Montagem de volume do host | Inclui openclaw.json |
| Credenciais de canal/provedor | /home/node/.openclaw/credentials/ |
Montagem de volume do host | Material de credenciais de canais e provedores |
| Perfis de autenticação do modelo | /home/node/.openclaw/agents/ |
Montagem de volume do host | agents/<agentId>/agent/auth-profiles.json (OAuth, chaves de API) |
| Arquivo legado de chave OAuth | /home/node/.config/openclaw/ |
Montagem de volume do host | Compatibilidade somente leitura para arquivos auxiliares OAuth anteriores à migração; openclaw doctor --fix os migra para auth-profiles.json |
| Configurações das skills | /home/node/.openclaw/skills/ |
Montagem de volume do host | Estado no nível da skill |
| Espaço de trabalho do agente | /home/node/.openclaw/workspace/ |
Montagem de volume do host | Código e artefatos do agente |
| Sessão do WhatsApp | /home/node/.openclaw/ |
Montagem de volume do host | Preserva o login por QR |
| Chaveiro do Gmail | /home/node/.openclaw/ |
Volume do host + senha | Requer GOG_KEYRING_PASSWORD |
| Pacotes de plugins | /home/node/.openclaw/npm, /home/node/.openclaw/git |
Montagem de volume do host | Raízes de pacotes de plugins disponíveis para download |
| Binários externos | /usr/local/bin/ |
Imagem do Docker | Devem ser incluídos durante a compilação |
| Runtime do Node | Sistema de arquivos do contêiner | Imagem do Docker | Recompilado a cada compilação da imagem |
| Pacotes do sistema operacional | Sistema de arquivos do contêiner | Imagem do Docker | Não instale em runtime |
| Contêiner do Docker | Efêmero | Reiniciável | Pode ser destruído com segurança |
Atualizações
Para atualizar o OpenClaw na VM:
git pulldocker compose builddocker compose up -d