Faça o deploy de OpenClaw no Pethost com um clique
Um assistente de IA que vive nos seus apps de mensagens
O que acontece
- Você entra no Pethost ou cria uma conta, com uma passkey, GitHub ou Google.
- Ainda não tem máquina? Você escolhe um plano, e nós preparamos uma para você. O link espera no seu navegador até ela ficar pronta.
- Novo projeto abre no app. Você preenche o que ele pede e clica em Criar projeto: Chave de API da OpenAI (opcional), Chave de API da Anthropic (opcional).
- Em um ou dois minutos o app está no ar no próprio endereço com HTTPS. Os segredos dele são gerados ao acaso, e os dados vão para o backup noturno.
- É um projeto como qualquer outro: o compose.yaml, o .env, os logs e um terminal ficam no painel, e seu agente pode alterá-lo, fazer rollback ou restaurá-lo.
Primeiros passos
Abra o endereço e cole o token do gateway em Gateway secret: ele está em OPENCLAW_GATEWAY_TOKEN, no .env do projeto. Depois aprove o navegador uma vez no terminal do serviço openclaw: openclaw devices list e depois openclaw devices approve <requestId>. A chave de um modelo é adicionada em Settings, Models.
O que roda
O template é este compose.yaml e as variáveis que ele grava no .env do projeto. O Pethost roda o arquivo exatamente como está escrito.
services:
openclaw:
image: ghcr.io/openclaw/openclaw:2026.10.3
restart: unless-stopped
environment:
OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN}
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-}
# The gateway answers 403 until its config names the proxy's network and the
# origin the Control UI is opened from, and it has no flag or variable for
# either. So the config is written once, into the state volume, where the app
# keeps and rewrites it; then the image's own entrypoint starts the gateway.
command:
- sh
- -c
- |
set -e
cfg=/home/node/.openclaw/openclaw.json
if [ ! -s "$$cfg" ]; then
cat > "$$cfg" <<'JSON'
{
"gateway": {
"mode": "local",
"bind": "lan",
"auth": { "mode": "token" },
"trustedProxies": ["10.192.0.0/10"],
"controlUi": { "allowedOrigins": ["${CONTROL_UI_ORIGIN}"] }
}
}
JSON
chmod 600 "$$cfg"
fi
if [ -f /app/docker-entrypoint.mjs ]; then
exec node /app/docker-entrypoint.mjs node openclaw.mjs gateway --allow-unconfigured --bind lan --port 18789
fi
exec node openclaw.mjs gateway --allow-unconfigured --bind lan --port 18789
volumes:
- state:/home/node/.openclaw
- auth-keys:/home/node/.config/openclaw
# The image's own check runs every 3 minutes, so a deploy would wait that long.
healthcheck:
test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:18789/healthz').then(r=>process.exit(r.ok?0:1),()=>process.exit(1))"]
interval: 30s
timeout: 10s
retries: 3
start_period: 5m
start_interval: 5s
volumes:
state:
auth-keys: