3.1 KiB
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.envfora 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-*.shdaquele 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.