Files
Deploy-Automatico/README.md
T

64 lines
3.1 KiB
Markdown

# 🚀 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.