"Funciona en mi máquina" sale caro. El objetivo de Docker + CI/CD + Coolify es la reproducibilidad: el mismo artefacto que pasó tests llega a staging y, si todo va bien, a producción.
Aplica a APIs Laravel, apps Node, frontends modernos (incluido Astro SSR) y, cuando tiene sentido, WordPress containerizado. En proyectos con checkout o pasarelas, el pipeline es parte del producto.
Pipeline mínimo recomendado
- PR: lint + typecheck + tests unitarios (y e2e críticos si aplica).
- Build multi-stage: dependencia → build → runtime pequeño.
- Tag inmutable:
registry/app:gitsha. - Scan básico de imagen.
- Deploy a staging en Coolify con las mismas variables (valores distintos).
- Smoke / healthcheck.
- Promote a producción del mismo digest/tag.
Multi-stage (Laravel / Node)
- deps: instala Composer/npm con caché.
- build:
npm run build,php artisan optimize, assets. - runtime: imagen final con usuario no-root, sin toolchain, sin secretos.
Detalles que evitan incidentes:
- Capas ordenadas para no invalidar caché de Composer en cada cambio.
npm cien CI, nonpm installsuelto.- Usuario no-root + permisos en
storageybootstrap/cache.
Checklist de release en Laravel
- Imagen multi-stage con PHP-FPM u Octane.
- Variables en Coolify/secrets del CI, nunca en la imagen.
- Migraciones como paso explícito del deploy.
- Colas y scheduler con restart policy.
- Healthcheck: ruta barata que verifique app + DB.
- Rollback: redeploy del tag SHA anterior.
WordPress en Docker
- Volumen persistente para
wp-content/uploads. - Secretos vía env / wp-config generado en runtime.
- Object cache (Redis) como servicio aparte cuando el tráfico lo pide.
- Multisite: cuidado con dominios, cookies y paths.
- Backups de DB + uploads antes de updates mayores.
Configuración en Coolify
- Variables y secrets fuera del Dockerfile.
- Healthcheck real (HTTP 200, no solo "el proceso existe").
- Dominios: apex canónico;
wwwcon redirect 301. - SSL Let's Encrypt en ambos hosts.
- Restart policies y logs accesibles.
- Staging y producción separados.
Checklist pre-producción
- Tag = git SHA (no solo
latest) - Secrets ausentes del repo y de capas Docker
- Healthcheck verde en staging
- Migraciones ensayadas + backup reciente
- Apex/
wwwy SSL verificados - Workers/cron vivos después del deploy
- Plan de rollback escrito
Errores comunes
- Rebuild distinto en prod y ya no se sabe qué corre.
- Healthcheck que pega a
/con redirect 301 y marca unhealthy en loop. - Volúmenes de WordPress con dueño
root. - Correr
migrate --forcedos veces en paralelo. - Olvidar el worker de colas: la web está up pero los webhooks no se procesan.
Un checkout mal desplegado es una bomba. El pipeline conecta con pagos y auditoría de seguridad .