EP2-Training

Vous disposez d’une application PHP existante de télégraphe :

  • L’utilisateur clique une image de télégraphe.

  • Le JavaScript client code les impulsions en bits (0 ou 1) selon la durée.

  • Le backend PHP reçoit la requête et enregistre les données en base de données.

Votre mission : conteneuriser et exécuter cette application à l’aide de Docker Compose, avec :

  • Nginx pour le frontal web,

  • PHP-FPM pour le backend,

  • MySQL pour la persistance.

Merci de commencer par télécharger ces ressources :

📥 Télegraphe à dockeriser (ZIP) 📥 Nginx config file (CONF) (⚠️ à renommer en default.conf après télechargement) 📥 PHP initialisation file (INI)


Spécifications techniques

1. Service db (MySQL)

  • Image : mysql:latest

  • Variables d’environnement :

    • MYSQL_DATABASE=db_telegraph

    • MYSQL_ROOT_PASSWORD=root

    • d’autres variables ?

  • Volume nommé : db_data:/var/lib/mysql

  • Réseau : backend

  • Redémarrage : always

  • Healthcheck :

    healthcheck:
     test: ["CMD-SHELL", "mysql -h 127.0.0.1 -u $$MYSQL_USER  --password=$$MYSQL_PASSWORD -e 'USE db_telegraph;'"]
     interval: 5s
     timeout: 10s
     retries: 5
    

2. Service php (PHP-FPM)

  • Image : php:8.2-fpm

  • Extensions requises : pdo, pdo_mysql

    • (ou installation via docker-php-ext-install pdo pdo_mysql)

  • Copie du code backend : /var/www/html/api/

  • Variables d’environnement :

    • DB_HOST=db

    • DB_PORT=3306

    • DB_NAME=db_telegraph

    • DB_USER=root

    • DB_PASSWORD=root

  • Réseaux : backend

  • Redémarrage : always

  • Dépendances :

    depends_on:
      db:
        condition: service_healthy
    

    le fichier php.ini doit être copié et renommé vers cet emplacement : /usr/local/etc/php/conf.d/z-app.ini


3. Service nginx (reverse proxy + statique)

  • Image : nginx:1.27-alpine

  • Ports exposés : 80:80

  • Réseau : frontend, backend

  • Dépend de php

  • Redémarrage : always

  • Copie des fichier default.conf dans /etc/nginx/conf.d/default.conf

  • Copie des fichiers clients dans /usr/share/nginx/html/


4. Réseaux et volumes

Un réseau frontend et un réseau backend doivent être créés.

Un volume nommé db_data doit permettre la persistance de la base de données.


Endpoints attendus

  • Interface utilisateur : GET / affiche l’image du télégraphe et le script JS.

  • Interface utilisateur : GET /api/test_db_connection.php initie un test de connection à la base de données.



Travail demandé

  1. Écrire le fichier docker-compose.yml complet selon les spécifications.

  2. Fournir les fichiers nécessaires :

    • php/Dockerfile

    • nginx/default.conf

    • app/ avec votre code télégraphe.

  3. Démarrer la stack et vérifier :

    • l’accès via http://localhost

    • l’accès via http://localhost/api/test_db_connection.php

  4. Vérifier la persistance après docker compose down && docker compose up.


Livrables

  • docker-compose.yml

  • php/Dockerfile

  • Captures dans un dossier captures/ :

    • ui.png — interface du télégraphe

    • post_ok.png — réponse du backend après envoi

    • last_message.png — lecture des données

    • docker_ps.png

    • persistence.png


Critères de réussite

  • Application accessible via Nginx

  • API PHP opérationnelle (/api/test_db_connection.php)

  • Données persistantes après redémarrage

  • Volume et réseaux configurés

  • Healthcheck DB et dépendances fonctionnels

  • Structure docker-compose.yml propre et lisible