Aller au contenu principal

Déploiement de WordPress, Nginx et MySQL dans des Conteneurs Docker

Introduction Le déploiement de WordPress avec Nginx et MySQL dans des conteneurs Docker permet de bénéficier de l'isolation des services, de la portabilité et de la simplicité de gestion des…

coolibra28 juil. 2026597 vues

 

Introduction

Le déploiement de WordPress avec Nginx et MySQL dans des conteneurs Docker permet de bénéficier de l'isolation des services, de la portabilité et de la simplicité de gestion des environnements. Cet article vous guidera à travers les étapes de configuration et de déploiement de cette architecture.

 

Étape 1 : Préparer le fichier docker-compose.yml

Créez un fichier nommé docker-compose.yml dans votre répertoire de travail. Ce fichier contiendra la configuration pour les trois services : WordPress, Nginx et MySQL.

Voici un exemple de configuration 

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpresspassword

  wordpress:
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpresspassword
      WORDPRESS_DB_NAME: wordpress
    depends_on:
      - db

  nginx:
    image: nginx:latest
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - wordpress_data:/var/www/html
    ports:
      - "80:80"
    depends_on:
      - wordpress

volumes:
  db_data:
  wordpress_data:

En cas de conflit de port, changer de port. Ex 8080:80

 

Étape 2 : Configurer Nginx

Créez un fichier de configuration Nginx nommé nginx.conf dans votre répertoire de travail :

events {
    worker_connections  4096;  ## Default: 1024
}
http {
    server {
        listen 80;
 
        location / {
            proxy_pass http://wordpress;
            proxy_set_header Host $host;
        }
    }
}

 

Une coniguration plus optimisée nginx.conf

events {
    worker_connections  4096;  ## Default: 1024
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    client_max_body_size 100M; # Augmente la taille maximale des uploads

    # Paramètres de compression
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    # Paramètres de cache
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;
    proxy_cache_key "$scheme$request_method$host$request_uri";
    proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;
    proxy_cache_background_update on;
    proxy_cache_lock on;

    # Paramètres de sécurité
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";
    add_header Referrer-Policy "no-referrer-when-downgrade";
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';";

    server {
        listen 80;

        server_name localhost;

        root /var/www/html;
        index index.php index.html index.htm;

        # Serveur de cache pour les fichiers statiques
        location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
            expires 365d;
            add_header Cache-Control "public, no-transform";
        }

        # Proxy pour WordPress
        location / {
            proxy_pass http://wordpress;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_cache_bypass $http_upgrade;
            proxy_cache WORDPRESS;
        }

        # Interdire l'accès aux fichiers sensibles
        location ~* /(?:uploads|files)/.*\.php$ {
            deny all;
        }

        # Gestion des erreurs
        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root /usr/share/nginx/html;
        }
    }
}

 

L'arborescence

 

Étape 3 : Démarrer les services

Dans le répertoire où se trouvent vos fichiers docker-compose.yml et nginx.conf, exécutez la commande suivante pour démarrer les services :

docker compose up -d

 

 

Étape 4 : Vérifier l'installation

Accédez à http://localhost:80 dans votre navigateur web. Vous devriez voir l'écran d'installation de WordPress.

 

Étape 5 : Nettoyer l'environnement

docker compose down -v

 

 

Illustration de l'Architecture

Voici une illustration de l'architecture déployée :

    • Conteneur MySQL :

Héberge la base de données MySQL nécessaire pour WordPress. Il utilise un volume pour stocker les données de manière persistante. ll sauvegarde ses fichiers dans un volume.

    • Conteneur WordPress :

Héberge l'application WordPress. Il est configuré pour se connecter au conteneur MySQL pour accéder à la base de données. Il est lié à un volume  pour la persistance des données.

    • Conteneur Nginx :

Sert de serveur web pour WordPress. Il est configuré pour rediriger le trafic HTTP vers le conteneur WordPress. Il est également lié  au même volume que wordpress pour servir les fichers.

    • Utilisateur :

Accède à WordPress via le navigateur web en utilisant l'URL http://docker_host_ip:port.

 

Conclusion

Cette configuration Docker offre une solution puissante et flexible pour déployer WordPress avec Nginx et MySQL, tout en assurant une isolation et une gestion simplifiée des services. Profitez de votre nouvelle configuration Dockerisée pour WordPress !

 


N'hésitez pas à laisser des commentaires si vous avez des questions ou des suggestions !


 

Commentaires

Connectez-vous pour rejoindre la discussion.
  • coolibra05 juil. 2024

    N'hésitez pas à laisser des commentaires si vous avez des questions ou des suggestions !