🛢️Parcours Fioul GroupéDocker · Chapitre 07
Accueil › Docker › Chapitre 07
Chapitre 07 / 08 · projet

Le projet Fioul Groupé en Compose

Le chapitre clé : orchestrer les trois couches du projet dans un seul compose.yaml — la base MongoDB, l'API Spring, et le front web (ou le build de l'appli). Une commande, toute la stack.

1 Cadrage

Les trois couches à orchestrer

web (Nginx :80)  →  api (Spring :8080)  →  database (Mongo :27017)
2 Étape

Le compose.yaml des 3 couches

services:
  database:
    image: mongo:7
    volumes: [ "fioul-data:/data/db" ]
    healthcheck:
      test: ["CMD","mongosh","--eval","db.adminCommand('ping')"]
      interval: 10s
      retries: 5

  api:
    build: ./api
    environment:
      SPRING_DATA_MONGODB_URI: mongodb://database:27017/fioul
      JWT_SECRET: ${JWT_SECRET}
    depends_on:
      database:
        condition: service_healthy
    ports: [ "8080:8080" ]

  web:
    build: ./web            # build Flutter web servi par Nginx
    depends_on: [ api ]
    ports: [ "80:80" ]

volumes:
  fioul-data:
3 Notion

Variables & secrets (.env)

Les valeurs sensibles (comme JWT_SECRET) ne sont pas écrites en dur : Compose lit un fichier .env (non versionné) à côté du compose.yaml.

# .env (à mettre dans .gitignore !)
JWT_SECRET=change-moi-en-prod
🛡️ Cyber — jamais de secret dans le dépôt. Le .env reste local ; en production on injecte les variables par l'hôte ou un gestionnaire de secrets.
4 Notion

Le healthcheck & l'ordre de démarrage

Le healthcheck de la base + condition: service_healthy garantissent que l'API ne démarre qu'une fois MongoDB réellement prête à accepter des connexions (et pas juste « lancée »).

5 Étape

Lancer toute la stack

docker compose up -d --build
docker compose ps
# web  → http://localhost      (front)
# api  → http://localhost:8080 (API + Swagger)
# base → interne, non exposée
🛢️ Sur le projet Fioul Groupé

Structure le dépôt avec compose.yaml, api/ (Dockerfile Spring) et web/ (build Flutter web + Nginx). Un docker compose up -d --build et toute l'appli tourne : base persistée, API sécurisée, front servi. C'est le livrable « ça marche partout » du projet — parfait pour une démo de soutenance.

À retenir
  • Un seul compose.yaml décrit les 3 couches database / api / web.
  • Elles se joignent par leur nom de service ; seule l'utile est exposée.
  • .env pour les secrets ; healthcheck + service_healthy pour l'ordre.
← Chapitre 06