Workflow: Deploy
Como fazer deploy de tenant ou agente para produção (Hetzner). Sempre seguir esse processo — não improvisar.
Tipos de deploy
Deploy de tenant (mudança de config)
Apenas atualiza config.yaml, KB ou prompt de um tenant. Não derruba ninguém.
make deploy-tenant ENV=prod TENANT={tenant_id}Internamente:
- Valida config
- Reingere KB se mudou
- Recompila system prompt
- Hot-reload da config no agente (sem restart)
Deploy de agente (código novo)
Atualiza o código do agente. Reinicia o container, derruba conexões em curso.
make deploy ENV=prodSempre em horário de baixo movimento (definir por tenant).
Pré-deploy obrigatório
Antes de qualquer deploy em prod:
- Branch atualizado com main
- Testes locais passando
- Eval golden passou
- Code review aprovado (se time > 1 pessoa)
- Backup do estado atual (Hetzner Storage Box automatizado, mas confirme)
Deploy passo a passo
1. Build local
cd ~/triadeflow/agent-{tipo}/make builddocker images | grep agent-{tipo}2. Push para registry
docker tag agent-{tipo}:latest registry.triadeflow.com/agent-{tipo}:$(git rev-parse --short HEAD)docker tag agent-{tipo}:latest registry.triadeflow.com/agent-{tipo}:latestdocker push registry.triadeflow.com/agent-{tipo}3. Deploy via SSH
ssh hetzner-prod << 'EOF'cd /opt/triadeflow/agent-{tipo}docker compose pulldocker compose up -d --no-deps --remove-orphans agentEOF4. Healthcheck pós-deploy
# Aguarda 10 segundos, verifica saúdesleep 10curl https://{tipo}.triadeflow.com/health
# Verifica todos os tenants ativosfor t in $(cat tenants/_active.txt); do echo "Checking $t..." curl -f https://{tipo}.triadeflow.com/health/$t || echo "FAILED $t"done5. Smoke test
# Envia mensagem de teste para cada tenant ativopython scripts/smoke_test_all.py --env prod6. Monitorar 30 minutos
Abrir Langfuse e Painel de Operação:
- Latência p95
- Taxa de erro
- Custo médio
- Score LLM-as-judge
Se algo regredir > 20% em qualquer métrica, rollback imediato.
Rollback
ssh hetzner-prod << 'EOF'cd /opt/triadeflow/agent-{tipo}docker compose pull agent:{commit_anterior}docker compose up -d --no-deps --remove-orphans agentEOFSempre documente o rollback em .claude/reference/incidentes.md.
Detalhes específicos por componente
Setup inicial Hetzner
Ver 06-deploy/01-hetzner-setup.md (legado) — passos para servidor novo.
Caddy (TLS automático)
Edita /opt/triadeflow/Caddyfile no servidor:
{tipo}.triadeflow.com { reverse_proxy agent-{tipo}:8000}Recarrega: docker exec caddy caddy reload --config /etc/caddy/Caddyfile
Backup
Configurado em cron diário em /opt/triadeflow/scripts/backup.sh. Faz dump de Postgres + snapshot Qdrant + tar do /opt/triadeflow/ para Hetzner Storage Box.
Verificar última execução:
ssh hetzner "tail -20 /var/log/triadeflow-backup.log"Janelas de deploy recomendadas
| Tipo de tenant | Janela ideal |
|---|---|
| B2B (horário comercial) | Sábado madrugada |
| B2C / saúde / beleza | Segunda 4h-7h |
| E-commerce | Terça 4h-7h |
| Restaurante | Manhã (não almoço/jantar) |
| 24/7 | Quarta 3h-5h |
Quando incerto, agendar com o cliente.
Versão: 1.0