Compare commits
2 Commits
8c4a3d0a8f
...
49e308c3b2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
49e308c3b2 | ||
|
|
b971f93ce4 |
18
.env.example
18
.env.example
@@ -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
1
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
.env
|
.env
|
||||||
|
waltercoiffure/
|
||||||
|
|||||||
212
README.md
Normal file
212
README.md
Normal 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.
|
||||||
@@ -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
|
||||||
|
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:
|
networks:
|
||||||
walter-coiffure-net:
|
- internal
|
||||||
driver: bridge
|
- traefik
|
||||||
traefik-net:
|
labels:
|
||||||
external: true
|
- "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
|
||||||
|
|||||||
Reference in New Issue
Block a user