« Ça marche sur ma machine » coûte cher. L'objectif de Docker + CI/CD + Coolify est la reproductibilité : le même artefact qui a passé les tests arrive en staging et, bien fait, en production.
S'applique aux APIs Laravel, apps Node, frontends modernes (dont Astro SSR) et, quand ça a du sens, WordPress containerisé. Sur les projets avec checkout ou passerelles, le pipeline fait partie du produit.
Pipeline minimum recommandé
- PR : lint + typecheck + tests unitaires (et e2e critiques si applicable).
- Build multi-stage : dépendances → build → runtime léger.
- Tag immuable :
registry/app:gitsha. - Scan basique d'image.
- Deploy en staging sur Coolify avec les mêmes variables (valeurs différentes).
- Smoke / healthcheck.
- Promotion en production du même digest/tag.
Multi-stage (Laravel / Node)
- deps : installe Composer/npm avec cache.
- build :
npm run build,php artisan optimize, assets. - runtime : image finale avec utilisateur non-root, sans toolchain, sans secrets.
Détails qui évitent les incidents :
- Couches ordonnées pour ne pas invalider le cache Composer à chaque changement.
npm cien CI, pas denpm installlibre.- Utilisateur non-root + permissions sur
storageetbootstrap/cache.
Checklist de release Laravel
- Image multi-stage avec PHP-FPM ou Octane.
- Variables dans Coolify/secrets CI, jamais dans l'image.
- Migrations comme étape explicite du deploy.
- Files d'attente et scheduler avec restart policy.
- Healthcheck : route légère qui vérifie app + DB.
- Rollback : redeploy du tag SHA précédent.
WordPress dans Docker
- Volume persistant pour
wp-content/uploads. - Secrets via env / wp-config généré au runtime.
- Object cache (Redis) comme service séparé quand le trafic l'exige.
- Multisite : attention aux domaines, cookies et paths.
- Backups DB + uploads avant mises à jour majeures.
Configuration Coolify
- Variables et secrets hors du Dockerfile.
- Healthcheck réel (HTTP 200, pas seulement « le processus existe »).
- Domaines : apex canonique ;
wwwavec redirect 301. - SSL Let's Encrypt sur les deux hosts.
- Restart policies et logs accessibles.
- Staging et production séparés.
Checklist pré-production
- Tag = git SHA (pas seulement
latest) - Secrets absents du repo et des couches Docker
- Healthcheck vert en staging
- Migrations répétées + backup récent
- Apex/
wwwet SSL vérifiés - Workers/cron vivants après le deploy
- Plan de rollback écrit
Erreurs courantes
- Rebuild différent en prod et on ne sait plus ce qui tourne.
- Healthcheck qui tape
/avec redirect 301 et marque unhealthy en boucle. - Volumes WordPress avec propriétaire
root. - Lancer
migrate --forcedeux fois en parallèle. - Oublier le worker de file : le web est up mais les webhooks ne sont pas traités.
Un checkout mal déployé est une bombe. Le pipeline est lié à les paiements et l'audit de sécurité .