"Funciona na minha máquina" sai caro. O objetivo de Docker + CI/CD + Coolify é reprodutibilidade: o mesmo artefato que passou nos testes chega a staging e, se tudo correr bem, a produção.
Aplica-se a APIs Laravel, apps Node, frontends modernos (incluindo Astro SSR) e, quando faz sentido, WordPress containerizado. Em projetos com checkout ou gateways, o pipeline é parte do produto.
Pipeline mínimo recomendado
- PR: lint + typecheck + testes unitários (e e2e críticos se aplicável).
- Build multi-stage: dependência → build → runtime pequeno.
- Tag imutável:
registry/app:gitsha. - Scan básico de imagem.
- Deploy em staging no Coolify com as mesmas variáveis (valores distintos).
- Smoke / healthcheck.
- Promote para produção do mesmo digest/tag.
Multi-stage (Laravel / Node)
- deps: instala Composer/npm com cache.
- build:
npm run build,php artisan optimize, assets. - runtime: imagem final com usuário não-root, sem toolchain, sem secrets.
Detalhes que evitam incidentes:
- Camadas ordenadas para não invalidar cache do Composer a cada mudança.
npm cino CI, nãonpm installsolto.- Usuário não-root + permissões em
storageebootstrap/cache.
Checklist de release no Laravel
- Imagem multi-stage com PHP-FPM ou Octane.
- Variáveis no Coolify/secrets do CI, nunca na imagem.
- Migrações como passo explícito do deploy.
- Filas e scheduler com restart policy.
- Healthcheck: rota barata que verifica app + DB.
- Rollback: redeploy da tag SHA anterior.
WordPress no Docker
- Volume persistente para
wp-content/uploads. - Secrets via env / wp-config gerado em runtime.
- Object cache (Redis) como serviço separado quando o tráfego exige.
- Multisite: cuidado com domínios, cookies e paths.
- Backups de DB + uploads antes de updates maiores.
Configuração no Coolify
- Variáveis e secrets fora do Dockerfile.
- Healthcheck real (HTTP 200, não só "o processo existe").
- Domínios: apex canônico;
wwwcom redirect 301. - SSL Let's Encrypt em ambos os hosts.
- Restart policies e logs acessíveis.
- Staging e produção separados.
Checklist pré-produção
- Tag = git SHA (não só
latest) - Secrets ausentes do repo e das camadas Docker
- Healthcheck verde em staging
- Migrações ensaiadas + backup recente
- Apex/
wwwe SSL verificados - Workers/cron vivos após o deploy
- Plano de rollback escrito
Erros comuns
- Rebuild diferente em prod e já não se sabe o que roda.
- Healthcheck que bate em
/com redirect 301 e marca unhealthy em loop. - Volumes WordPress com dono
root. - Rodar
migrate --forceduas vezes em paralelo. - Esquecer o worker de filas: a web está up mas os webhooks não são processados.
Um checkout mal deployado é uma bomba. O pipeline conecta com pagamentos e auditoria de segurança .