Pular para conteúdo

Deploy

Infraestrutura

  • Servidor: VPS em 62.146.228.253
  • Reverse proxy: Traefik com auto-SSL (Let's Encrypt)
  • Banco de dados: Neon PostgreSQL (externo, gerenciado)
  • Containers: 4 serviços via Docker Compose

Serviços Docker

Serviço Imagem Porta Domínio
api projects/api_service/Dockerfile 8000 api.viacorretor.com.br
web projects/web_service/Dockerfile 8080 app.viacorretor.com.br
broker-web apps/broker-web/Dockerfile 3000 viacorretor.com.br, www.viacorretor.com.br
nocodb nocodb/nocodb:latest 8080 admin.viacorretor.com.br

Todos os serviços usam a rede externa proxy (gerenciada pelo Traefik).


CI/CD Pipeline

Push/PR → main
    ↓
CI (ci.yml):
  ├─ python-unit: ruff + mypy + pytest test/components/
  ├─ python-e2e:  pytest test/bases/ (Playwright)
  ├─ broker-web:  pnpm lint + build + E2E
  └─ docs:        mkdocs build --strict

CI passa? → Deploy (deploy.yml):
  ├─ deploy:      SSH → git pull → docker compose up --build -d
  └─ deploy-docs: mkdocs gh-deploy → GitHub Pages

Variáveis de ambiente necessárias em produção

Configure no arquivo .env do servidor (em DEPLOY_REPO_PATH/.env):

# Banco
DATABASE_URL=postgresql+asyncpg://user:pass@ep-xxx.neon.tech/neondb?sslmode=require

# LLM
OPENROUTER_API_KEY=sk-or-...
OPENROUTER_MODEL=google/gemini-2.0-flash-001

# Auth
JWT_SECRET=string-longa-e-aleatoria
DEV_LOGIN=false

# Next.js (passadas como ARGs no build)
NEXT_PUBLIC_API_URL=https://api.viacorretor.com.br
NEXT_PUBLIC_ROOT_DOMAIN=viacorretor.com.br
NEXT_PUBLIC_SITE_URL=https://viacorretor.com.br

# Deploy
DEPLOY_HOST=62.146.228.253
DEPLOY_USER=root
DEPLOY_SSH_KEY=<chave privada>
DEPLOY_REPO_PATH=/opt/galgal

Secrets no GitHub Actions

Configure em Settings → Secrets and variables → Actions:

Secret Descrição
DEPLOY_HOST IP do servidor
DEPLOY_USER Usuário SSH
DEPLOY_SSH_KEY Chave privada SSH
DEPLOY_REPO_PATH Caminho do repo no servidor
OPENROUTER_API_KEY Para testes E2E com LLM real

Deploy manual

# No servidor
cd /opt/galgal
git pull origin master
docker compose up --build -d

# Health check
curl -sf https://api.viacorretor.com.br/docs && echo "API OK"
curl -sf https://viacorretor.com.br && echo "Broker-web OK"

Cron scraper (pendente)

Adicionar ao crontab do servidor:

# Roda às 3h diariamente
0 3 * * * cd /opt/galgal && docker compose exec api python scripts/run_scraper.py --source zap --city Jundiai --limit 100

Documentação

Esta documentação é um 5º serviço Docker (docs). O Dockerfile em projects/docs_service/Dockerfile faz um multi-stage build:

  1. Python 3.13 slim instala mkdocs + mkdocstrings e gera o site estático (mkdocs build --strict)
  2. nginx:alpine serve os arquivos em /usr/share/nginx/html

O container é reconstruído automaticamente pelo docker compose up --build -d em cada deploy.

O Dockerfile fica em docker/docs.Dockerfile (fora de projects/ para não conflitar com o workspace uv).

URL: docs.viacorretor.com.br (Traefik + Let's Encrypt automático)