TP — Déploiement CI/CD d'une application Laravel 🚀⚓︎
Informations⚓︎
| Durée | 3h |
| Prérequis | Avoir suivi les TPs Docker précédents |
| Repo de départ | Forker le repo lyceesaintsauveur/laravel-todo |
| URL de votre app | http://todo-VOTRE_PRENOM.srv-debian.local |
Étape 1 — Forker le projet 🍴⚓︎
- Connectez-vous à GitHub avec votre compte
- Allez sur
https://github.com/lyceesaintsauveur/laravel-todo - Cliquez sur Fork en haut à droite
- Sélectionnez votre compte personnel comme destination
- Clonez votre fork en local :
git clone https://github.com/VOTRE_USER/laravel-todo.git
cd laravel-todo
Étape 2 — Créer un compte Docker Hub 🐳⚓︎
- Rendez-vous sur hub.docker.com
- Créez un compte gratuit
- Créez un Access Token :
- Avatar → Account Settings → Security → New Access Token
- Description :
github-actions - Permissions : Read & Write
- Copiez le token — il ne s'affiche qu'une fois !
Étape 3 — Configurer les secrets GitHub 🔐⚓︎
Dans votre repo GitHub → Settings → Secrets and variables → Actions → New repository secret :
| Nom du secret | Valeur |
|---|---|
DOCKERHUB_USERNAME |
Votre identifiant Docker Hub |
DOCKERHUB_TOKEN |
Le token généré à l'étape 2 |
Étape 4 — Adapter les fichiers de configuration ✏️⚓︎
4.1 Le fichier ci-cd.yml⚓︎
Dans .github/workflows/ci-cd.yml, repérez les lignes avec sofaugeras et remplacez par votre identifiant Docker Hub :
tags: |
${{ secrets.DOCKERHUB_USERNAME }}/todo-laravel:latest
${{ secrets.DOCKERHUB_USERNAME }}/todo-laravel:${{ github.sha }}
Ces lignes utilisent déjà le secret — rien à modifier ici.
Vérifiez que le job deploy contient bien :
deploy:
runs-on: self-hosted
4.2 Le fichier .env.ci⚓︎
Vérifiez que le fichier .env.ci à la racine du projet contient les bonnes valeurs pour la CI :
APP_ENV=testing
APP_DEBUG=false
CACHE_DRIVER=array
SESSION_DRIVER=array
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=todo_test
DB_USERNAME=laravel_test
DB_PASSWORD=secret
Étape 5 — Préparer le serveur 🖥️⚓︎
Cette étape est réalisée par le professeur
Le professeur a déjà configuré sur srv-debian :
- Le dossier
/opt/todo-VOTRE_PRENOM/avec le fichier.env.prod - La config Nginx qui redirige
todo-VOTRE_PRENOM.srv-debian.local→ votre port - Le runner GitHub Actions de l'organisation
lyceesaintsauveur
Vérifiez avec le professeur que votre dossier est prêt avant de continuer.
Étape 6 — Premier déploiement 🚀⚓︎
Commitez et poussez vos modifications sur la branche main :
git add .
git commit -m "feat: configuration CI/CD initiale"
git push origin main
Rendez-vous dans l'onglet Actions de votre repo GitHub. Vous devriez voir le pipeline démarrer avec deux jobs :
CI — Build & Tests → CD — Docker build & Deploy
Surveiller le pipeline⚓︎
- Job CI (~3 min) : installe les dépendances, lance les tests PHPUnit
- Job CD (~3 min) : build l'image Docker, la pousse sur Docker Hub, déploie sur srv-debian
Pipeline vert ✅
Si les deux jobs affichent une coche verte, votre application est déployée !
Pipeline rouge ❌
Lisez le message d'erreur dans le job concerné. Les erreurs les plus fréquentes :
- CI échoue → un test PHPUnit ne passe pas, vérifiez votre code
- CD échoue sur Docker Hub → vérifiez vos secrets
DOCKERHUB_USERNAMEetDOCKERHUB_TOKEN - CD échoue sur le deploy → contactez le professeur
Étape 7 — Tester l'application 🌐⚓︎
Depuis un navigateur sur le réseau du lycée :
http://todo-VOTRE_PRENOM.srv-debian.local
Vous devriez être redirigé vers la page de connexion de l'application Todo.
Créez un compte via Register et testez les fonctionnalités.
Étape 8 — Modifier et redéployer 🔄⚓︎
Faites une modification dans le code — par exemple changez le titre de la page d'accueil dans resources/views/home.blade.php.
Commitez et poussez :
git add .
git commit -m "feat: modification du titre"
git push origin main
Observez le pipeline se déclencher automatiquement dans l'onglet Actions. Dans 5 à 6 minutes, votre modification sera visible sur http://todo-VOTRE_PRENOM.srv-debian.local.
Questions de synthèse ❓⚓︎
Répondez par écrit dans un fichier REPONSES.md à la racine de votre repo :
- Quelle est la différence entre le job
CIet le jobCD? - Pourquoi le job
deployutiliseruns-on: self-hostedet nonruns-on: ubuntu-latest? - Pourquoi le fichier
.env.prodn'est-il pas dans le repo GitHub ? - Que se passe-t-il si un test PHPUnit échoue ? L'application est-elle déployée ?
- À quoi sert le
docker compose downavant ledocker compose updans le script de déploiement ? - Expliquez le rôle de chacun des 3 conteneurs de la stack (
app,nginx,mysql).
Pour aller plus loin 🏆⚓︎
Si vous avez terminé avant la fin du TP :
- Ajoutez une notification dans le pipeline (badge de status dans le
README.md) - Créez une branche
feature/ma-fonctionnalite, faites une PR versmainet observez le CI se déclencher - Modifiez le
Dockerfilepour corriger le warninggd(ajouterlibpng16dans le stage runtime)