Compare commits

...

2 Commits

Author SHA1 Message Date
BeauTroll
49e308c3b2 Add Docker configuration for Walter Coiffure WordPress site
- 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 <noreply@anthropic.com>
2025-12-21 08:43:23 +01:00
BeauTroll
b971f93ce4 total reset 2025-12-21 08:24:41 +01:00
4 changed files with 292 additions and 49 deletions

View File

@@ -1,12 +1,8 @@
# Domain configuration # Configuration de la base de données
DOMAIN=example.tld MYSQL_DATABASE=waltercoiffure
COMPOSE_PROJECT_NAME=name MYSQL_ROOT_PASSWORD=your_root_password_here
MYSQL_USER=waltercoiff
MYSQL_PASSWORD=your_password_here
# MySQL # Configuration du domaine
MYSQL_DATABASE= DOMAIN=walter-coiffure.example.com
MYSQL_ROOT_PASSWORD=
MYSQL_USER=
MYSQL_PASSWORD=
# Redis
REDIS_HOST_PASSWORD=

1
.gitignore vendored
View File

@@ -1 +1,2 @@
.env .env
waltercoiffure/

212
README.md Normal file
View File

@@ -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.

View File

@@ -1,49 +1,83 @@
version: "3.9"
services: services:
wordpress:
image: wordpress
restart: always
expose:
- 80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
volumes:
- wordpress:/var/www/html
labels:
- "traefik.enable=true"
- "traefik.http.routers.${COMPOSE_PROJECT_NAME}.rule=Host(`${DOMAIN}`)"
- "traefik.http.routers.${COMPOSE_PROJECT_NAME}.entrypoints=websecure"
- "traefik.http.routers.${COMPOSE_PROJECT_NAME}.tls=true"
- "traefik.http.routers.${COMPOSE_PROJECT_NAME}.tls.certresolver=letsencrypt"
- "traefik.http.services.${COMPOSE_PROJECT_NAME}.loadbalancer.server.port=80"
networks:
- walter-coiffure-net
- traefik-net
db: db:
image: mysql:8.0 image: mariadb:11.2
restart: always 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: environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER} - MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD} - MYSQL_PASSWORD=${MYSQL_PASSWORD}
volumes: command: "--default-authentication-plugin=mysql_native_password"
- ./db:/var/lib/mysql
networks:
- walter-coiffure-net
redis:
image: redis:alpine
restart: unless-stopped restart: unless-stopped
command: redis-server --requirepass ${REDIS_HOST_PASSWORD} --maxmemory 512mb --maxmemory-policy allkeys-lru
networks: networks:
- walter-coiffure-net - internal
networks: healthcheck:
walter-coiffure-net: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
driver: bridge interval: 10s
traefik-net: timeout: 5s
external: true 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: volumes:
wordpress: wordpress:
db: dbdata:
networks:
internal:
driver: bridge
traefik:
external: true