cidadao.ai-backend / docs /deployment /DEPLOYMENT_GUIDE.md
anderson-ufrj
refactor: complete repository reorganization and documentation update
92d464e
|
raw
history blame
4.62 kB

🚀 Guia de Deploy Completo - Cidadão.AI

📊 Comparação de Opções

Opção Custo Complexidade Recursos Recomendado Para
HuggingFace Spaces Grátis Fácil Limitado (sem DB/Redis) Demo/MVP
Render.com Grátis/Pago Médio Completo Produção pequena
Railway.app $5-20/mês Fácil Completo Produção média
VPS + Docker $5-40/mês Difícil Completo Controle total
Kubernetes $100+/mês Expert Escalável Produção grande

🏃 Quick Start - Deploy Completo

Opção 1: Render.com (Recomendado para começar)

  1. Crie conta no Render.com

  2. Configure o Blueprint:

    git add render.yaml
    git commit -m "Add Render deployment config"
    git push origin main
    
  3. No Render Dashboard:

    • New > Blueprint
    • Connect GitHub repo
    • Add environment variables:
      • MARITACA_API_KEY
      • GROQ_API_KEY
      • JWT_SECRET_KEY
      • SECRET_KEY

Opção 2: VPS com Docker (Mais controle)

  1. Prepare o VPS (Ubuntu 22.04):

    # No seu computador
    export VPS_HOST=user@your-vps-ip
    ./deploy.sh vps
    
  2. Configure SSL:

    ssh $VPS_HOST
    sudo certbot --nginx -d api.cidadao.ai
    
  3. Monitore:

    docker-compose -f docker-compose.production.yml logs -f
    

🔧 Configuração Completa

1. Banco de Dados PostgreSQL

-- Criar database
CREATE DATABASE cidadao;
CREATE USER cidadao WITH ENCRYPTED PASSWORD 'strong_password';
GRANT ALL PRIVILEGES ON DATABASE cidadao TO cidadao;

-- Extensões necessárias
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "pg_trgm";

2. Redis Configuration

# redis.conf
maxmemory 256mb
maxmemory-policy allkeys-lru
save 900 1
save 300 10
save 60 10000

3. Nginx Configuration

server {
    listen 80;
    server_name api.cidadao.ai;
    
    location / {
        proxy_pass http://localhost:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    
    location /ws {
        proxy_pass http://localhost:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

🔒 Segurança em Produção

  1. Firewall:

    sudo ufw allow 22/tcp
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw enable
    
  2. Backups automáticos:

    # Adicione ao crontab
    0 2 * * * pg_dump cidadao | gzip > /backups/cidadao_$(date +\%Y\%m\%d).sql.gz
    
  3. Monitoramento:

📈 Otimizações para Produção

  1. Database Indexes:

    CREATE INDEX idx_contracts_date ON contracts(created_at);
    CREATE INDEX idx_contracts_value ON contracts(value);
    CREATE INDEX idx_investigations_status ON investigations(status);
    
  2. Redis Clustering (opcional):

    # Para alta disponibilidade
    docker-compose -f docker-compose.redis-cluster.yml up -d
    
  3. CDN para Assets:

    • Configure Cloudflare
    • Cache static files

🔍 Troubleshooting

Problema: "Network is unreachable"

Solução: Configure DATABASE_URL corretamente

Problema: "Redis connection refused"

Solução: Verifique REDIS_URL e senha

Problema: "Out of memory"

Solução: Aumente limits no Docker:

deploy:
  resources:
    limits:
      memory: 2G

📊 Monitoramento

Métricas importantes:

  • API Latency P95 < 200ms
  • Error Rate < 1%
  • Cache Hit Rate > 80%
  • Database Connections < 80%

Alertas recomendados:

  • CPU > 80% por 5 minutos
  • Memory > 90%
  • Error rate > 5%
  • Database down

🚀 Checklist de Deploy

  • Variáveis de ambiente configuradas
  • Banco de dados com migrations rodadas
  • Redis funcionando
  • SSL/HTTPS configurado
  • Backups automáticos
  • Monitoramento ativo
  • Logs centralizados
  • Rate limiting configurado
  • CORS para frontend
  • Health checks passando

💡 Dicas Finais

  1. Comece pequeno: Use Render.com gratuito
  2. Escale conforme necessário: Migre para K8s quando precisar
  3. Monitore sempre: Configure alertas antes de problemas
  4. Faça backups: Automatize desde o dia 1
  5. Documente tudo: Mantenha este guia atualizado