Pular para conteúdo

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

docker compose -f docker-compose.production.yml up -d

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

  1. Push na branch main
  2. GitHub Action conecta via SSH
  3. Cria backup do banco
  4. Atualiza repositorio (git pull)
  5. Injeta credentials.toml
  6. Rebuild das imagens pontifex-api e pontifex-docs
  7. Restart dos containers
  8. 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/:

ls -la /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

# Uso de CPU/memoria
docker stats

# Espaco em disco
df -h
docker system df

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

  1. Verificar se Chatwoot esta rodando
  2. Verificar credentials.toml
  3. Testar conectividade:
docker exec pontifex-api curl -s http://chatwoot-rails:3000/

Webhook nao recebido

  1. Verificar URL no inbox API do Chatwoot
  2. Verificar logs do Pontifex:
docker logs pontifex-api | grep webhook

Dados perdidos apos restart

Verificar se volumes existem:

docker volume ls | grep chatwoot

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