Deployment¶
Containers¶
Cada projeto roda em seu próprio container em docker compose.
Normalmente 2 serviços:
<projeto>-chatbot— FastAPI + LangGraph + integrações<projeto>-postgres— PostgreSQL local
Um proxy reverso (nginx / Caddy / Traefik) expõe HTTPS.
Volumes¶
pgdata— dados do Postgres. Backup obrigatório.
Rede¶
# docker-compose.yml
services:
chatbot:
image: ...
depends_on:
- postgres
networks: [default]
postgres:
image: postgres:16
networks: [default]
Em prod, não expor o Postgres para fora — apenas a porta do chatbot
(:8000).
Variáveis de ambiente¶
Tudo em .env local do servidor. Nunca em secrets embutidos. Mínimo:
OPENAI_API_KEY=...
GEMINI_API_KEY=...
WTS_API_TOKEN=...
WTS_CHANNEL_ID=...
WTS_DEPARTMENT_HUMAN_ID=...
DATABASE_URL=postgresql://user:pass@postgres:5432/<projeto>
OTIMUS_API_URL=https://<clinica>.otimusclinic.com[:porta]
OTIMUS_TOKEN=...
ALLOWED_INSTANCE=+55...
ALLOWED_TEAM=IA ATENDIMENTOS
MESSAGE_DEBOUNCE_SECONDS=2
Processo de deploy¶
git pullno servidor.docker compose build chatbot.docker compose up -d chatbot(recria só o container do chatbot).- Verificar
/health: - Enviar mensagem de teste do número de QA.
Rollback¶
git checkout <sha-anterior> && docker compose up -d --build chatbot.
O Postgres mantém estado — rollback de código não perde histórico de chat.
Reverse proxy (Caddy)¶
medcenter.agentproia.com {
reverse_proxy localhost:8000
}
clinfeto.agentproia.com {
reverse_proxy localhost:8001
}
OTIDOC.agentproia.com {
root * /var/www/otidoc
file_server
}
Publicar esta documentação OTIDOC¶
# Na máquina de dev
cd /home/DOCKER/OTIDOC
pip install -r requirements.txt
mkdocs build
# Copiar para o servidor
rsync -av ./site/ user@server:/var/www/otidoc/
Ou usar GitHub Actions para deploy automático em push para main.
Monitoramento¶
- Health check
GET /healtha cada 30s (uptime-kuma / pingdom). - Logs:
docker logs -f <projeto>-chatbotna máquina. - Postgres: queries em
dashboard_errors(ver Telemetria).
Backup¶
Cron diário:
pg_dump -h localhost -U user <projeto> | gzip > /backup/<projeto>-$(date +%F).sql.gz
find /backup -mtime +30 -delete
Arquivar em S3 semanal.
Escala¶
Até ~5 clínicas grandes em paralelo cabem em uma VM de 4 vCPU / 8 GB. Para além disso:
- Subir em VM separada por cliente.
- Migrar Postgres para RDS / Cloud SQL.
- Considerar fila externa (Redis) se debounce ficar ruim.