Files
Deploy-Automatico/README.md
T

3.1 KiB

🚀 Deploy-Automático — Modelo GitOps (Gitea + Multi-VPS)

Repositório de referência/exemplo da nossa automação de deploy contínuo baseada em Gitea Webhooks + listener na VPS de build + Docker na VPS de produção.

⚠️ Importante: todos os scripts aqui são exemplos sanitizados. Tokens, secrets, senhas de banco, JWT e IPs sensíveis foram substituídos por placeholders (<...>). Nunca commite segredos reais — use variáveis de ambiente / arquivos .env fora do Git.


🗺️ Arquitetura (papéis dos servidores)

Servidor IP (VPN) Função
VPS 1 — App 10.99.0.1 Execução em produção (containers Docker)
VPS 3 — Data/Git 10.99.0.3 Gitea + PostgreSQL
VPS 4 — Builder 10.99.0.4 Desenvolvimento, build e disparo do deploy
Dev (VPS4) ──git push──► Gitea (VPS3) ──webhook──► listener (VPS4:porta)
                                                        │
                                                        ▼
                                              deploy-*.sh (VPS4)
                                                        │
                                   ┌────────────────────┴────────────────────┐
                                   ▼                                          ▼
                      [Modelo A] build na VPS4 +                 [Modelo B] rsync do fonte +
                      rsync de artefatos → VPS1                  build na VPS1 (docker compose
                      → docker compose restart                   up -d --build)

📦 O que tem aqui

.
├── webhook-listener/
│   ├── listener.js                 # Listener genérico do webhook do Gitea (parametrizável por ENV)
│   ├── webhook-listener.service    # Unit systemd de exemplo
│   └── config.example.env          # Variáveis de ambiente do listener
├── scripts/
│   ├── deploy-prod-builder.sh      # Modelo A: build na VPS4 → envia artefato → VPS1 restart
│   ├── deploy-to-prod.sh           # Promoção manual Staging(VPS4) → Produção(VPS1)
│   └── deploy-prod-onhost.sh       # Modelo B: rsync do fonte → build na VPS1
└── docs/
    ├── 01-arquitetura-vps.md
    ├── 02-fluxo-gitops.md
    ├── 03-configurar-webhook-gitea.md
    └── 04-seguranca-deploy.md

🔑 Conceitos-chave da automação

  • Um listener por projeto, cada um numa porta própria (ex.: 9000, 9002, 9003), apontando para o deploy-*.sh daquele projeto.
  • O listener valida um token, tem trava de concorrência, ignora commits de bump de versão (chore(deploy): bump version) para evitar loop de CI, e reporta o status do commit ao Gitea.
  • GitOps: o script de deploy roda git fetch && git reset --hard origin/main — a fonte de verdade é sempre o Gitea, nunca arquivos soltos na VPS de build.

Veja docs/ para o passo a passo completo.