From 49e308c3b2c04c80889a0292b2d7e01c233c7801 Mon Sep 17 00:00:00 2001 From: BeauTroll <-> Date: Sun, 21 Dec 2025 08:43:23 +0100 Subject: [PATCH] Add Docker configuration for Walter Coiffure WordPress site MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add docker-compose.yml with WordPress and MariaDB services - Configure Traefik reverse proxy with automatic SSL - Add environment variables template (.env.example) - Add comprehensive README with deployment instructions - Exclude waltercoiffure/ data directory from version control 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- .env.example | 8 ++ .gitignore | 1 + README.md | 212 +++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 83 ++++++++++++++++++ 4 files changed, 304 insertions(+) create mode 100644 .env.example create mode 100644 README.md create mode 100644 docker-compose.yml diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..0e86a10 --- /dev/null +++ b/.env.example @@ -0,0 +1,8 @@ +# Configuration de la base de données +MYSQL_DATABASE=waltercoiffure +MYSQL_ROOT_PASSWORD=your_root_password_here +MYSQL_USER=waltercoiff +MYSQL_PASSWORD=your_password_here + +# Configuration du domaine +DOMAIN=walter-coiffure.example.com diff --git a/.gitignore b/.gitignore index 4c49bd7..b61ac0a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .env +waltercoiffure/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..e5daae8 --- /dev/null +++ b/README.md @@ -0,0 +1,212 @@ +# Walter Coiffure - Site WordPress Dockerisé + +Site WordPress pour Walter Coiffure, configuré avec Docker et Traefik comme reverse proxy. + +## Prérequis + +- Docker et Docker Compose installés +- Un réseau Docker Traefik déjà configuré (voir ci-dessous) +- Un nom de domaine pointant vers votre serveur + +## Configuration + +### 1. Variables d'environnement + +Copiez le fichier `.env.example` vers `.env` et modifiez les valeurs: + +```bash +cp .env.example .env +``` + +Configurez les variables suivantes dans `.env`: + +```bash +# Configuration de la base de données +MYSQL_DATABASE=waltercoiffure +MYSQL_ROOT_PASSWORD=votre_mot_de_passe_root +MYSQL_USER=waltercoiff +MYSQL_PASSWORD=votre_mot_de_passe + +# Configuration du domaine +DOMAIN=votre-domaine.com +``` + +### 2. Réseau Traefik + +Le docker-compose.yml suppose qu'un réseau Docker externe nommé `traefik` existe déjà. Si ce n'est pas le cas, créez-le: + +```bash +docker network create traefik +``` + +### 3. Configuration Traefik + +Assurez-vous que votre instance Traefik est configurée avec: +- Un resolver Let's Encrypt nommé `letsencrypt` +- Les entrypoints `web` (port 80) et `websecure` (port 443) + +Exemple de configuration Traefik minimale: + +```yaml +# traefik/docker-compose.yml +version: '3.9' + +services: + traefik: + image: traefik:v2.10 + container_name: traefik + restart: unless-stopped + ports: + - "80:80" + - "443:443" + networks: + - traefik + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - ./traefik.yml:/traefik.yml:ro + - ./acme.json:/acme.json + command: + - "--api.insecure=true" + - "--providers.docker=true" + - "--providers.docker.exposedbydefault=false" + - "--entrypoints.web.address=:80" + - "--entrypoints.websecure.address=:443" + - "--certificatesresolvers.letsencrypt.acme.email=votre@email.com" + - "--certificatesresolvers.letsencrypt.acme.storage=/acme.json" + - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web" + +networks: + traefik: + external: true +``` + +## Démarrage + +### Première installation + +1. Démarrez les services: + +```bash +docker-compose up -d +``` + +2. La base de données sera automatiquement initialisée avec le dump SQL situé dans `backup_dir/waltercoiffure/wc.dump.sql` + +3. Attendez quelques secondes que les services démarrent: + +```bash +docker-compose logs -f +``` + +4. Accédez à votre site via `https://votre-domaine.com` + +### Commandes utiles + +```bash +# Voir les logs +docker-compose logs -f + +# Voir les logs d'un service spécifique +docker-compose logs -f wordpress +docker-compose logs -f db + +# Redémarrer les services +docker-compose restart + +# Arrêter les services +docker-compose down + +# Arrêter et supprimer les volumes (ATTENTION: supprime les données) +docker-compose down -v +``` + +## Structure du projet + +``` +. +├── docker-compose.yml # Configuration Docker Compose +├── .env # Variables d'environnement (non versionné) +├── .env.example # Template des variables d'environnement +└── backup_dir/ + └── waltercoiffure/ + ├── wordpress/ # Fichiers WordPress + ├── plugins/ # Plugins WordPress + ├── themes/ # Thèmes WordPress + ├── uploads/ # Médias uploadés + └── wc.dump.sql # Dump de la base de données +``` + +## Services + +### WordPress + +- **Image**: wordpress:6.4-php8.2-apache +- **Container**: walter-coiffure-wp +- **Réseau**: traefik (externe), internal (interne) +- **Volumes**: + - Fichiers WordPress depuis `backup_dir/waltercoiffure/wordpress` + - Plugins, thèmes et uploads montés séparément + +### Base de données + +- **Image**: mariadb:11.2 +- **Container**: walter-coiffure-db +- **Réseau**: internal (interne uniquement) +- **Volumes**: + - `dbdata` pour la persistance + - Dump SQL pour l'initialisation + +## Sécurité + +- Le fichier `.env` contient des informations sensibles et ne doit pas être versionné +- La base de données n'est accessible que depuis le réseau interne +- Le site force HTTPS via Traefik +- Les certificats SSL sont gérés automatiquement par Let's Encrypt + +## Dépannage + +### Le site n'est pas accessible + +1. Vérifiez que Traefik est en cours d'exécution: + ```bash + docker ps | grep traefik + ``` + +2. Vérifiez les logs de WordPress: + ```bash + docker-compose logs wordpress + ``` + +3. Vérifiez que le réseau `traefik` existe: + ```bash + docker network ls | grep traefik + ``` + +### Problèmes de base de données + +1. Vérifiez les logs de la base de données: + ```bash + docker-compose logs db + ``` + +2. Vérifiez la santé du service: + ```bash + docker-compose ps + ``` + +3. Connectez-vous à la base de données: + ```bash + docker-compose exec db mysql -u waltercoiff -p waltercoiffure + ``` + +### Certificats SSL + +Si vous avez des problèmes avec les certificats SSL, vérifiez: + +1. Que votre domaine pointe bien vers votre serveur +2. Que les ports 80 et 443 sont ouverts +3. Les logs de Traefik pour voir les erreurs ACME + +## Support + +Pour toute question ou problème, veuillez créer une issue dans le dépôt du projet. diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..449be02 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,83 @@ +version: "3.9" + +services: + db: + image: mariadb:11.2 + container_name: walter-coiffure-db + env_file: .env + volumes: + - dbdata:/var/lib/mysql + - ./waltercoiffure/wc.dump.sql:/docker-entrypoint-initdb.d/init.sql:ro + environment: + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} + - MYSQL_DATABASE=${MYSQL_DATABASE} + - MYSQL_USER=${MYSQL_USER} + - MYSQL_PASSWORD=${MYSQL_PASSWORD} + command: "--default-authentication-plugin=mysql_native_password" + restart: unless-stopped + networks: + - internal + healthcheck: + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + interval: 10s + timeout: 5s + retries: 3 + start_period: 30s + + wordpress: + image: wordpress:6.4-php8.2-apache + container_name: walter-coiffure-wp + depends_on: + db: + condition: service_healthy + env_file: .env + environment: + - WORDPRESS_DB_HOST=db:3306 + - WORDPRESS_DB_USER=${MYSQL_USER} + - WORDPRESS_DB_PASSWORD=${MYSQL_PASSWORD} + - WORDPRESS_DB_NAME=${MYSQL_DATABASE} + - WORDPRESS_TABLE_PREFIX=wor9102_ + - WORDPRESS_CONFIG_EXTRA= + define('WP_HOME', 'https://${DOMAIN}'); + define('WP_SITEURL', 'https://${DOMAIN}'); + define('FORCE_SSL_ADMIN', true); + if (isset($$_SERVER['HTTP_X_FORWARDED_PROTO']) && $$_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { + $$_SERVER['HTTPS'] = 'on'; + } + restart: unless-stopped + volumes: + - wordpress:/var/www/html + - ./waltercoiffure/wordpress:/var/www/html:cached + - ./waltercoiffure/plugins:/var/www/html/wp-content/plugins:cached + - ./waltercoiffure/uploads:/var/www/html/wp-content/uploads:cached + - ./waltercoiffure/themes:/var/www/html/wp-content/themes:cached + networks: + - internal + - traefik + labels: + - "traefik.enable=true" + - "traefik.docker.network=traefik" + # HTTP + - "traefik.http.routers.walter-coiffure.rule=Host(`${DOMAIN}`)" + - "traefik.http.routers.walter-coiffure.entrypoints=web" + - "traefik.http.routers.walter-coiffure.middlewares=redirect-to-https" + # HTTPS + - "traefik.http.routers.walter-coiffure-secure.rule=Host(`${DOMAIN}`)" + - "traefik.http.routers.walter-coiffure-secure.entrypoints=websecure" + - "traefik.http.routers.walter-coiffure-secure.tls=true" + - "traefik.http.routers.walter-coiffure-secure.tls.certresolver=letsencrypt" + # Service + - "traefik.http.services.walter-coiffure.loadbalancer.server.port=80" + # Middleware pour redirection HTTPS + - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" + - "traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true" + +volumes: + wordpress: + dbdata: + +networks: + internal: + driver: bridge + traefik: + external: true