Pular para o conteúdo

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.

Terminal window
make deploy-tenant ENV=prod TENANT={tenant_id}

Internamente:

  1. Valida config
  2. Reingere KB se mudou
  3. Recompila system prompt
  4. 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.

Terminal window
make deploy ENV=prod

Sempre em horário de baixo movimento (definir por tenant).


Pré-deploy obrigatório

Antes de qualquer deploy em prod:

  1. Branch atualizado com main
  2. Testes locais passando
  3. Eval golden passou
  4. Code review aprovado (se time > 1 pessoa)
  5. Backup do estado atual (Hetzner Storage Box automatizado, mas confirme)

Deploy passo a passo

1. Build local

Terminal window
cd ~/triadeflow/agent-{tipo}/
make build
docker images | grep agent-{tipo}

2. Push para registry

Terminal window
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}:latest
docker push registry.triadeflow.com/agent-{tipo}

3. Deploy via SSH

Terminal window
ssh hetzner-prod << 'EOF'
cd /opt/triadeflow/agent-{tipo}
docker compose pull
docker compose up -d --no-deps --remove-orphans agent
EOF

4. Healthcheck pós-deploy

Terminal window
# Aguarda 10 segundos, verifica saúde
sleep 10
curl https://{tipo}.triadeflow.com/health
# Verifica todos os tenants ativos
for t in $(cat tenants/_active.txt); do
echo "Checking $t..."
curl -f https://{tipo}.triadeflow.com/health/$t || echo "FAILED $t"
done

5. Smoke test

Terminal window
# Envia mensagem de teste para cada tenant ativo
python scripts/smoke_test_all.py --env prod

6. 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

Terminal window
ssh hetzner-prod << 'EOF'
cd /opt/triadeflow/agent-{tipo}
docker compose pull agent:{commit_anterior}
docker compose up -d --no-deps --remove-orphans agent
EOF

Sempre 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:

Terminal window
ssh hetzner "tail -20 /var/log/triadeflow-backup.log"

Janelas de deploy recomendadas

Tipo de tenantJanela ideal
B2B (horário comercial)Sábado madrugada
B2C / saúde / belezaSegunda 4h-7h
E-commerceTerça 4h-7h
RestauranteManhã (não almoço/jantar)
24/7Quarta 3h-5h

Quando incerto, agendar com o cliente.


Versão: 1.0