📚 Docker pour les débutants : Le Chantier Naval

TP N°3 : Rendre la stack accessible sur http://mon-projet.local via Traefik

🔧 TP ⏱ 15 ✅ Gratuit

Objectif

Connecter notre stack Apache / PHP-FPM / MariaDB à Traefik pour l’exposer sur Internet via un nom de domaine local (mon-projet.local).

Réutiliser les volumes et la structure Docker Compose créés dans la Section 5.

Garder les conteneurs isolés et sécurisés via le réseau externe proxy-traefik.

Étape 1 : Préparer le réseau externe

Si ce n’est pas déjà fait, créer le réseau partagé avec Traefik :

docker network create proxy-traefik

Ensuite, dans votre stack existante (Section 5), ajoutez ce réseau :

networks:
proxy-traefik:
external: true

Et assurez-vous que chaque service web/Apache rejoint ce réseau :

services:
web:
networks:
- proxy-traefik

Étape 2 : Ajouter les labels Traefik

Dans le service Apache, ajouter les labels pour que Traefik découvre le conteneur :

services:
apache:
image: httpd:2.4
container_name: monprojet-apache
ports:
- "8080:80"
volumes:
- ./app:/var/www/html
- ./conf/apache/vhost.conf:/usr/local/apache2/conf/httpd.conf
depends_on:
- php-fpm
labels:
- "traefik.enable=true"
- "traefik.http.routers.monprojet.rule=Host(`mon-projet.local`)"
- "traefik.http.routers.monprojet.entrypoints=web"

✅ Notes :

  • traefik.enable=true : indique que Traefik doit gérer ce conteneur.
  • traefik.http.routers.monprojet.rule : domaine sur lequel le site sera accessible.
  • traefik.http.routers.monprojet.entrypoints : on utilise ici le port 80 défini dans Traefik.
  • Les volumes ./app et ./conf/apache réutilisent votre stockage Compose de la Section 5, aucun changement à ce niveau.

Étape 3 : Vérifier la configuration locale

Pour que mon-projet.local pointe vers votre serveur local, ajoutez une entrée dans /etc/hosts (Linux/Mac) ou C:\Windows\System32\drivers\etc\hosts (Windows) :

127.0.0.1 mon-projet.local

Étape 4 : Lancer ou relancer les conteneurs

Dans le dossier de votre stack existante :

docker-compose up -d

Étape 5 : Vérifier la persistance des données

Puisque nous réutilisons les volumes Docker de la Section 5 :

  • Les données MariaDB sont déjà dans le volume nommé (./data)
  • Le code source et la configuration Apache sont dans les bind mounts (./app, ./conf)
  • Aucun risque de perte de données, même si le conteneur est redémarré.

Schéma simplifié du flux :

        Internet / mon-projet.local
                |
             Traefik
                |
         proxy-traefik (réseau externe)
                |
       ---------------------------
       |            |            |
    Apache       PHP-FPM       MariaDB
   (web)        (backend)       (bdd)
  • Traefik reçoit les requêtes HTTP pour mon-projet.local
  • Route vers Apache selon les labels
  • MariaDB reste en backend uniquement pour la base de données, sans exposition directe