Note de ce sujet :
  • Moyenne : 4.5 (2 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
DAMP: Utilisation de docker-compose pour créer un environnement de développement web
#1
Version plus agréable à lire disponible sur ce lien
Introduction

DAMP est un environnement de développement web basé sur Docker qui fournit un serveur Apache avec PHP, une base de données MySQL et phpMyAdmin pour la gestion de la base de données. Ce projet permet aux développeurs de travailler sur une application web localement avec une configuration reproductible et facile à déployer.
 
Prérequis

Avant d'utiliser ce projet, assurez-vous d'avoir installé :

- Docker
- Docker Compose

Un tutoriel détaillé pour installer Docker & Docker Compose sur Debian 12 est disponible ici.
 
Fichiers du projet

Ce projet repose sur trois fichiers principaux :
 
  1. docker-compose.yml

    Ce fichier définit l'orchestration des services Docker nécessaires à l'exécution de l'environnement DAMP. Il permet de lancer l'ensemble des conteneurs avec une seule commande et assure la communication entre eux.
    Code :
    version: '3.8'

    services:
      web: # Service 'web' pour le serveur web (PHP + Apache)
        build: . # Construction de l'image Docker à partir du Dockerfile à la racine du répertoire (.)
        container_name: php-apache
        restart: always # Assurer que le conteneur redémarre automatiquement en cas d'échec ou lors du redémarrage du système
        volumes:
          - .:/var/www/html  # Le répertoire local '.' (répertoire courant) sera monté dans le répertoire '/var/www/html' du conteneur
        ports:
          - "8080:80" # Mapping des ports : rediriger le port 80 du conteneur vers le port 8080 de l'hôte
        depends_on:
          - db # Ce service dépend du service 'db', c'est-à-dire qu'il sera lancé après ce dernier
        networks:
          - app-network # Définir le réseau utilisé pour ce service, dans ce cas 'app-network'

      db: # Service 'db' pour la base de données MySQL
        image: mysql:8 # Utilisation de l'image officielle de MySQL version 8
        container_name: mysql-db
        restart: always
        env_file: # Chargement d'un fichier d'environnement contenant des variables comme les identifiants de la base de données
          - .env # Fichier '.env' à la racine, contenant les variables d'environnement nécessaires
        volumes:
          - ./db/dump.sql:/docker-entrypoint-initdb.d/dump.sql # Charge le fichier dump.sql présent dans le dossier "db" pour initialiser la base de données
          - ./db/data:/var/lib/mysql # Persister les données de la base de données sur le système hôte
        ports:
          - "3306:3306" # Mapping des ports : rediriger le port 3306 du conteneur vers le port 3306 de l'hôte
        networks:
          - app-network

      phpmyadmin: # Service 'phpmyadmin' pour l'interface web phpMyAdmin de gestion de la base de données
        image: phpmyadmin/phpmyadmin # Utilisation de l'image officielle phpMyAdmin
        container_name: phpmyadmin
        restart: always
        depends_on:
          - db
        environment:
          - PMA_HOST=db # Adresse de la base de données (nom du service 'db')
          - PMA_USER=${MYSQL_USER} # Utilisateur pour la connexion à MySQL (défini dans le fichier .env)
          - PMA_PASSWORD=${MYSQL_PASSWORD} # Mot de passe pour la connexion à MySQL (défini dans le fichier .env)
        ports:
          - "8081:80"  # Mapping des ports : rediriger le port 80 du conteneur vers le port 8081 de l'hôte
        networks:
          - app-network

    networks: # Définition des réseaux à utiliser entre les services
      app-network: # Création d'un réseau personnalisé appelé 'app-network'
        driver: bridge # Spécifie que le type de réseau est 'bridge' (réseau par défaut dans Docker)

  2. Dockerfile

    Ce fichier contient les instructions nécessaires pour construire l'image du conteneur web (serveur Apache avec PHP). Il installe les extensions PHP requises, active le module mod_rewrite d'Apache et applique les configurations nécessaires.
    Code :
    # Utiliser l'image officielle PHP avec Apache
    FROM php:8.2-apache

    # Activer les extensions PHP nécessaires
    RUN docker-php-ext-install mysqli pdo pdo_mysql  # Installe les extensions PHP mysqli, pdo et pdo_mysql pour la gestion de bases de données MySQL

    # Activer le module Apache mod_rewrite (utile pour les réécritures d'URL)
    RUN a2enmod rewrite

    # Copier la configuration personnalisée d'Apache dans le conteneur
    COPY apache-config.conf /etc/apache2/sites-available/000-default.conf  # Remplacer la configuration Apache par celle définie dans 'apache-config.conf'

    # Définir le répertoire de travail à l'intérieur du conteneur
    WORKDIR /var/www/html  # Ce répertoire sera utilisé comme répertoire de travail pour les commandes suivantes

    # Copier tous les fichiers du projet dans le conteneur
    COPY . /var/www/html/  # Copier tous les fichiers du projet (répertoire local) dans le répertoire de travail du conteneur

    # Définir les permissions appropriées pour les fichiers copiés (assurer que l'utilisateur www-data ait accès)
    RUN chown -R www-data:www-data /var/www/html/  # Changer le propriétaire des fichiers et répertoires pour 'www-data' (utilisé par Apache)

    # Exposer le port 80 pour accéder au serveur web depuis l'extérieur du conteneur
    EXPOSE 80  # Le conteneur écoutera sur le port 80 pour les requêtes HTTP

  3. apache-config.conf

    Ce fichier définit la configuration d'Apache pour s'assurer que le serveur web fonctionne correctement. Il définit le répertoire racine du site (DocumentRoot), active la réécriture des URLs (AllowOverride All) et configure les logs du serveur.
    Code :
    <VirtualHost *:80>
        DocumentRoot /var/www/html/public #Remplacer le /public par le répertoire ou se trouve votre index.php

        <Directory /var/www/html/public> #Remplacer le /public par le répertoire ou se trouve votre index.php
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>

  4. .env

    Ce fichier contient les variables d'environnement utilisées pour configurer la base de données MySQL.
    Code :
    MYSQL_ROOT_PASSWORD=pwd # Mot de passe root de votre MySQL
    MYSQL_DATABASE=alf # Nom de votre base de donnés
    MYSQL_USER=alf_user # Nom d'utilisateur de votre bdd
    MYSQL_PASSWORD=pwd # Mot de passe de votre utilisateur
 
Installation et utilisation

Pour que l'environnement DAMP fonctionne correctement, il est essentiel de respecter une structure de dossier claire et complète. Voici l'architecture attendue, illustrée avec l'exemple du projet fictif Alf :
 
Exemple de structure
Code :
Alf/
├── public/
│   ├── index.php        # Fichier principal de l'application web
│   └── about.php        # Exemple de page supplémentaire
├── db/
│   └── dump.sql         # Fichier SQL pour initialiser la base de données
├── config/
│   └── app.php          # Fichier de configuration de l'application (optionnel)
├── .env                 # Fichier des variables d'environnement
├── apache-config.conf   # Configuration personnalisée d'Apache
├── docker-compose.yml   # Fichier d'orchestration des services Docker
└── Dockerfile           # Instructions pour construire l'image du serveur web
 
Explication de la structure

À la racine du projet, on retrouve les quatre fichiers essentiels : .env, apache-config.conf, docker-compose.yml et Dockerfile. Ces fichiers sont indispensables pour configurer et lancer l'environnement.

Le dossier public/ contient les fichiers de l'application web, notamment index.php, qui sert de point d'entrée principal.

Le dossier db/ inclut dump.sql, un fichier SQL utilisé pour initialiser la base de données MySQL lors du premier lancement. Sans ce fichier, la base de données ne sera pas préremplie.

Le dossier config/ est optionnel et peut contenir des fichiers de configuration spécifiques à l'application (comme app.php dans cet exemple).

Le site web, avec ses dossiers et fichiers, doit être déposé dans cette structure avant de lancer l'environnement.

Assurez-vous que tous ces éléments soient présents avant de procéder au lancement, en particulier les fichiers de configuration et le dump de la base de données.
 
Lancement de l'environnement

Une fois la structure du dossier prête, suivez ces étapes pour mettre en route l'environnement DAMP :

Ouvrez un terminal et placez-vous à la racine du projet (là où se trouve docker-compose.yml).

Exécutez la commande suivante pour démarrer les conteneurs :
Code :
docker-compose up

Cette commande construit les images (si nécessaire) et lance les services définis dans docker-compose.yml.

Pour lancer les services en mode détaché (en arrière-plan), ajoutez l'option -d :
Code :
docker-compose up -d
 
Arrêt de l'environnement

Si vous avez lancé les services en mode interactif (sans -d), pressez CTRL+C dans le terminal pour arrêter les conteneurs.

Si les services tournent en mode détaché, utilisez la commande suivante pour les arrêter et supprimer les conteneurs :
Code :
docker-compose down
 
Accès aux services

Une fois les conteneurs lancés, vous pouvez accéder aux services via les URL suivantes :

- Application web : http://localhost:8080
- phpMyAdmin : http://localhost:8081
[-] 2 utilisateurs dire merci à Marco pour ce post :
  • Mathilde3.0, SMK
Répondre
#2
Merci Marc Heart
[-] 1 utilisateur dit merci à Juanito pour ce post :
  • Marco
Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  Outils de diagnostics système pour Windows EnZ0 0 649 07-01-2020, 09:01
Dernier message: EnZ0
  Comment réduire l'utilisation du CPU par Windows Defender Switness 0 1,699 08-10-2019, 09:07
Dernier message: Switness
  Quelle puissance pour mon alimentation ? EnZ0 0 640 10-01-2018, 07:07
Dernier message: EnZ0

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)