64 lines
3.1 KiB
Markdown
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.
|