L'Application Fil Rouge : Campus Summer Portal¶
Architecture du Projet Fil Rouge
Pour ancrer chaque notion théorique dans une réalité d'entreprise concrète, tous les ateliers de cette formation gravitent autour d'une application d'entreprise moderne multi-niveaux : le Campus Summer Portal (Portail Horizon Stages).
Vue d'Ensemble de l'Architecture¶
L'application est découpée en trois microservices conteneurisés communicant au sein du cluster Kubernetes :
flowchart TD
subgraph Client["Extérieur du Cluster"]
Browser["Navigateur Utilisateur<br/>(Étudiant / Recruteur)"]
end
subgraph K8s["Cluster Kubernetes"]
subgraph FrontTier["Niveau Présentation"]
NodePortSvc["Service NodePort / Ingress<br/>Port: 30080"]
FE_Pod1["Pod Frontend 1<br/>(Nginx unprivileged)"]
FE_Pod2["Pod Frontend 2<br/>(Nginx unprivileged)"]
end
subgraph BackTier["Niveau Métier (API REST)"]
BackSvc["Service ClusterIP<br/>campus-backend-svc:8080"]
BE_Pod1["Pod Backend 1<br/>(Spring Boot 3 / Java 17)"]
BE_Pod2["Pod Backend 2<br/>(Spring Boot 3 / Java 17)"]
end
subgraph DataTier["Niveau Données (Persistance)"]
DBSvc["Service ClusterIP<br/>postgres:5432"]
DB_Pod["Pod PostgreSQL 16"]
PVC["PersistentVolumeClaim<br/>(1 GiB)"]
PV["Disque EBS / Hôte<br/>(PersistentVolume)"]
end
subgraph ConfigSec["Configuration & Secrets"]
CM["ConfigMap<br/>campus-config"]
SEC["Secret<br/>campus-db-credentials"]
end
end
Browser -->|HTTP Port 30080| NodePortSvc
NodePortSvc --> FE_Pod1 & FE_Pod2
FE_Pod1 & FE_Pod2 -->|HTTP 8080| BackSvc
BackSvc --> BE_Pod1 & BE_Pod2
BE_Pod1 & BE_Pod2 -->|TCP 5432| DBSvc
DBSvc --> DB_Pod
DB_Pod --- PVC
PVC --- PV
CM -.->|Variables non sensibles| BE_Pod1 & BE_Pod2
SEC -.->|Identifiants chiffrés| BE_Pod1 & BE_Pod2
SEC -.->|Identifiants chiffrés| DB_Pod
Les Composants Détaillés¶
1. Le Frontend Web (campus-frontend)¶
- Rôle : Interface utilisateur pour la consultation des offres de stages et le dépôt de candidatures.
- Technologie : Nginx 1.25 unprivileged (sécurité sans compte root).
- Image Docker Hub :
regaieg/campus:frontend-1.0.0 - Port exposé :
8080(interne au conteneur) - Caractéristiques :
- Stateless (aucun état conservé localement).
- Conçu pour être répliqué à l'échelle (2 à 5 pods selon la charge).
2. L'API Backend (campus-backend)¶
- Rôle : Cœur métier de l'application, validation des offres, exposition des endpoints REST et métriques de supervision.
- Technologie : Java 17, Spring Boot 3.2, Spring Data JPA, Spring Boot Actuator.
- Image Docker Hub :
regaieg/campus:backend-1.0.0 - Port d'écoute :
8080 - Endpoints Clés :
/api/stages: Liste et création des offres de stage./actuator/health: Sonde de santé applicative utilisée par Kubernetes pour leslivenessProbeetreadinessProbe./actuator/info: Métriques et statut du service.- Variables d'Environnement :
SPRING_DATASOURCE_URL:jdbc:postgresql://postgres:5432/campusSPRING_DATASOURCE_USERNAME: Fourni via Secret (campus)SPRING_DATASOURCE_PASSWORD: Fourni via Secret (campus123)SPRING_PROFILES_ACTIVE: Fourni via ConfigMap (production)
3. La Base de Données (campus-postgres)¶
- Rôle : Persistance transactionnelle des candidatures et offres d'emploi.
- Technologie : PostgreSQL 16 Alpine.
- Image Officielle :
postgres:16-alpine - Port standard :
5432 - Chemin des données :
/var/lib/postgresql/data(monté sur un PersistentVolume). - Enjeu de Production :
- Si le conteneur est détruit ou redémarré sur un autre nœud worker, le volume persistant doit être immédiatement rattaché pour ne perdre aucune candidature.
Images Docker Hub Officielles¶
Toutes les images applicatives nécessaires ont été pré-compilées, testées et publiées sur le compte officiel Docker Hub de la formatrice Rym Regaieg :
| Composant | Image Docker Hub | Taille | Port |
|---|---|---|---|
| Frontend Web | regaieg/campus:frontend-1.0.0 |
~30 Mo | 8080 |
| API Backend v1 | regaieg/campus:backend-1.0.0 |
~250 Mo | 8080 |
| API Backend v1.1 (Rolling update) | regaieg/campus:backend-1.1.0 |
~250 Mo | 8080 |
| Base PostgreSQL | postgres:16-alpine |
~80 Mo | 5432 |
Grâce à ces images publiques, aucune étape de compilation Java locale n'est requise sur les postes des apprenants, ce qui élimine toute friction technique le premier jour.