Migrar de
Vercel para HeroCtl
Vercel Pro a US$20 por dev mais bandwidth mais functions vira fatura imprevisível em USD.
Vercel é insuperável pra deploy de Next.js em 30 segundos — git push e tá no ar. O preço dessa conveniência é cobrança por uso em quase tudo: US$20 por seat de Pro, bandwidth medido, function invocations medidas, image optimization medida. Aplicação que cresce esbarra em fatura mensal de US$300-800 fácil. Pior: lock-in nas primitivas Vercel KV, Postgres e Blob — você troca seu Redis e Postgres por SDKs proprietários. Migrar pra HeroCtl leva 1-3 semanas dependendo do quanto você usou de Vercel-only. Next.js roda em standalone output dentro de container, KV vira Redis, Postgres vira Postgres, Blob vira S3-compatível. Economia típica é de R$1.000-2.000/mês em USD evaporado.
Por que sair
- Custo em USD imprevisível — bandwidth, functions, KV reads cobrados por evento
- Lock-in em primitivas: Vercel KV, Postgres, Blob têm SDK proprietário
- Ataque DDoS vira boleto: cada request bloqueado contou como invocação
- Image optimization paga por transformação processada — bot que vasculha tudo dói
O que você ganha
- Custo por servidor, não por request — pico de tráfego não vira surpresa na fatura
- Redis e Postgres padrão, sem SDK proprietário travando você
- DDoS limitado pelo seu próprio rate-limit, não pelo limite do cartão de crédito
- Image optimization rodando localmente, sem markup
7 passos, sem mistério
- 01
Configurar Next.js standalone output
1 diaAdicione output: "standalone" no next.config.js. Build local pra confirmar que .next/standalone gera. Esse é o ponto de partida do Dockerfile.
- 02
Substituir Vercel KV por Redis
2-3 diasTroque @vercel/kv pelos clientes Redis padrão (ioredis ou redis). Suba um Redis no cluster destino. Migre as chaves via DUMP/RESTORE ou re-população.
- 03
Substituir Vercel Postgres
1-2 diasSe usou @vercel/postgres, migre pra pg ou Drizzle/Prisma com connection string padrão. Postgres normal no cluster.
- 04
Substituir Vercel Blob por S3-compatível
2-3 diasTroque @vercel/blob por SDK S3 (@aws-sdk/client-s3) apontando pra MinIO ou Cloudflare R2. Migre arquivos com rclone.
- 05
Estratégia de image optimization
1-2 diasnext/image precisa de optimizer. Use sharp local (já vem com Next standalone) ou aceite servir imagens não-otimizadas e use um CDN na frente.
- 06
ISR e cache de página
2 diasISR funciona em standalone mas precisa de filesystem persistente ou storage compartilhado entre réplicas. Decida: 1 réplica com volume, ou Redis-backed cache.
- 07
DNS, monitoramento e cutover
1-2 diasTTL pra 60s, valide em domínio shadow, troca de A record, monitore 4xx/5xx por 48h. Cancele Vercel só após 7 dias estáveis.
1-3 semanas pra app Next.js típica. Mais perto de 3 semanas se usou KV+Postgres+Blob; perto de 1 se foi só Next.js puro.
R$1.000 a R$2.000 por mês — R$12.000 a R$24.000 por ano.
| Vercel Pro: 4 seats × US$20 | US$80/mês ≈ R$400 |
| Bandwidth (1 TB) | US$40/mês ≈ R$200 |
| Function invocations | US$60/mês ≈ R$300 |
| KV + Postgres + Blob | US$100/mês ≈ R$500 |
| Image optimization | US$30/mês ≈ R$150 |
| Total Vercel típico | US$310/mês ≈ R$1.550 |
| Cluster destino (3 VPS 4GB) | R$240/mês |
| Economia mensal | R$1.310/mês |
Antes vs Depois
| Critério | Vercel | HeroCtl |
|---|---|---|
| Modelo de custo | Por request | Por servidor |
| Moeda | USD | BRL |
| Custo mensal típico | US$310 | R$240 |
| Pico de tráfego | Vira boleto | Absorve até saturar CPU |
| Cache key-value | Vercel KV (proprietário) | Redis padrão |
| Banco | Vercel Postgres (proprietário) | Postgres padrão |
| Blob storage | Vercel Blob (proprietário) | S3-compatível |
| Lock-in | Alto (SDKs Vercel) | Baixo (imagens Docker) |
Onde costuma doer
Edge functions usadas em middleware têm semântica diferente em standalone
Mitigação Mapeie cada middleware. Maioria roda igual em Node runtime; algumas (geo IP) precisam de header equivalente vindo do roteador.
ISR com revalidação por tag depende de cache compartilhado
Mitigação Use Redis-backed cache (next-cache-redis) ou pin a 1 réplica por enquanto e escale só com cache externo.
Bandwidth de imagens cresce sem image optimization
Mitigação CDN na frente (Cloudflare grátis) cacha imagens e absorve a diferença. Ou ative sharp + cache de disco no container.
Webhook do Stripe/etc apontava pro domínio Vercel
Mitigação Liste todos os webhooks externos antes do cutover. Atualize cada um nas primeiras horas do cutover.
Comece pelo Community
Cluster com alta disponibilidade real, gratuito permanente, sem feature gates. A migração de Vercel costuma se pagar em 1-2 ciclos de fatura.