Aller au contenu

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 les livenessProbe et readinessProbe.
  • /actuator/info : Métriques et statut du service.
  • Variables d'Environnement :
  • SPRING_DATASOURCE_URL : jdbc:postgresql://postgres:5432/campus
  • SPRING_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.