Migrar de
Heroku para HeroCtl
Quatro anos depois do fim do free tier, ainda tem app pagando dyno caro por inércia.
Heroku continua sendo o PaaS de referência conceitual — git push, build automático, addons clicáveis. Só que o preço escalou: US$25 por dyno básico, e os addons (Postgres, Redis, scheduler) cobram à parte. Uma startup com 5-10 apps facilmente paga US$200-500 por mês — em dólar, com câmbio que ninguém previu. A migração pra HeroCtl leva 4-6 semanas pra um time pequeno e devolve esse custo em 1-2 meses. Você não precisa reescrever nada: o que estava num Procfile vira um manifesto de 50 linhas. Os addons viram serviços que você roda no mesmo cluster, pagando uma vez pelo servidor inteiro em vez de por linha do menu Heroku.
Por que sair
- US$25 por dyno × N apps em receita BRL — câmbio dói todo mês
- Addons (Postgres, Redis, scheduler) cobrados à parte e escalam separado
- Vendor-lock sutil: dynos efêmeros, sistema de arquivos read-only, addons proprietários
- Build slug de 500MB virou parede silenciosa em apps maiores
O que você ganha
- Pagamento por servidor, não por aplicação — adicione apps sem inflar a fatura
- Banco e cache rodando no mesmo cluster, sem markup de addon
- Sem dyno efêmero: filesystem persistente quando você precisar
- Operação em reais, custo previsível, sem surpresa cambial
8 passos, sem mistério
- 01
Inventário de addons e variáveis
2-3 diasListe cada addon (Postgres, Redis, Papertrail, scheduler, etc), suas versões, e exporte todas as config vars de cada app via heroku config -s.
- 02
Dockerizar cada aplicação
3-5 dias por appSubstitua o Procfile por um Dockerfile. Build local, valide que sobe e responde. Use multi-stage pra reduzir imagem.
- 03
Migração do banco de dados
1 dia por bancopg_dump do Postgres Heroku, restore num Postgres rodando no cluster destino. Teste integridade com COUNT por tabela e checksums.
- 04
Exportação e re-encriptação de secrets
1-2 diasMover config vars pra um manifesto seguro no destino. Nada hardcoded. Rotacione qualquer credencial que tenha trafegado em logs.
- 05
Provisionar cluster destino
1 diaTrês servidores pra alta disponibilidade real (ou um, se aceita o trade-off). Instalar HeroCtl, configurar domínio.
- 06
Deploy paralelo por 30 dias
4 semanas em paraleloRode no destino com domínio interno (app.novo.dominio) enquanto Heroku continua servindo o tráfego de produção. Compare logs e métricas.
- 07
Cutover de DNS
1 dia (+ janela de monitoramento)Reduza TTL pra 60s na semana antes. No dia, troque os registros A. Monitore erro 4xx/5xx por 24h. Reverta se passar de 1%.
- 08
Decommission do Heroku
1 dia (após período de carência)Aguarde 7 dias após cutover sem incidente. Faça backup final. Cancele apps e addons. Confirme cobrança zerada no próximo ciclo.
4-6 semanas pra startup com 5-10 apps, time de 2-3 devs em paralelo com o trabalho normal.
R$1.000 a R$2.500 por mês de volta no caixa.
| Heroku: 8 dynos × US$25 | US$200/mês ≈ R$1.000 |
| Heroku Postgres Standard | US$50/mês ≈ R$250 |
| Heroku Redis + scheduler + Papertrail | US$50/mês ≈ R$250 |
| Total Heroku típico | US$300/mês ≈ R$1.500 |
| Cluster de 3 VPS no destino (4GB cada) | R$240/mês |
| Economia mensal | R$1.260/mês |
| Economia anual | R$15.120/ano |
Antes vs Depois
| Critério | Heroku | HeroCtl |
|---|---|---|
| Custo mensal (8 apps) | US$300 | R$240 |
| Moeda da fatura | USD | BRL |
| Sistema de arquivos | Efêmero | Persistente quando precisa |
| Custo por nova app | +US$25/dyno | R$0 (até saturar cluster) |
| Banco de dados | Addon proprietário | Postgres no cluster |
| Logs | Papertrail (US$7+) | Embutidos |
| Vendor lock | Procfile + addons | Imagens Docker padrão |
Onde costuma doer
Banco grande (>50 GB) demora pra fazer dump/restore
Mitigação Use replicação lógica do Postgres pra sincronizar incrementalmente. Cutover final é só promover a réplica.
Aplicação depende de feature Heroku-only (review apps, pipeline)
Mitigação Mapeie cada feature antes do código mexer. Review apps viram ambientes preview por branch no destino. Pipeline vira deploy promovido entre staging→prod.
Cron jobs do scheduler perdem horário no cutover
Mitigação Documente cada job e seu cron. Pause ambos os lados nas últimas 6h. Re-ative só no destino.
Time pequeno e migração compete com roadmap
Mitigação Aloque 1 dev dedicado por 2 sprints. Sem multitarefa: a economia paga o tempo dele em 2 meses.
Comece pelo Community
Cluster com alta disponibilidade real, gratuito permanente, sem feature gates. A migração de Heroku costuma se pagar em 1-2 ciclos de fatura.