Blog CMS
Un CMS headless livré par une chaîne CI/CD complète, du commit au serveur.
- Rôle
- Projet solo : backend NestJS, frontend Next.js, pipelines GitHub Actions, infrastructure Terraform et Ansible, supervision Prometheus et Grafana
- Année
- 2026
- Technologies
- NestJS
- Next.js
- PostgreSQL
- Docker
- GitHub Actions
- Terraform
- Ansible

Aperçu
Contexte
Projet du cours CI/CD à Ynov, réalisé seul en quelques jours. L'énoncé demandait une application conteneurisée et déployée automatiquement. J'ai pris le blog comme prétexte pour construire la chaîne entière : un backend NestJS découpé en Clean Architecture, un frontend Next.js rendu côté serveur, et surtout tout ce qui se passe entre un push et le conteneur qui tourne.
Défis
- 01
Une CI qui bloque vraiment
Six jobs tournent en parallèle : lint, analyse des quatre Dockerfiles par hadolint, audit des dépendances, scan Snyk, tests unitaires et tests d'intégration qui montent un vrai PostgreSQL et un vrai Redis via Testcontainers. Tous convergent vers un job final, seul statut requis par la protection de branche : aucune régression ne passe en silence. Husky et commitlint tiennent la même ligne avant même le push.
- 02
Du commit au serveur, sans intervention
La CD ne démarre que si la CI est verte sur main. Elle construit les images en multi-stage, les pousse sur GHCR avec un tag SHA immuable, les scanne, déploie en SSH puis lance un smoke test. Si ce test échoue, le déploiement revient tout seul sur le tag précédent, et un workflow manuel permet de rejouer n'importe quel SHA déjà publié.
- 03
Un serveur décrit, jamais configuré à la main
Terraform crée la machine, le réseau privé et le pare-feu ; Ansible l'installe et la déploie via trois rôles, et Traefik termine le TLS. Le backend expose son état de santé, avec un indicateur par dépendance, et ses métriques : Prometheus les collecte, Grafana les affiche sur un dashboard provisionné avec l'infrastructure, Alertmanager alerte. Le serveur est jetable et reconstructible depuis le dépôt.
Résultat
Une chaîne complète du commit au conteneur supervisé. Seize fichiers de tests unitaires posés au plus près des services, guards, interceptors et repositories, deux suites d'intégration sur Testcontainers et deux parcours Playwright. Trois workflows GitHub Actions, une infrastructure reproductible et huit documents techniques qui justifient les choix d'architecture.
Projet suivant