Sprint comprimido · cutover 01/06 ✓ Fit-check técnico validado

Saindo do GCP, Vercel e ClickHouse Cloud.
Indo pra uma VDS Contabo única.

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).

R$ 100–277k
Economia líquida anual · 3 cenários reais
4 semanas
Sprint + 1 semana de buffer · cutover 01/06 · final 24/06
R$ 8–23k
Custo de cada mês adiado
L → XXL
VDS growth tier · começa em L · upgrade orgânico
Sprint comprimido aprovado: aprovação amanhã (sex 08/05), contratação VDS no mesmo dia, setup base começa imediato. Cutover técnico em 01/06 (4 semanas com buffer pra bugs/atrasos), validação 14 dias com antigos parados em modo low-cost, descomissionamento final em 24/06. Origem do pico Mar/26 R$ 18.372 = BigQuery — já sanado com migração pra ClickHouse Cloud. Agora migra do CH Cloud pra self-hosted.
01 · Sumário Executivo

Decisões já fechadas

Cinco decisões definem o plano. Tudo o que vier depois é execução desse framing.

  • 1
    Escopo: só Legacy Tech
    Outras unidades de negócio operam em infra própria, fora deste plano.
  • 2
    1 VDS Contabo · growth tier (L → XL → XXL)
    Começa em VDS L (8 vCPU / 64GB / 1.6TB NVMe · ~€60–80/mês) e upgrade orgânico conforme uso real validado durante o sprint. Sem comprometer capacidade upfront.
  • 3
    Imagen 3 → API externa contratada
    Replicate Flux 1.1 Pro / Stability / OpenAI gpt-image. Self-host de imagem na VDS fica fora.
  • 4
    CI/CD: GitHub Actions self-hosted runners
    Workflows existentes preservados. Runners rodam em containers Swarm.
  • 5
    homologstaging
    Branch + URL: staging.devmarvibel.net. main requer aprovação.
Permanece contratado

Lista curta do que não migra

Filosofia: tudo que conseguirmos rodar na VDS, rodamos. Exceções são serviços onde substituir custaria mais que assinar.

✓ MANTÉM
OpenRouter
Gateway LLM com rotação de modelos
✓ MANTÉM
API de imagem
Replicate / Stability / OpenAI
✓ MANTÉM
Anthropic Claude
Claude Code, API direta
✓ MANTÉM
Resend
Outbound de email transacional
✓ MANTÉM
Cloudflare
DNS, WAF, Tunnel, Pages — free
✓ MANTÉM
GitHub
Repos + workflows + runners
Atenção sócios: 12+ serviços hoje sem visibilidade de custo (ClickHouse Cloud, Cloud SQL prod, Upstash, Sentry etc.). Antes da aprovação final, fechar gaps no inventário de custos pra ter número real.
02 · Mapeamento 1:1

Cada serviço cloud tem destino self-hosted

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.

Origem (Cloud) Destino (Self-hosted) Fase Notas
Vercel Coolify + Next.js standalone + Cloudflare CDN F5 ISR via Redis cache + on-demand revalidation
14× Cloud Run 14× Swarm services + Celery workers F4 Dual-run 7 dias nos 5 críticos antes de cortar
Cloud SQL Postgres Postgres 16 + pgBouncer + pgBackRest F2 Resolve SEC-001 🔴 (ACL 0.0.0.0/0)
ClickHouse Cloud ClickHouse 25 + 3× Keeper F2 Cluster ready desde fase 1, replica futura sem migração
Cloud Tasks (4 queues) Celery + Redis com rate_limit F4 2/s, 1/s, 0.5/s — sintaxe nativa Celery
Cloud Scheduler Ofelia (cron-in-Docker via labels) F4 Plano B: Hatchet pra durable execution
Cloud Logging Loki + Grafana Alloy F1 Retenção 31d, chunks em MinIO
Cloud Monitoring Prometheus + Grafana + Tempo F1 + node-exporter, cAdvisor, blackbox
Secret Manager Infisical (Postgres-backed) F1 Resolve SEC-003 🟡 (rotação service accounts)
GCS (3 buckets) MinIO (S3-compatible) F2 xgboost-models pode ser deletado de saída
Cloud Build GitHub Actions self-hosted runners F3 2 runners em Swarm, label legacy
Artifact Registry Harbor self-hosted (ou GHCR) F3 Harbor traz scan + SBOM + replication
Vertex AI Imagen 3 API externa (Replicate / Stability) F6 Mantém pago externo; sem GPU local
Vertex AI Gemini OpenRouter Gemini Flash F4 Mesmo modelo, gateway diferente
Upstash Redis Redis 7 self-hosted F2 Mesma config Bull queue
Sentry SaaS GlitchTip (Sentry-compatible) F1 Troca DSN, código não muda
Pusher Centrifugo (Go, JWT auth) F5 Decisão pendente: validar volume antes
03 · Topologia & Sizing

Anatomia da VDS Contabo XL

✓ Estratégia growth tier · 2026-05-07
Contabo Cloud VDS L
Tier inicial · Nuremberg DE · plano anual
  • CPU 8 vCPU EPYC dedicado
  • RAM 64 GB
  • Disco 1.6 TB NVMe
  • Rede 1 Gbps · IP fixo
  • GPU — (Replicate API externa)
  • Custo inicial ~€60–80/mês · ~R$ 4.620/ano
Por quê growth e não XXL upfront: evita comprometer capacidade não usada. Validamos sizing real durante o sprint e fazemos upgrade só quando métrica exigir. Path de upgrade Contabo é não-disruptivo (~30–60min de janela).
📈 Path de upgrade orgânico
Tier RAM €/mês
L (08/05)64 GB60–80
→ XL128 GB90–120
→ XXL256 GB150–200
Triggers Discord: RAM > 75% sustained 6h · OOM em container · CPU > 80% sustained 24h · IOPS > 80%
Plano B contingencial
Hetzner AX52
Dedicado AMD Ryzen · €60/mês · só se Contabo L estiver fora de estoque na contratação
STACKS DOCKER SWARM (single-node manager)
00-core
Traefik · CF Companion · CF Tunnel
10-secrets
Infisical + Postgres dedicado
20-data
Postgres · ClickHouse · Redis · MinIO
30-obs
LGTM · Alertmanager · GlitchTip · Kuma
40-ci
GHA Runners · Harbor (opt)
50-paas
Coolify (deploy interno)
60-app
plenus-builder · 14 connectors · Centrifugo
99-cron
Ofelia jobs
Acesso público
Cloudflare proxy on em todo CNAME. Traefik na porta 443. Apps internos via Cloudflare Tunnel — Grafana, Coolify, Infisical, Harbor, GlitchTip, Kuma, MinIO Console nunca expostos diretamente.
Hardening base
UFW restrito (22 + 80 + 443). SSH key only + IP whitelist. Fail2ban. 2FA em todo painel admin. Postgres bind interno only — resolve SEC-001 🔴.
04 · Fit-check técnico ✓ Validado

A arquitetura aguenta o workload?

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.

Compressão CH
5–15×
1–3TB raw → 200–500GB em disco
Sizing somado
~104 GB
RAM nominal · picos a 135GB
Backup full 3TB
~7 h
Janela sáb 02:00–10:00 a 1Gbps
Latência SSR BR ↑
+80 ms
CF cobre estático · dynamic absorve
PostgreSQL 16 OLTP · row-based
App state, identidade, multi-tenancy, FK rigorosa, transações ACID.
Tabelas 50+ models · users, sites, posts, ai_costs…
Volume 5–20 GB hoje · 100GB em 24m
RAM reservada 16 GB
Padrão de query WHERE id=X · JOIN 2–10 tabelas
Complemento pgBouncer transaction pooling obrigatório
ClickHouse 25 OLAP · column-based
Analytics massivo, agregações temporais, materialized views, SUM/GROUP BY em bilhões de rows.
Tabelas fb_reports_raw · gam_raw · ad_telemetry · views master
Volume 1–3 TB raw · 200–500 GB em disco
RAM reservada 32–48 GB
PRIMARY KEY (company_id, site_id, date) — já correto
Migração clickhouse-backup preserva DDL — zero refactor
Por que columnar é decisivo aqui
Caso real
SELECT SUM(spend)
FROM fb_reports_raw
WHERE company_id=2
  AND date >= '2026-01-01'
GROUP BY site_id;
×
Postgres (row): lê todas as ~30 colunas de cada row, mesmo precisando só de 4. I/O proporcional ao tamanho da row inteira.
ClickHouse (column): lê apenas 4 arquivos de coluna, cada um comprimido 5–15×. 30–100× menos I/O.
"Por que não Doris / StarRocks / DuckDB?" Decisão consciente

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:

Engine RAM 1–3TB Setup Custo migrar de CH Veredito
ClickHouse (atual)32–48 GBBaixa✓ Manter
Apache Doris24–32 GBMédia (FE+BE)4–6 semanas reescreverPOC futuro
StarRocks24–32 GBMédia (FE+BE)4–6 semanas reescreverSimilar Doris
DuckDB + Parquet/MinIO8–16 GBTrivial8+ sem✗ single-process · sem concorrência
Apache Pinot32GB+Alta (5 roles)8+ sem✗ Overkill
Apache Druid32GB+Alta (5 services)8+ sem✗ Overkill
QuestDB4–8 GBBaixa✗ Time-series puro · JOIN fraco
TimescaleDB16–24 GBBaixa6 semanas✗ Row-based · não escala 1–3TB
A conta honesta: trocar CH por Doris economiza ~16GB de RAM = ~R$ 2.250/ano. Custo: 4–6 semanas de Berim reescrevendo DDL/MV/queries/conectores. ROI negativo nos primeiros 3 anos. Decisão: manter ClickHouse + tuning de memória (LowCardinality, ZSTD, TTL).
Sizing somado · cabe na VDS XXL? ✓ ~46% de folga real
Componentes principais
  • ClickHouse48 GB
  • Postgres principal16 GB
  • Postgres Infisical/GlitchTip4 GB
  • Redis + MinIO4 GB
  • LGTM stack8 GB
Apps + CI/CD
  • 14× connectors Celery7 GB
  • Plenus-builder (2 réplicas)4 GB
  • Coolify + 2 GHA runners3 GB
  • Harbor (opcional)3 GB
  • Sistema + Docker4 GB
Resultado
Total nominal
~104 GB
Pico simultâneo
~135 GB
54% da VDS XXL contratada (192–256GB) · folga operacional confortável
Mesmo no pico simultâneo (build GHA + CH query pesada + 14 connectors) sobram ~57GB livres pra page cache e burst.
Equivalências semânticas validadas
Cloud Tasks → Celery
Decorator @app.task(rate_limit='2/s') espelha as 4 queues atuais.
Pegadinha: rate_limit é per-worker. Solução: 1 worker por queue com --concurrency=20/10/10/3.
Cloud Scheduler → Ofelia
Cron via Docker labels — 5 jobs atuais (gpc-sync, gpc-triggers, shenlong-*, post-scheduled).
✓ Equivalência funcional ok. Retry deve ficar dentro do job (já existe).
Vercel ISR → Coolify + Redis
SSR streaming, on-demand revalidation funcionam nativos. ISR multi-réplica precisa cache compartilhado.
@neshca/cache-handler + Redis pub/sub obrigatório (~1 dia Berim).
GCS → MinIO
S3 API completa. Trocar google-cloud-storageboto3/minio.
✓ ~30 linhas de código no gpc_common. Performance loopback > GCS.
Backup throughput · cabe na janela?
VolumeUpload B2Custo/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
✓ Janela sáb 02:00–10:00 absorve 3TB. Egress restore grátis via Cloudflare Bandwidth Alliance.
Latência DC EU vs hoje
CaminhoHojePósΔ
User BR → CDN5–20ms5–20ms=
User BR → SSR130ms210ms+80ms
Connector → DB30–50ms~0.1ms−50ms
Connector → Meta API40ms100ms+60ms
Net: connectors ficam mais rápidos (loopback DB), SSR perde 80ms (CF cobre estático), API outbound +60ms aceito (sync tem janela horas).
Veredito do fit-check
Passa · com 3 condições
  1. Arquitetura ClickHouse + Postgres + Redis + MinIO está correta — espelha 1:1 o que GCP+CH Cloud fazem, com mesma engine. Zero mudança de schema.
  2. VDS XXL (192–256GB) absorve sizing com ~46% de folga. Sem necessidade de tuning agressivo de RAM. Decisão fechada 2026-05-07.
  3. Latência outbound +50–80ms aceito. Reavaliar 90d pós-cutover; spawn VDS SA-East se virar issue.
04 · CI/CD & Branching

homolog sai · staging entra

Branch local
dev / feature/*
Roda em localhost:3000. Trigger manual.
Branch staging
staging
staging.devmarvibel.net — push automático, smoke test obrigatório.
Branch prod
main
devmarvibel.net — merge de staging com approval manual.
Esqueleto do workflow GHA .github/workflows/deploy-staging.yml
name: 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
Runners self-hosted
  • 2 réplicas em Swarm com label runner=legacy
  • 4 vCPU + 8GB cada
  • Cache de build em volume Docker compartilhado
  • Sysbox/rootless para isolar Docker socket
  • Nunca expostos a forks de PR público (security boundary)
Approval gate em prod
  • Merge staging → main exige PR + 1 review
  • GHA environment: production com required reviewers (Danniel + 1)
  • Smoke test obrigatório pós-deploy
  • Discord webhook anuncia deploy + autor
  • Rollback: docker service update --rollback
05 · Backup & Disaster Recovery

Estratégia 3-2-1 com teste mensal de restauração

Cópia 1 · Quente
NVMe local
/opt/backups-local via Restic
Diário 03:00 · Retenção 14 dias
Cópia 2 · Morna (opcional)
MinIO em outro VDS
Datacenter diferente · sync diário
Diário 03:30 · Retenção 14 dias
Cópia 3 · Fria (offsite)
Backblaze B2
Egress grátis via Cloudflare
Semanal sábado 02:00 · 12 semanas + 12 meses
Backup por componente
Componente Ferramenta Frequência
PostgrespgBackRest (incremental + full + WAL)Incr diário · Full domingo
ClickHouseclickhouse-backup → MinIO + B2Incr diário · Full domingo
Volumes DockerRestic snapshotDiário 03:30
Infisical secretsExport encrypted via Restic stdinDiário
Configs /opt /etcResticDiário
Repos Git— (já em GitHub.com)
RPO / RTO por cenário
Cenário RPO RTO Procedimento
App fail0< 5 minCoolify rollback (imagem anterior)
Postgres corruption5–15 min~30 minRestore pgBackRest do incremental
ClickHouse perda total24h2–4hclickhouse-backup restore
VDS perda total (DC fire)7 dias4–8hProvisão VDS nova + restore B2
Wipe Cloudflare zona~0~1hRe-importar zone file
Teste mensal de restore obrigatório — cada Postgres + ClickHouse restaurado em sandbox e validado. Trimestral simula DR completa.
06 · Cronograma ⚡ Sprint comprimido 4×

10 fases · 4 semanas migração + 2 semanas validação

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.

FASE 0 Aprovação + contratação + setup base sex 08/05 · 1 dia Danniel + Berim
  • · Manhã: apresentação aos sócios · 3 cenários ROI · aprovação cartão ****0189
  • · Tarde: contratar Contabo VDS XXL · Ubuntu 24.04 · hardening (UFW + Fail2ban + swap + user) · Docker Swarm init · DNS Cloudflare
  • · Stack core (Traefik + CF Companion + Tunnel) · Stack secrets (Infisical)
  • · Gate: Traefik responde HTTPS · Infisical UI acessível
FASE 1 Stack obs + DB + restore staging sáb-dom 09–10/05 · fim de semana Berim
  • · Sáb: Stack obs (LGTM + GlitchTip + Kuma) · Coolify · Postgres 16 + pgBouncer · ClickHouse 25 + 3× Keeper · Redis · MinIO
  • · Dom: pg_dump Cloud SQL → restore VDS (em screen) · clickhouse-backup restore (8–24h pra 1–3TB)
  • · Validação paridade COUNT(*) · pgBackRest + clickhouse-backup schedule ativo
  • · Gate: dados staging em paridade · backups schedules rodando
FASE 2 CI/CD self-hosted + rename branches seg 11/05 · 1 dia Berim + Danniel
  • · 2× GHA runners self-hosted (Swarm, label legacy) · cache em volume
  • · Rename one-shot todos repos: homolog → staging e master → main
  • · Workflows deploy-staging.yml + deploy-prod.yml com approval gate
  • · Gate: push staging deploy auto · main exige aprovação
FASE 3 Migrar 14 connectors ter–sex 12–15/05 · 4 dias Berim
TER 12/05 · DELETAR + COLD
gdelt · serpapi · rss · xgboost-trainer · predict-populate · gam-forecast (replicas 0)
TER 12/05 · AUXILIARES ATIVOS
watchdog · sync-orchestrator
QUA 13/05 · AD NETWORKS
adseleto · gam-utm-campaign · dual-run 24h
QUI–SEX · CRÍTICOS
meta-ads · activeview · gam-direct · gam-hourly · google-ads · diff < 0,5%

Cloud Run continua rodando até fase 6 — paralelo, não substitui

FASE 4 Dash + Replicate + Centrifugo seg–qui 18–21/05 · 4 dias Berim + Sergio
  • · Seg: Coolify deploy plenus-builder · cache handler Redis · staging smoke
  • · Ter: Sergio aprova provider imagem · adapter lib/ai/image-provider.ts · flip flag → encerra Vertex Imagen 3
  • · Qua: Centrifugo deploy · Dash usa real-time novo · valida WebSocket
  • · Qui: CF Load Balancer 50/50 Vercel↔Coolify · monitor 24h
  • · Gate: Dash 100% paridade · Imagen sem regressão visual
FASE 5 Pentest + go/no-go cutover sex 22/05 · 1 dia Danniel
  • · Pentest Onda D — scan ativo (porto, headers, auth, rate limit, secrets leak)
  • · Restore-test full em sandbox · RTO < 30min validado
  • · Runbook DR impresso (papel) · novos SEC-* documentados
  • · Gate: zero 🔴 abertos → libera cutover
FASE 6 Buffer · bugs, ajustes, descobertas seg–sex 25–29/05 · 1 semana Todos

Semana 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.

  • · Bugs descobertos no dual-run dos connectors · ajustes de paridade ClickHouse
  • · Tunning Postgres pós-restore (autovacuum, work_mem, pgBouncer pool em carga real)
  • · Issues cache handler ISR no Dash (race conditions multi-réplica)
  • · SEC-* descobertos no pentest Onda D (severidade 🟡/🟢 que não bloquearam o gate)
  • · Endurecer alertas Discord · ajustar dashboards Grafana
  • · Se chegar limpo: dry-run do cutover em staging · treinamento Berim/Sergio · runbook DR
  • · Gate: time confiante 100% no cutover · zero 🔴 abertos
FASE 7 Cutover prod + parking low-cost seg–sex 01–05/06 · 1 semana Todos
  • · Seg 01/06 (cutover): snapshot final Cloud SQL + CH Cloud · flip DATABASE_URL · DNS 100% Coolify · smoke
  • · Ter–Qui 02–04/06 (parking, NÃO descomissionar):
  • — Cloud Run: --min-instances=0 --max-instances=0 (paga só ~R$ 50/mês storage)
  • — Cloud SQL: tier menor (db-f1-micro) · ~R$ 200/mês
  • — ClickHouse Cloud: pause instância ou dev tier · ~R$ 200–500/mês
  • — Vercel/Upstash/Pusher: pause · ~free tier
  • · Sex 05/06: comunicação sócios · entrando janela validação 14 dias · custo extra contingência ~R$ 500–1k/mês
  • · Gate: VDS é prod · antigos como cold standby · rollback DNS pronto em 5min
FASE 8 Janela de validação + contingência seg 08/06 – sex 19/06 · 2 semanas Time monitora
  • · Operação real só na VDS · antigos como cold standby pra rollback emergencial em < 30min
  • · Monitor diário: erros (GlitchTip) · paridade dados · smoke automatizado a cada 30min
  • · Critérios pra desligar antigos: zero incidentes 14 dias · zero rollbacks · Shenlong gerou 10 dias de posts ok · pentest Onda E limpa · time confirma estabilidade
FASE 9 Descomissionamento definitivo seg 22/06 – qua 24/06 · 3 dias Todos
  • · Seg 22/06: delete 14 Cloud Run · export final Cloud SQL → B2 · delete instance · export final CH → B2 · cancel CH Cloud
  • · Ter 23/06: cancelar Vercel · Upstash · Sentry · Pusher · GCP project
  • · Qua 24/06: validar billing zerou · screenshot pra sócios · atualizar inventário · comunicação final · retrospectiva
  • · Gate final: R$ 0 GCP/Vercel/CH · operação 100% VDS · time liberado pra Dash V3, Tema, Shenlong, Vault, n8n
07 · Custos comparados Atualizado com dados reais 2026-05-06

Hoje vs depois · 3 cenários

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?).

📊 Histórico mensal · planilha EstudoVDS
Out/25 → Mai/26 (parcial)
Mês GCP CH Cloud Vercel OpenRouter Claude FreePik SerpAPI Total
Out/251.034,10550,001.806,82
Nov/25738,65550,001.512,70
Dez/25984,86550,001.757,74
Jan/261.477,291.054,882.474,93369,325.376,42
Fev/266.860,8798,491.477,291.100,002.375,42369,3212.517,75
Mar/26 ⚠18.372,571.498,962.905,341.100,002.271,53369,3226.517,72
Abr/263.643,833.904,282.447,381.969,721.100,002.584,3915.649,60
Mai/26 (parcial)3.041,35845,75984,861.565,456.437,40
🔥 Pico Mar/26 = R$ 26.517 · GCP explodiu pra R$ 18.372 (vs R$ 0 até Jan). Cause unknown — audit é prioridade.
📈 Vercel em curva · 0 → R$ 98 → R$ 1.498 → R$ 2.447 em 4 meses. Justifica saída.
💡 ClickHouse Cloud só em Abr/26 · ~R$ 3.500/mo. Confirma billing recente — investigar contratação.
SAI · Migráveis (média Jan–Abr/26)
GCPR$ 7.219/moR$ 86.628/ano
ClickHouse CloudR$ 3.500/moR$ 42.000/ano
VercelR$ 1.500/moR$ 18.000/ano
SerpAPI (cancelar)R$ 369/moR$ 4.428/ano
TOTAL migrávelR$ 12.589/moR$ 151.056/ano
FICA · Mantidos por escolha consciente
OpenRouter gateway LLMR$ 1.957/moR$ 23.488/ano
FreePik stock visualR$ 2.426/moR$ 29.115/ano
Claude CodeR$ 1.089/moR$ 13.067/ano
Replicate NOVO · subst. Imagen 3R$ 80/moR$ 960/ano
Total mantido + novoR$ 5.572/moR$ 66.866/ano
Cenário A
Otimista
GCP volta pro patamar Abr/26 · R$ 3.643/mo
GCPR$ 43.716
ClickHouse CloudR$ 42.000
VercelR$ 18.000
SerpAPIR$ 4.428
BrutoR$ 108.144
− Novo custoR$ 7.700
Economia líquida
R$ 100.444
Pay-back ~7,2 meses
−R$ 8.370/mês adiando
Cenário B
⭐ Realista · usar com sócios
Média 4 meses fechados · R$ 7.219/mo GCP
GCPR$ 86.628
ClickHouse CloudR$ 42.000
VercelR$ 18.000
SerpAPIR$ 4.428
BrutoR$ 151.056
− Novo custoR$ 7.700
Economia líquida
R$ 143.356
Pay-back ~5,0 meses
−R$ 11.946/mês adiando
Cenário C
Pessimista · GCP Mar/26 vira baseline
Mar/26 R$ 18.372 vira recorrente
GCPR$ 220.464
ClickHouse CloudR$ 42.000
VercelR$ 18.000
SerpAPIR$ 4.428
BrutoR$ 284.892
− Novo custoR$ 7.700
Economia líquida
R$ 277.192
Pay-back ~2,6 meses
−R$ 23.099/mês adiando
💸 Custo de oportunidade
Cada mês de atraso
R$ 8k–23k
jogados fora · cenários A→C
Acelerar 16 → 10–12 semanas (Berim full-time) gera R$ 32–92k extras só pelo tempo recuperado. Decisão de aceleração entra na fase 0 junto com a aprovação dos sócios. Mesmo no cenário A (mínimo garantido), a migração já paga ~R$ 100k/ano — não há cenário onde adiar compense.
SAI · Range entre cenários A→C (R$/ano)
GCP (volátil — Mar/26 foi 5× a média)−R$ 43k a 220k
ClickHouse Cloud−R$ 42.000
Vercel (curva crescente)−R$ 18.000
SerpAPI (já cancelar)−R$ 4.428
ENTRA · Pós-migração (cenário XXL recomendado)
Contabo VDS XXL (16–24 vCPU / 192–256GB / 3TB NVMe) +R$ 11.520
Replicate Flux 1.1 Pro (~348 imgs/mês × $0.04) +R$ 960
Backblaze B2 (1–3TB · CF Bandwidth Alliance) +R$ 720
Total novo custo +R$ 13.200/ano
ENTRA · Pós-migração
✓ Contabo VDS · growth tier
+R$ 4.620 → 9.900/ano
L (€60–80) → XL → XXL conforme uso
Replicate Flux 1.1 Pro
+R$ 960/ano
~348 imgs/mês × $0.04
Backblaze B2
+R$ 720/ano
1–3TB · CF Bandwidth Alliance
Total novo custo +R$ 6.300–11.580/ano
⭐ Estimativa central · Cenário B
R$ 143.356/ano
Economia líquida no cenário realista · pay-back ~5,2 meses · usar com sócios
Mínimo garantido · Cenário A
R$ 100.444/ano
Mesmo se GCP voltar pro patamar baixo · ainda economiza ~R$ 100k/ano
VDS XXL contratada · sprint comprimido aprovado (16 → 4 semanas migração + 2 semanas validação). Cada mês economizado vale R$ 8–23k.
08 · Riscos & mitigações

O que pode dar errado

Risco Prob. Impacto Mitigação
Qualidade Replicate/Stability < Imagen 3 reprovadaMMComparativo 30 imgs antes do flip · Vertex ativo até aprovação · feature flag rollback 5min
ClickHouse OOM com query pesadaBMSizing folgado (192–256GB na XXL) + alerta memory + max_memory_usage_for_user
Contabo "noisy neighbor" mata IOPS NVMeBABenchmark fio na contratação · mudança de tier ou DC se necessário
Cutover Postgres lag → dados inconsistentesBALogical replication durante dual-run · pg_dump final só no cutover · smoke paridade
Connectors quebram rate-limit (Cloud Tasks → Celery)MMDual-run 24h por connector · comparar volume ClickHouse
Rebrand homolog → staging quebra workflowsBBOne-shot script · testar em repo de menor risco primeiro
Contabo VDS XXL indisponível na janelaBMPlano B Hetzner AX52 · ou tier alternativo Contabo até XXL voltar
Pentest Onda D acha vulnerabilidade novaMMBuffer da Fase 6 (1 semana) absorve correção · cutover só após pentest limpo
Conta CF Free bate limite de Tunnels (50)BBHoje < 10 · Plano Pro $20/mês resolve
Infisical "secret zero" perdido = lock-out totalBCATASTRÓFICOMaster key em Restic offsite + cópia física em cofre
SaaS dependentes de IP whitelist (Meta BM, GAM)BMNotificar parceiros com novo IP fixo na fase 0
09 · Próximas ações

O que precisa acontecer essa semana

⚡ AMANHÃ · sex 08/05
Aprovação + Contratação + Setup base
  • Manhã: apresentação aos sócios · 3 cenários ROI
  • Tarde: contratar Contabo VDS L (tier inicial · ~€60–80/mo)
  • Provisão Ubuntu 24.04 + hardening + Docker Swarm
  • Stack core (Traefik + CF Tunnel) + Infisical up
  • Triggers Discord pra upgrade orgânico (RAM/CPU/IOPS)
  • Sergio inicia comparativo Replicate × Stability × OpenAI em paralelo
⚡ FIM DE SEMANA · 09–10/05
Stack DB + Restore Staging
  • Sáb: LGTM + Coolify + Postgres + ClickHouse + Redis + MinIO
  • Dom: pg_dump Cloud SQL → restore VDS (em screen)
  • Dom: clickhouse-backup restore (8–24h, vai virar a noite)
  • Validação paridade COUNT(*) por tabela
  • Marco seg 11/05: VDS funcional rodando staging
🚀 SEMANA 1 · 11–15/05
CI/CD + 14 connectors
  • Seg: GHA runners + rename branches
  • Ter: deletar 3 mortos + cold 3 frozen
  • Qua: ad networks com dual-run 24h
  • Qui–Sex: 5 críticos com paridade ClickHouse < 0,5%
🚀 SEMANA 2 · 18–22/05
Dash + Imagen + Pentest
  • Seg: Dash em Coolify + cache Redis
  • Ter: Replicate aprovado + flip flag
  • Qua: Centrifugo substitui Pusher
  • Qui: CF LB 50/50 dual-run
  • Sex: pentest Onda D + go/no-go
🛠 SEMANA 3 · 25–29/05
Buffer · bugs + ajustes
  • Resolver descobertas das fases 3–5
  • Tunning Postgres + ClickHouse pós-restore
  • Endurecer alertas + ajustar dashboards
  • Se chegar limpo: dry-run cutover + treinamento time
🎯 SEMANA 4 · 01–05/06
Cutover + parking low-cost
  • Seg 01/06: cutover · DNS 100% VDS · smoke
  • Antigos vão pra cold standby low-cost
  • Não descomissionar imediatamente — aguarda validação
  • Custo contingência ~R$ 500–1k/mês durante 14 dias
🛡 VALIDAÇÃO · 08–19/06
14 dias com cold standby
  • VDS é prod · antigos parados como rollback emergencial
  • Monitor diário (5xx, paridade, smoke a cada 30min)
  • Restore-test semanal · pentest Onda E
  • Critérios pra liberar fase 9 documentados
✅ FINAL · 22–24/06
Descomissionar definitivo
  • Delete Cloud Run + Cloud SQL + ClickHouse Cloud
  • Cancelar Vercel + Upstash + Sentry + Pusher
  • Cancelar GCP project · billing zerado
  • Comunicação final aos sócios + retrospectiva
Em paralelo
Validar API de imagem
  • Sergio gera 30 imagens em Replicate Flux 1.1 Pro
  • 30 imagens em Stability SD3.5 Large
  • 30 imagens em OpenAI gpt-image-1
  • Comparativo lado a lado com Imagen 3 atual
Pré-fase 0
Fechar gaps no inventário de custos
  • ClickHouse Cloud — billing real (sem visibilidade hoje)
  • Cloud SQL prod — billing real
  • Vertex AI — billing real (Imagen 3 + Gemini)
  • Upstash · Sentry · Pusher · Cloudflare
Decisões pendentes
Definir antes da fase 1
  • Coolify ou Dokploy (Berim valida 1 dia)
  • Harbor ou GHCR (começar GHCR é mais rápido)
  • Centrifugo ou manter Pusher (depende de volume real)
  • Domínio canonical: *.legacy.tech ou *.devmarvibel.net