Ce projet implémente une infrastructure complète avec Docker Compose comprenant :
- NGINX (serveur web avec HTTPS/TLS uniquement)
- WordPress (CMS avec PHP-FPM)
- MariaDB (base de données)
Chaque service s'exécute dans son propre container Docker avec des images custom (pas d'images pré-configurées comme wordpress:latest).
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ NGINX │ │ WordPress │ │ MariaDB │
│ (Port 443) │◄──►│ (PHP-FPM) │◄──►│ (Port 3306) │
│ SSL/TLS │ │ (Port 9000) │ │ MySQL Socket │
└─────────────────┘ └─────────────────┘ └─────────────────┘
- NGINX : Point d'entrée unique (port 443), reverse proxy vers WordPress
- WordPress : Application PHP avec PHP-FPM, communique avec MariaDB
- MariaDB : Base de données, stockage persistant
├── Makefile # Commandes de gestion du projet
├── README.md # Documentation
└── srcs/
├── docker-compose.yml # Orchestration des services
├── .env # Variables d'environnement (à créer)
└── requirements/
├── nginx/
│ ├── Dockerfile
│ ├── conf/nginx.conf.template
│ └── tools/setup_nginx.sh
├── wordpress/
│ ├── Dockerfile
│ ├── conf/
│ │ ├── www.conf.template
│ │ └── zz-custom.ini
│ └── tools/setup_wordpress.sh
└── mariadb/
├── Dockerfile
├── conf/
│ ├── 10-client-socket.cnf
│ └── 99-customServerConf.cnf
├── tools/
│ ├── setup_mariadb.sh
│ └── init.sql
- Docker & Docker Compose
make- Accès sudo (pour la gestion des volumes)
- Créer le fichier
.envdans~/.inception/:
# Domaine
DOMAIN_NAME=mchouikr.42.fr
# Base de données MariaDB
MYSQL_DATABASE=wordpress
MYSQL_USER=wpuser
MYSQL_PASSWORD=votre_mot_de_passe_db
MYSQL_ROOT_PASSWORD=votre_mot_de_passe_root
# WordPress
WORDPRESS_DB_HOST=mariadb
WORDPRESS_DB_NAME=wordpress
WORDPRESS_DB_USER=wpuser
WORDPRESS_DB_PASSWORD=votre_mot_de_passe_db
WORDPRESS_URL=https://mchouikr.42.fr
WORDPRESS_TITLE="Mon Site WordPress"
WORDPRESS_ADMIN_USER=admin
WORDPRESS_ADMIN_PASSWORD=votre_mot_de_passe_admin
WORDPRESS_ADMIN_EMAIL=admin@mchouikr.42.fr- Ajouter le domaine au fichier hosts (optionnel pour test local) :
echo "127.0.0.1 mchouikr.42.fr" | sudo tee -a /etc/hosts# Construction et démarrage complet
make all
# Démarrage sans reconstruction
make up
# Arrêt et suppression des containers
make down
# Arrêt simple (sans suppression)
make stop
# Reconstruction complète
make re
# Voir l'état des containers
make ps
# Voir les logs en temps réel
make logs
# Nettoyage Docker complet
make clean
# Nettoyage total (+ suppression volumes et .env)
make fclean- Site WordPress : https://mchouikr.42.fr (ou https://localhost si pas de domaine configuré)
- Administration WordPress : https://mchouikr.42.fr/wp-admin
- HTTPS uniquement (TLS v1.2/v1.3)
- Certificat auto-signé généré automatiquement
- Configuration sécurisée (headers de sécurité, etc.)
- Reverse proxy vers WordPress (FastCGI)
- Installation automatique via WP-CLI
- Configuration PHP-FPM optimisée
- Création automatique d'un utilisateur admin
- Connexion sécurisée à MariaDB
- Initialisation sécurisée automatique
- Suppression des comptes anonymes et base test
- Création automatique de la base et utilisateur WordPress
- Socket Unix + écoute réseau pour containers
Les données sont stockées sur l'hôte dans :
/home/mchouikr42/data/wordpress/→ Fichiers WordPress/home/mchouikr42/data/mariadb/→ Base de données MariaDB
- "Permission denied" sur les volumes :
sudo chown -R $USER:$USER /home/mchouikr42/data/-
Certificat SSL non reconnu :
- Normal avec un certificat auto-signé
- Accepter l'exception dans le navigateur
-
Erreur de connexion à la DB :
- Vérifier les variables d'environnement dans
.env - Consulter les logs :
make logs
- Vérifier les variables d'environnement dans
-
Port 443 déjà utilisé :
sudo lsof -i :443
# Arrêter le service qui utilise le port# Logs de tous les services
make logs
# Logs d'un service spécifique
docker logs inception_nginx
docker logs inception_wordpress
docker logs inception_mariadb
# Accès shell dans un container
docker exec -it inception_nginx sh
docker exec -it inception_wordpress bash
docker exec -it inception_mariadb bash- ✅ Docker Compose uniquement
- ✅ Images custom (pas d'images toutes faites)
- ✅ Un container par service
- ✅ HTTPS uniquement (TLS)
- ✅ Volumes persistants
- ✅ Réseau Docker custom
- ✅ Variables d'environnement
- ✅ Restart automatique des containers
mchouikr - Projet École 42