Bonjour ! Dans la leçon précédente, vous avez brillamment connecté votre backend Spring Boot à un frontend Next.js, en implémentant une stratégie d'authentification robuste. Votre application full-stack est maintenant complète et fonctionnelle sur votre machine locale. C'est une étape majeure !
Aujourd'hui, nous allons franchir la dernière frontière technique : la mise en ligne. L'objectif de cette leçon est de déployer l'application full-stack complète sur une plateforme cloud via un pipeline de CI/CD. Nous allons automatiser le processus qui transforme votre code sur GitHub en une application accessible au public. Votre expérience avec Docker sera un atout précieux, car nous nous appuierons sur la conteneurisation que vous avez déjà maîtrisée.
À la fin de cette leçon, vous aurez mis en place une chaîne d'intégration et de déploiement continus (CI/CD) professionnelle avec GitHub Actions, capable de déployer automatiquement chaque nouvelle version de votre application.
1. Qu'est-ce que le CI/CD ?
Avant de nous lancer dans la pratique, il est essentiel de comprendre la philosophie qui sous-tend notre démarche. Le terme CI/CD est au cœur de la culture DevOps, qui vise à unifier le développement (Dev) et les opérations (Ops) pour livrer des applications plus rapidement et de manière plus fiable.
La vidéo suivante offre une excellente introduction à ces concepts.
DEVOPS et CI/CD (avec Github Actions)
La vidéo "DEVOPS et CI/CD (avec Github Actions)" de la chaîne inpulse tv explique de manière très claire les concepts fondamentaux. Elle vous aidera à saisir le "pourquoi" avant de nous attaquer au "comment".
Regardez la première partie de la vidéo (de 00:00 à 05:26). Concentrez-vous sur les points suivants : La distinction historique entre les équipes de Dev et d'Ops. Ce qu'est la culture DevOps : une réunification des objectifs. Le cycle de vie d'une application (la boucle infinie). La signification de CI (Continuous Integration / Intégration Continue) et de CD (Continuous Deployment / Déploiement Continu).
En résumé :
- CI (Intégration Continue) : À chaque fois qu'un développeur pousse du code, des actions automatiques sont déclenchées (compilation, tests, analyse de code, création d'une image Docker). L'objectif est de s'assurer que le nouveau code s'intègre bien au projet existant.
- CD (Déploiement Continu) : Si l'étape de CI réussit, le processus continue automatiquement pour déployer l'application sur un ou plusieurs environnements (test, pré-production, production).
2. Notre Stratégie de Déploiement
Pour notre projet, nous allons déployer notre application full-stack (backend Spring Boot, frontend Next.js, base de données MySQL) conteneurisée avec Docker. L'ensemble sera orchestré par docker-compose. Notre "plateforme cloud" sera un serveur privé virtuel (VPS), une machine Linux distante sur laquelle nous aurons un contrôle total.
Le processus sera entièrement automatisé par GitHub Actions. Voici le plan :
- À chaque
pushsur notre branche principale, GitHub Actions se déclenche. - Le pipeline va construire l'application Spring Boot.
- Il copiera ensuite les fichiers nécessaires (le
.jardu backend, le code source du frontend, et les fichiers de configuration Docker) sur notre VPS. - Enfin, il se connectera au VPS via SSH et lancera une commande
docker-composepour construire les nouvelles images et démarrer les conteneurs.
Des architectures plus complexes existent, notamment sur des plateformes comme AWS, où l'on découple les services (frontend sur S3/CloudFront, backend sur ECS, base de données sur RDS).

3. Mise en Place du Pipeline : Guide Pratique
Nous allons suivre une excellente vidéo qui détaille la mise en place d'un pipeline CI/CD pour une application Spring Boot. Nous l'adapterons ensuite pour notre contexte full-stack.
Github Actions : Créer une pipeline CI/CD pour Déployer AUTOMATIQUEMENT sur un VPS
La vidéo "Github Actions : Créer une pipeline CI/CD pour Déployer AUTOMATIQUEMENT sur un VPS" de Coding With Armand est un guide pas à pas très détaillé. Nous allons la suivre pour construire notre propre pipeline.
Regardez l'introduction (de 00:00 à 00:54) pour avoir une vue d'ensemble du projet de la vidéo.
Étape 1 : Préparation du Serveur Cloud (VPS)
La première étape consiste à préparer notre environnement de destination. Cela implique de louer un VPS, d'y installer nos outils et de sécuriser l'accès.
Github Actions : Créer une pipeline CI/CD pour Déployer AUTOMATIQUEMENT sur un VPS
Cette section de la vidéo vous montre comment configurer un VPS de A à Z. Les principes sont les mêmes quel que soit le fournisseur de VPS que vous choisissez (Hostinger, OVH, DigitalOcean, etc.).
Regardez attentivement cette longue mais cruciale section (de 03:20 à 12:02). Les actions clés à réaliser sont : Configuration du VPS : Choisir un OS (Ubuntu est un excellent choix) et le démarrer. Mise à jour et création d'un utilisateur : Se connecter en root, mettre à jour les paquets (apt update && apt upgrade), et créer un utilisateur dédié pour le déploiement (ex: deployer). N'utilisez jamais root pour vos déploiements. Installation de Docker et Docker Compose : Suivez les instructions pour installer le moteur Docker et le plugin Compose. Configuration des clés SSH : Générer une paire de clés SSH sur votre machine locale (ssh-keygen) et copier la clé publique sur le VPS (ssh-copy-id) pour l'utilisateur de déploiement. Cela permet une connexion sans mot de passe, essentielle pour l'automatisation. Création du répertoire de l'application : Créer un dossier sur le VPS où l'application sera déployée (ex: /opt/mon-app) et donner les permissions nécessaires à votre utilisateur de déploiement.
Étape 2 : Configuration des Secrets sur GitHub
Votre pipeline aura besoin d'informations sensibles pour se connecter à votre VPS (son adresse IP, le nom d'utilisateur, la clé SSH privée). Il est impératif de ne jamais les écrire en clair dans vos fichiers de configuration. GitHub Actions propose une solution sécurisée : les "Secrets".
Github Actions : Créer une pipeline CI/CD pour Déployer AUTOMATIQUEMENT sur un VPS
Apprenons maintenant à stocker nos informations sensibles de manière sécurisée.
Regardez la section sur la configuration des secrets (de 12:02 à 13:43). Vous devez créer les secrets suivants dans votre dépôt GitHub, sous Settings > Secrets and variables > Actions : VPS_IP : L'adresse IP de votre serveur. VPS_USER : Le nom de l'utilisateur de déploiement créé à l'étape 1. SSH_PRIVATE_KEY : Le contenu de votre clé SSH privée (cat ~/.ssh/id_rsa).
Étape 3 : Création du Workflow GitHub Actions
C'est ici que nous décrivons toutes les étapes de notre pipeline CI/CD dans un fichier YAML. Créez le fichier .github/workflows/deploy.yml à la racine de votre projet.
La vidéo va vous guider dans la création de ce fichier. Voici une décomposition de sa logique :
Github Actions : Créer une pipeline CI/CD pour Déployer AUTOMATIQUEMENT sur un VPS
Suivez maintenant la construction du fichier de workflow. Chaque étape est une brique de notre automatisation.
Regardez les sections de 13:43 à 25:11 pour construire votre fichier deploy.yml. Voici les concepts clés abordés : Déclencheurs (13:43 - 16:26) : La section on définit quand le workflow doit s'exécuter (ex: sur un push vers la branche main). Jobs et Steps : Un workflow est composé de jobs (tâches) qui s'exécutent sur des machines virtuelles (runs-on). Chaque job contient des steps (étapes). Build de l'application (16:26 - 20:25) : actions/checkout : Récupère le code de votre dépôt. actions/setup-java : Installe le JDK Java. actions/cache : Met en cache les dépendances Maven pour accélérer les builds futurs. run: mvn clean package ... : La commande qui compile et empaquette votre backend Spring Boot en un fichier JAR. Copie des fichiers sur le VPS (20:25 - 22:43) : L'action appleboy/scp-action est utilisée pour copier de manière sécurisée les fichiers de la machine virtuelle GitHub vers votre VPS en utilisant les secrets que vous avez configurés. Déploiement sur le VPS (22:43 - 25:11) : L'action appleboy/ssh-action se connecte à votre VPS et exécute un script. C'est ce script qui va orchestrer le déploiement avec Docker Compose.
4. Adapter le Pipeline pour une Application Full-Stack
La vidéo se concentre sur un backend Java. Nous devons l'adapter pour notre application full-stack. Les deux points de modification principaux sont le docker-compose.yml et l'étape de copie de fichiers dans le workflow.
1. Mettez à jour votre docker-compose.yml :
Votre fichier docker-compose.yml doit maintenant décrire trois services : la base de données, le backend et le frontend. Il devrait ressembler à ceci :
version: '3.8'
services:
mysql-db:
image: mysql:8.0
container_name: mysql-container
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
ports:
- "3306:3306"
volumes:
- db-data:/var/lib/mysql
backend:
build:
context: ./backend # Suppose que le Dockerfile est dans un sous-dossier "backend"
container_name: spring-boot-container
restart: unless-stopped
depends_on:
- mysql-db
ports:
- "8080:8080"
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db:3306/${DB_NAME}?useSSL=false
# ... autres variables d'environnement (JWT secret, etc.)
frontend:
build:
context: ./frontend # Suppose que le Dockerfile est dans un sous-dossier "frontend"
container_name: nextjs-container
restart: unless-stopped
ports:
- "3000:3000"
environment:
# L'URL du backend, accessible via le nom du service Docker
- NEXT_PUBLIC_API_URL=http://backend:8080
volumes:
db-data:
Note : Pour que cela fonctionne, vous devez avoir un Dockerfile pour votre backend et un autre pour votre frontend dans leurs dossiers respectifs.
2. Mettez à jour l'étape de copie dans deploy.yml :
L'action scp-action doit maintenant copier non seulement les fichiers du backend mais aussi le dossier complet du frontend et le docker-compose.yml.
- name: Copy files via SSH
uses: appleboy/scp-action@master
with:
host: ${{ secrets.VPS_IP }}
username: ${{ secrets.VPS_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
source: "./backend/target/*.jar,./frontend,./docker-compose.yml" # <-- MODIFICATION
target: "/opt/mon-app"
strip_components: 1 # Ajustez si nécessaire pour aplatir la structure
Ici, nous copions le JAR, tout le dossier frontend et le fichier docker-compose.yml.
3. Mettez à jour le script de déploiement dans deploy.yml :
Le script exécuté via SSH doit maintenant naviguer vers le bon répertoire et utiliser docker compose pour construire et lancer les services.
- name: Deploy to VPS
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.VPS_IP }}
username: ${{ secrets.VPS_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /opt/mon-app
docker compose down
docker compose up --build -d
docker image prune -f
La commande docker compose up --build -d est la clé :
--build: force la reconstruction des images (backend et frontend) si leurs fichiers sources ont changé.-d: lance les conteneurs en mode "détaché" (en arrière-plan).
5. Déploiement et Vérification
Une fois votre fichier deploy.yml poussé sur GitHub, le pipeline se déclenchera. Vous pouvez suivre son exécution dans l'onglet "Actions" de votre dépôt.
Github Actions : Créer une pipeline CI/CD pour Déployer AUTOMATIQUEMENT sur un VPS
La dernière partie de la vidéo montre le pipeline en action et comment vérifier que tout fonctionne.
Regardez la démonstration finale (de 25:11 à 27:39). Le présentateur vérifie que les conteneurs tournent avec docker ps et accède à l'application via l'IP du serveur. Vous ferez de même : accédez à http://<VOTRE_VPS_IP>:3000 pour voir votre application Next.js en ligne !
Conclusion
Félicitations ! Vous avez non seulement construit une application full-stack complète, mais vous l'avez également dotée d'un pipeline de déploiement automatisé et professionnel.
Points clés à retenir :
- Le CI/CD est une pratique essentielle du DevOps moderne qui automatise l'intégration et le déploiement de votre code.
- GitHub Actions est un outil puissant et intégré pour construire des pipelines de CI/CD directement depuis votre dépôt de code.
- La sécurité est primordiale : utilisez toujours des secrets pour gérer les informations sensibles (clés SSH, mots de passe).
- Docker et Docker Compose sont les fondations qui garantissent que votre application s'exécutera de la même manière sur votre machine, sur la machine de CI et sur le serveur de production.
- L'adaptation est la clé : savoir prendre un exemple existant et l'adapter à son propre contexte (ici, passer d'un simple backend à une application full-stack) est une compétence fondamentale.
Vous avez maintenant assemblé toutes les pièces du puzzle du développement d'applications modernes, de l'idée initiale à la mise en production.
Prochaine étape :
Le cycle de développement technique de notre projet de synthèse est terminé. La dernière étape, et non des moindres, est de savoir présenter votre travail. Dans la leçon finale, nous allons préparer et simuler une présentation de livraison de projet au client, en mettant en valeur les choix techniques et fonctionnels que vous avez faits tout au long de ce parcours.