Deploy Pontifex IA
Guia para deploy do Pontifex IA com Chatwoot em producao.
Arquitetura
┌──────────────────────────────────────────────────────────────────┐
│ VPS (72.61.39.175) │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Chatwoot │ │ Pontifex │ │ PostgreSQL │ │
│ │ (Rails) │──│ IA │ │ (chatwoot_postgres)│ │
│ │ :3000 │ │ :8000 │ │ :5432 │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
│ │ │ │ │
│ │ ┌──────┴──────┐ │ │
│ │ │ Pontifex │ │ │
│ │ │ Docs │ │ │
│ │ │ (Nginx) │ │ │
│ │ └─────────────┘ │ │
│ │ │ │
│ └────────────┬────────────────────────┘ │
│ │ │
│ ┌───────┴───────┐ │
│ │ Redis │ │
│ │ :6379 │ │
│ └───────────────┘ │
└──────────────────────────────────────────────────────────────────┘
Pre-requisitos
- VPS com Docker e Docker Compose
- Acesso SSH configurado
- Chave de API da OpenAI
- Repositorio configurado no GitHub
Deploy Manual
1. Clonar Repositorio
ssh root@72.61.39.175
cd /root
git clone https://github.com/infraifd-creator/pontifex-ia.git
cd pontifex-ia
2. Criar Volumes Externos
docker volume create chatwoot_postgres
docker volume create chatwoot_redis
docker volume create chatwoot_storage
3. Configurar Credenciais
mkdir -p .secrets
cat > .secrets/credentials.toml << 'EOF'
[openai]
api_key = "sk-proj-SUA-CHAVE-OPENAI"
[chatwoot]
api_url = "http://chatwoot-rails:3000"
api_token = "SEU_TOKEN"
account_id = 1
inbox_id = 1
EOF
chmod 600 .secrets/credentials.toml
4. Criar Redes Docker
docker network create pontifex-network 2>/dev/null || true
docker network create outside 2>/dev/null || true
5. Inicializar Banco de Dados
# Subir apenas postgres e redis
docker compose -f docker-compose.production.yml up -d postgres redis
# Aguardar postgres ficar healthy
sleep 15
# Inicializar Chatwoot (apenas primeira vez)
docker compose -f docker-compose.production.yml run --rm rails \
bundle exec rails db:chatwoot_prepare
6. Subir Todos os Servicos
7. Verificar Status
# Status dos containers
docker ps --format 'table {{.Names}}\t{{.Status}}'
# Health checks
curl http://localhost:8000/health
curl -s -o /dev/null -w '%{http_code}' http://localhost:3000/
docker ps --format '{{.Names}}' | grep pontifex-docs
Deploy via GitHub Actions
O deploy automatico e acionado a cada push na branch main.
Secrets Necessarios
Configure em Settings > Secrets > Actions:
| Secret | Descricao |
|---|---|
SSH_PRIVATE_KEY |
Chave SSH privada para acesso ao VPS |
VPS_HOST |
IP do VPS (ex: 72.61.39.175) |
VPS_USER |
Usuario SSH (ex: root) |
DEPLOY_REPO_PAT |
Personal Access Token do GitHub |
CREDENTIALS_TOML |
Conteudo completo do credentials.toml |
Fluxo do Deploy
- Push na branch
main - GitHub Action conecta via SSH
- Cria backup do banco
- Atualiza repositorio (
git pull) - Injeta credentials.toml
- Rebuild das imagens
pontifex-apiepontifex-docs - Restart dos containers
- Verifica health checks (API, Chatwoot, Docs)
Verificar Deploy
Apos o push, verifique em Actions no GitHub.
Logs no VPS:
docker logs pontifex-api --tail 50
docker logs chatwoot-rails --tail 50
docker logs pontifex-docs --tail 50
Persistencia de Dados
Os dados do Chatwoot sao persistidos em volumes externos:
| Volume | Conteudo |
|---|---|
chatwoot_postgres |
Banco de dados (usuarios, conversas, etc) |
chatwoot_redis |
Cache e filas |
chatwoot_storage |
Arquivos anexados |
Comandos Seguros
# SEGURO: reinicia sem perder dados
docker compose -f docker-compose.production.yml down
docker compose -f docker-compose.production.yml up -d
# SEGURO: rebuild da imagem
docker compose -f docker-compose.production.yml up -d --build
# PERIGOSO: remove volumes (PERDE DADOS!)
docker compose -f docker-compose.production.yml down -v # NAO FAZER!
docker volume rm chatwoot_postgres # NAO FAZER!
Backups
Backup Automatico
Cada deploy cria backup em /root/backups/:
Backup Manual
# Backup completo
docker exec chatwoot-postgres pg_dump -U postgres chatwoot > \
/root/backups/chatwoot_$(date +%Y%m%d_%H%M%S).sql
# Verificar tamanho
ls -lh /root/backups/
Restaurar Backup
# Parar servicos que usam o banco
docker compose -f docker-compose.production.yml stop rails sidekiq pontifex-api
# Restaurar
cat /root/backups/chatwoot_20260129.sql | \
docker exec -i chatwoot-postgres psql -U postgres chatwoot
# Reiniciar servicos
docker compose -f docker-compose.production.yml up -d
Atualizacoes
Atualizar Pontifex IA (API + Docs)
cd /root/pontifex-ia
git pull origin main
docker compose -f docker-compose.production.yml build --no-cache pontifex-api pontifex-docs
docker compose -f docker-compose.production.yml up -d pontifex-api pontifex-docs
Atualizar Chatwoot
docker compose -f docker-compose.production.yml pull rails sidekiq
docker compose -f docker-compose.production.yml up -d rails sidekiq
# Rodar migrations se necessario
docker compose -f docker-compose.production.yml exec rails \
bundle exec rails db:migrate
Monitoramento
Logs
# Todos os servicos
docker compose -f docker-compose.production.yml logs -f
# Apenas Pontifex API
docker logs pontifex-api -f
# Apenas Chatwoot
docker logs chatwoot-rails -f
# Apenas Documentacao
docker logs pontifex-docs -f
# Ultimas N linhas
docker logs pontifex-api --tail 100
Recursos
Verificar Saude
# Pontifex API
curl http://localhost:8000/health
# Chatwoot (retorna 302)
curl -s -o /dev/null -w '%{http_code}' http://localhost:3000/
# Documentacao
docker ps --format '{{.Names}}' | grep pontifex-docs
# Postgres
docker exec chatwoot-postgres pg_isready -U postgres
# Redis
docker exec chatwoot-redis redis-cli -a Primavera22@ ping
Troubleshooting
Container nao inicia
# Ver logs de erro
docker logs CONTAINER_NAME
# Verificar configuracao
docker compose -f docker-compose.production.yml config
Chatwoot: "relation does not exist"
O banco nao foi inicializado:
docker compose -f docker-compose.production.yml run --rm rails \
bundle exec rails db:chatwoot_prepare
Pontifex: erro de conexao
- Verificar se Chatwoot esta rodando
- Verificar credentials.toml
- Testar conectividade:
Webhook nao recebido
- Verificar URL no inbox API do Chatwoot
- Verificar logs do Pontifex:
Dados perdidos apos restart
Verificar se volumes existem:
Se nao existirem, foram deletados acidentalmente.
Checklist de Deploy
Primeiro Deploy
- [ ] VPS acessivel via SSH
- [ ] Docker e Docker Compose instalados
- [ ] Repositorio clonado
- [ ] Volumes externos criados
- [ ] Redes Docker criadas
- [ ] credentials.toml configurado
- [ ] Banco inicializado (db:chatwoot_prepare)
- [ ] Containers rodando
- [ ] Health checks passando
- [ ] Conta admin criada no Chatwoot
- [ ] API inbox criado
- [ ] Webhook configurado
- [ ] Teste de mensagem funcionando
Deploy Subsequente
- [ ] Git pull executado
- [ ] Backup criado automaticamente
- [ ] Containers reiniciados
- [ ] Health checks passando
- [ ] Dados preservados