Plano ponta a ponta de migração da infra Legacy Tech — Dash, 14 connectors, Postgres, ClickHouse, secrets, observabilidade, CI/CD e backup — pra um único servidor self-hosted, mantendo só o essencial (OpenRouter, API de imagem, Cloudflare, Resend, GitHub).
Cinco decisões definem o plano. Tudo o que vier depois é execução desse framing.
homolog → stagingstaging.devmarvibel.net. main requer aprovação.Filosofia: tudo que conseguirmos rodar na VDS, rodamos. Exceções são serviços onde substituir custaria mais que assinar.
17 categorias de serviço que hoje rodam fora ganham equivalente FOSS rodando na VDS. As poucas exceções (assinaturas mantidas) estão marcadas em verde no canto direito.
| Tier | RAM | €/mês |
|---|---|---|
| L (08/05) | 64 GB | 60–80 |
| → XL | 128 GB | 90–120 |
| → XXL | 256 GB | 150–200 |
Análise numérica baseada nas tabelas reais do arbitragem + gpc_ads, padrões de uso e perfis típicos de cada engine. Companion completo: migracao-fit-check.md.
SELECT SUM(spend)
FROM fb_reports_raw
WHERE company_id=2
AND date >= '2026-01-01'
GROUP BY site_id;
ClickHouse self-hosted já é open source Apache 2.0 — custo de licença = R$ 0. O que escala custo é hardware (RAM). Comparativo das alternativas reais:
@app.task(rate_limit='2/s') espelha as 4 queues atuais.--concurrency=20/10/10/3.
@neshca/cache-handler + Redis pub/sub obrigatório (~1 dia Berim).
google-cloud-storage → boto3/minio.gpc_common. Performance loopback > GCS.
| Volume | Upload B2 | Custo/mês |
|---|---|---|
| 500 GB | ~70 min | $3 |
| 1 TB | ~2.3 h | $6 |
| 2 TB | ~4.5 h | $12 |
| 3 TB | ~6.8 h | $18 |
| Caminho | Hoje | Pós | Δ |
|---|---|---|---|
| User BR → CDN | 5–20ms | 5–20ms | = |
| User BR → SSR | 130ms | 210ms | +80ms |
| Connector → DB | 30–50ms | ~0.1ms | −50ms |
| Connector → Meta API | 40ms | 100ms | +60ms |
homolog sai · staging entradev / feature/*localhost:3000. Trigger manual.stagingstaging.devmarvibel.net — push automático, smoke test obrigatório.maindevmarvibel.net — merge de staging com approval manual..github/workflows/deploy-staging.ymlname: Deploy staging
on:
push:
branches: [staging]
jobs:
build:
runs-on: [self-hosted, legacy, linux, x64]
steps:
- uses: actions/checkout@v4
- name: Login Harbor
run: echo $HARBOR_PASS | docker login harbor.legacy.tech -u $HARBOR_USER --password-stdin
env:
HARBOR_USER: ${{ secrets.HARBOR_USER }}
HARBOR_PASS: ${{ secrets.HARBOR_PASS }}
- name: Build + push
run: |
docker build -t harbor.legacy.tech/legacy/plenus-builder:${{ github.sha }} .
docker push harbor.legacy.tech/legacy/plenus-builder:${{ github.sha }}
- name: Deploy via Coolify webhook
run: |
curl -X POST https://coolify.legacy.tech/api/v1/deploy \
-H "Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}" \
-d '{"app":"plenus-builder-staging","tag":"${{ github.sha }}"}'
- name: Smoke test
run: |
for i in {1..20}; do
if curl -fs https://staging.devmarvibel.net/api/health; then exit 0; fi
sleep 5
done
exit 1
runner=legacystaging → main exige PR + 1 reviewenvironment: production com required reviewers (Danniel + 1)docker service update --rollback/opt/backups-local via Restic| Componente | Ferramenta | Frequência |
|---|---|---|
| Postgres | pgBackRest (incremental + full + WAL) | Incr diário · Full domingo |
| ClickHouse | clickhouse-backup → MinIO + B2 | Incr diário · Full domingo |
| Volumes Docker | Restic snapshot | Diário 03:30 |
| Infisical secrets | Export encrypted via Restic stdin | Diário |
Configs /opt /etc | Restic | Diário |
| Repos Git | — (já em GitHub.com) | — |
| Cenário | RPO | RTO | Procedimento |
|---|---|---|---|
| App fail | 0 | < 5 min | Coolify rollback (imagem anterior) |
| Postgres corruption | 5–15 min | ~30 min | Restore pgBackRest do incremental |
| ClickHouse perda total | 24h | 2–4h | clickhouse-backup restore |
| VDS perda total (DC fire) | 7 dias | 4–8h | Provisão VDS nova + restore B2 |
| Wipe Cloudflare zona | ~0 | ~1h | Re-importar zone file |
Cutover técnico em 01/06 (3 semanas de execução + 1 semana de buffer pra bugs e descobertas) · janela de validação 14 dias com antigos parados em modo low-cost · descomissionamento final em 24/06. Berim full-time + Sergio half-time + Danniel coordena.
core (Traefik + CF Companion + Tunnel) · Stack secrets (Infisical)pg_dump Cloud SQL → restore VDS (em screen) · clickhouse-backup restore (8–24h pra 1–3TB)COUNT(*) · pgBackRest + clickhouse-backup schedule ativohomolog → staging e master → maindeploy-staging.yml + deploy-prod.yml com approval gateCloud Run continua rodando até fase 6 — paralelo, não substitui
lib/ai/image-provider.ts · flip flag → encerra Vertex Imagen 3Semana de absorção de imprevistos. Não é "tempo livre" — é tempo planejado pra resolver o que apareceu nas fases 3–5 e polir antes de tocar prod.
--min-instances=0 --max-instances=0 (paga só ~R$ 50/mês storage)Câmbio referência: R$ 5,20/USD · R$ 5,50/EUR. Cenários A/B/C variam pelo GCP (foi spike de mai/26 ou novo baseline?).
| GCP | R$ 7.219/mo | R$ 86.628/ano |
| ClickHouse Cloud | R$ 3.500/mo | R$ 42.000/ano |
| Vercel | R$ 1.500/mo | R$ 18.000/ano |
| SerpAPI (cancelar) | R$ 369/mo | R$ 4.428/ano |
| TOTAL migrável | R$ 12.589/mo | R$ 151.056/ano |
| OpenRouter gateway LLM | R$ 1.957/mo | R$ 23.488/ano |
| FreePik stock visual | R$ 2.426/mo | R$ 29.115/ano |
| Claude Code | R$ 1.089/mo | R$ 13.067/ano |
| Replicate NOVO · subst. Imagen 3 | R$ 80/mo | R$ 960/ano |
| Total mantido + novo | R$ 5.572/mo | R$ 66.866/ano |
| GCP | R$ 43.716 |
| ClickHouse Cloud | R$ 42.000 |
| Vercel | R$ 18.000 |
| SerpAPI | R$ 4.428 |
| GCP | R$ 86.628 |
| ClickHouse Cloud | R$ 42.000 |
| Vercel | R$ 18.000 |
| SerpAPI | R$ 4.428 |
| GCP | R$ 220.464 |
| ClickHouse Cloud | R$ 42.000 |
| Vercel | R$ 18.000 |
| SerpAPI | R$ 4.428 |
screen)*.legacy.tech ou *.devmarvibel.net