PaaS clássico

Migrar de
Heroku para HeroCtl

Quatro anos depois do fim do free tier, ainda tem app pagando dyno caro por inércia.

Tempo: 4-6 semanas pra startup com 5-10 appsR$1.000 a R$2.500 por mês de volta no caixa.
Em novembro de 2022, a Salesforce desligou o free tier do Heroku. Quem ficou, pagou. Em abril de 2026, ainda tem startup pagando US$25-100 por dyno por aplicação porque sair "vai dar trabalho".
TL;DR

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
Plano de migração

8 passos, sem mistério

  1. 01

    Inventário de addons e variáveis

    2-3 dias

    Liste cada addon (Postgres, Redis, Papertrail, scheduler, etc), suas versões, e exporte todas as config vars de cada app via heroku config -s.

  2. 02

    Dockerizar cada aplicação

    3-5 dias por app

    Substitua o Procfile por um Dockerfile. Build local, valide que sobe e responde. Use multi-stage pra reduzir imagem.

  3. 03

    Migração do banco de dados

    1 dia por banco

    pg_dump do Postgres Heroku, restore num Postgres rodando no cluster destino. Teste integridade com COUNT por tabela e checksums.

  4. 04

    Exportação e re-encriptação de secrets

    1-2 dias

    Mover config vars pra um manifesto seguro no destino. Nada hardcoded. Rotacione qualquer credencial que tenha trafegado em logs.

  5. 05

    Provisionar cluster destino

    1 dia

    Três servidores pra alta disponibilidade real (ou um, se aceita o trade-off). Instalar HeroCtl, configurar domínio.

  6. 06

    Deploy paralelo por 30 dias

    4 semanas em paralelo

    Rode no destino com domínio interno (app.novo.dominio) enquanto Heroku continua servindo o tráfego de produção. Compare logs e métricas.

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

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

Quanto tempo no total

4-6 semanas pra startup com 5-10 apps, time de 2-3 devs em paralelo com o trabalho normal.

Quanto economiza

R$1.000 a R$2.500 por mês de volta no caixa.

Heroku: 8 dynos × US$25US$200/mês ≈ R$1.000
Heroku Postgres StandardUS$50/mês ≈ R$250
Heroku Redis + scheduler + PapertrailUS$50/mês ≈ R$250
Total Heroku típicoUS$300/mês ≈ R$1.500
Cluster de 3 VPS no destino (4GB cada)R$240/mês
Economia mensalR$1.260/mês
Economia anualR$15.120/ano

Antes vs Depois

Critério Heroku HeroCtl
Custo mensal (8 apps)US$300R$240
Moeda da faturaUSDBRL
Sistema de arquivosEfêmeroPersistente quando precisa
Custo por nova app+US$25/dynoR$0 (até saturar cluster)
Banco de dadosAddon proprietárioPostgres no cluster
LogsPapertrail (US$7+)Embutidos
Vendor lockProcfile + addonsImagens Docker padrão
Riscos e como mitigar

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.

Outras migrações: Coolify·Vercel·AWS