Wordpress avec Docker et docker-compose : tutoriel pour débuter

C’est avec un site Wordpress que j’ai appris à utiliser Docker. Je vais vous répliquer ici les instructions que je suis désormais pour créer un nouveau site Wordpress.

Auparavant cela me prennait de longues minutes parfois plus d’une heure pour mettre en place un nouveau site. Le temps de me souvenir de la configuration de mon serveur etc quand cela faisait longtemps, créer des symlinks, uploader les fichiers, créer la base de donnée… une opération fastidieuse qui aurait certes pu être automatisée mais cela aurait pris encore du temps. Désormais, c’est pour ça que j’utilise Docker (voir Pourquoi j’utilise Docker) : cela me prend littéralement quelques secondes.

Voici quel process j’utilise

Nota bene : ici je prend l’exemple de Wordpress car c’est un CMS très répandu et que je travail avec au quotidien. Cette marche à suivre peut tout à fait être adaptée à n’importe quel système. N’hésitez pas à me contacter si vous avez besoin d’aide dans votre démarrage.

Le fichier docker-compose.yml

La commande docker-compose est un outil très utile qui permet de gagner un temps monstrueux.

Dans un seul fichier vous allez écrire toutes les informations concernant votre site et sa configuration et vous pourrez ainsi le lancer rapidement et le mettre à jour facilement.

Le cas d’usage ici est le suivant : le site MonSite est en cours de développement en local (voir mes quelques conseils pour utiliser Docker en local) et on veut sauvegarder les données dans le dossier /home/julien/MonSite.

version: '3'

services:
   db:
     container_name: MonSite_db
     image: mysql:5.7
     # restart: unless-stopped
     volumes:
        - /home/julien/MonSite/db_data:/var/lib/mysql
     environment:
       MYSQL_ROOT_PASSWORD: !P4SS4ROOT
       MYSQL_DATABASE: monsitewp
       MYSQL_USER: monsitewp
       MYSQL_PASSWORD: !P4SS4US3R
     networks:
       back:

   wordpress:
     depends_on:
       - db
     container_name: MonSite_wp
     image: wordpress:latest
     #restart: unless-stopped
     volumes:
       - /home/julien/MonSite/wordpress/core:/var/www/html
       - /home/julien/MonSite/wordpress/wp-content:/var/www/html/wp-content
     environment:
       WORDPRESS_DB_HOST: MonSite_db:3306
       WORDPRESS_DB_NAME: monsitewp
       WORDPRESS_DB_USER: monsitewp
       WORDPRESS_DB_PASSWORD: !P4SS4US3R
       WORDPRESS_TABLE_PREFIX: mswp_
     ports:
       - 80:80
       - 443:443
     networks:
       back:


networks:
	- back:

Je vous invite à lire les commentaires pour mieux comprendre le code de ce fichier

version

‘3’ ici. ATTENTION ! Dans beaucoup de tutoriels ou de codes partagés vous trouverez des fichiers docker-compose.yml qui ne sont pas de cette version. La syntaxe évolue entre les versions ce qui peut causer des problèmes.

services

Cette partie défini les différents containers qui vont être créés

db

  • container_name : le nom du conteneur
  • image : j’utilise ici mysql:5.7 mais j’aurais pu utiliser une autre version, mysql:8.0 par exemple, définie sur le repository de cette image. Vous pouvez même utiliser autre chose que mysql si vous voulez
  • restart : la variable restart a pour valeur par défaut ‘no’. Elle accepte également ‘on-failure’, ‘unless-stopped’ et ‘always’. Si vous êtes sur une installation locale je recommande de commenter cette ligne (ou la supprimer) pour éviter que les conteneurs ne démarrent au démarrage de votre PC. Sur votre serveur il faut s’assurer que le conteneur redémarre.
  • volumes : comme expliqué dans les tutoriels précédents, le volume indique où les données du dossier en question seront stockées. Ici le dossier du conteneur situé dans /var/lib/mysql sera sauvegardé dans le dossier utilisateur /home/julien/MonSite/db_data
  • environnement : ces variables dépendent de l’image utilisée. Ici on utilise celles de MYSQL.

wordpress

  • depends_on : cette ligne permet d’indiquer à Docker qu’il doit lier le conteneur ‘wordpress’ au conteneur ‘db’

  • image : se référer au hub pour voir les variantes existantes (ex : image: wordpress:php7.0-apache)

  • volumes : ici petite particularité : les fichiers Wordpress qui n’ont pas vocation à être édités (tout sauf wp-content) sont placés dans /home/julien/MonSite/wordpress/core, tandis que les fichiers importants pour nous sont placés dans /home/julien/MonSite/wordpress/wp-content. Le premier volume n’est même pas inspensable car ce sont les fichiers gérés par Wordpress.

    On pourrait rajouter un volume pour un dossier de thème ou de plugin spécifique comme je l’avais fait dans le tutoriel sur l’utilisation en local de Docker :

    volume :
       - /home/julien/dev/plugins/monplugin:/var/www/html/wp-content/plugins/monplugin
    

    ```

  • environnement : notez ici surtout le WORDPRESS_DB_HOST qui sert à faire pointer le conteneur wordpress vers le bon conteneur de base de donnée, sur le bon port.

networks

Voir le glossaire pour une définition du network.

Utiliser un fichier .env

Pour rendre votre travail encore plus facilement maintenable si vous avez de nombreux sites à créer et à maintenir vous pouvez tirer profit du fichier .env.

Ce fichier sera à placer dans le même dossier que votre fichier docker-compose.yml et vous permettra d’y stocker des variables.

Vous pourrez ainsi utiliser toujours le même docker-compose.yml et seulement remplir un fichier .env pour chaque projet.

Voici à quoi ressemble le fichier .env :

# fichier .env pour configurer mon site Wordpress

#
# Configuration de la base de données
# Pour Wordpress il est recommandé d'utilisé Mysql ou MariaDB
#
CONTAINER_DB_NAME=MonSite_db

# le mot de passe Root de la base de donnée
MYSQL_ROOT_PASSWORD=!P4SS4ROOT

# Identifiants de connexion à la base de données pour Wordpress
MYSQL_DATABASE=monsitewp
MYSQL_USER=monsitewp
MYSQL_PASSWORD=!P4SS4US3R

# Chemin pour stocker la base de données
DB_PATH=./db_data

#
# Configuration de Wordpress
#
CONTAINER_WP_NAME=MonSite_wp

# Image Wordpress
WORDPRESS_IMAGE=latest

# Chemin pour stocker les données de wordpress
WP_CORE=./wordpress/core
WP_CONTENT=./wordpress/wp-content

# Table prefix
WORDPRESS_TABLE_PREFIX=mswp_

Le fichier docker-compose.yml correspondant contient désormais des appels aux variables définies dans .env :

version: '3'

services:
   db:
     container_name: ${CONTAINER_DB_NAME}
     image: mysql:5.7
     #restart: unless-stopped
     volumes:
        - ${DB_PATH}:/var/lib/mysql
     environment:
       MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
       MYSQL_DATABASE: ${MYSQL_DATABASE}
       MYSQL_USER: ${MYSQL_USER}
       MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    networks:
       back:

   wordpress:
     depends_on:
       - db
     container_name: ${CONTAINER_WP_NAME}
     image: wordpress:${WORDPRESS_IMAGE}
     #restart: unless-stopped
     volumes:
       - ${WP_CORE}:/var/www/html
       - ${WP_CONTENT}:/var/www/html/wp-content
     environment:
       WORDPRESS_DB_HOST: ${CONTAINER_DB_NAME}:3306
       WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
       WORDPRESS_DB_USER: ${MYSQL_USER}
       WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
       WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX}
     ports:
       - 80:80
       - 443:443
     networks:
       back:

networks:
    - back

L’utilisation d’un fichier .env n’est pas essentielle mais peut vous faire gagner encore un peu plus de temps et vous éviter des erreurs, à vous de décider s’il a une place dans votre processus de travail.

Lancer les conteneurs

Une fois que vos fichiers de configuration sont en place il vous suffit de vous placer dans le dossier où ils se situent et de lancer vos conteneurs avec la commande suivante :

docker-compose up -d

Si aucune erreur ne se présente à vous il vous suffit de naviguer sur localhost pour commencer à configurer votre site internet. Si vous avez des problèmes de permission reportez vous au tutoriel pour utiliser Docker en local