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.
Avant d'utiliser ce projet, assurez-vous d'avoir installé :
Un tutoriel détaillé pour installer Docker & Docker Compose sur Debian 12 est disponible ici.
Ce projet repose sur trois fichiers principaux :
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)
# 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
# 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
# Définir le répertoire de travail à l'intérieur du conteneur
WORKDIR /var/www/html
# Copier tous les fichiers du projet dans le conteneur
COPY . /var/www/html/
# 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/
# Exposer le port 80 pour accéder au serveur web depuis l'extérieur du conteneur
EXPOSE 80
Attention :
- Remplacer le /public par le répertoire ou se trouve votre index.php
<VirtualHost *:80>
DocumentRoot /var/www/html/public
<Directory /var/www/html/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
MYSQL_ROOT_PASSWORD=pwd # Mot de passe root de votre MySQL
MYSQL_DATABASE=alf # Nom de votre base de données
MYSQL_USER=alf_user # Nom d'utilisateur de votre bdd
MYSQL_PASSWORD=pwd # Mot de passe de votre utilisateur
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 :
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
À 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.
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 :
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 :
docker-compose up -d
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 :
docker-compose down
Une fois les conteneurs lancés, vous pouvez accéder aux services via les URL suivantes :
licence CC-by-sa