Cet article concernant l’installation de WordPress sous docker est le premier d’une longue série. L’objectif sera de concevoir un site avec toutes les fonctionnalités de performance et sécurité.
C’est quoi WordPress ?
WordPress est un CMS (content manager system), soit un logiciel en ligne grâce auquel il est possible de créer, de gérer et de modifier facilement un site web sans pour autant connaitre tous les langages de programmation associés.
Il s’agit d’un logiciel gratuit, libre et open source, distribué par WordPress.org.
Il est écrit en PHP et permet de facilement mettre en place un site vitrine, blog, portfolio …
Les pré-requis
WordPress a besoin d’une base de donnée pour fonctionner.
Nous utiliserons Mariadb pour notre projet, qui est également un logiciel gratuit, libre et open source.
MariaDB Server est l’une des bases de données relationnelles open source les plus populaires.
Il repose sur les valeurs de performance, de stabilité et d’ouverture.;
Création du réseau MacVlan
Avant toute chose nous allons créer un réseau MacVlan sous docker.
Ce réseau permettra d’identifier les containers en leur donnant une mac adresse, ce qui nous permettra de les faire entrer dans une plage du type 192.168.x.x.
sudo docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.254 --ip-range=192.168.1.0/24 -o parent=eth0 mcvlan_nw
Création du docker compose
Comme à notre habitude nous allons créer notre répertoire de travail et nous y déplacer dedans.
mkdir wordpress && cd wordpress
Puis nous allons créer notre fichier docker-compose.
sudo nano docker-compose.yml
Nous commencerons par indiquer nos services et les images à utiliser :
services:
wordpress:
build:
image: wordpress
container_name: wordpress
hostname: wordpress
Pour plus de sécurité, nous allons utiliser un fichier de variable d’environnement qui stockera toutes les informations des chemins de répertoire, nom d’utilisateur, mot de passe, nom de serveur …
env_file:
- .env
restart: unless-stopped
Nous déclarons notre container WordPress dans deux réseaux, le premier dans le réseau mcvlan précédemment créé et nous lui définissons une adresse IP. Puis nous indiquons à docker d’utiliser le réseau bridge pour communiquer avec la base de donnée.
networks:
mcvlan_nw:
ipv4_address: "192.168.1.1"
net_wordpress:
WordPress a besoin de Mariadb pour fonctionner. Nous allons l’indiquer :
depends_on:
- bdd #bdd est le nom du container qui hébergera Mariadb
Puis nous allons indiquer tous les volumes et les environnements nécessaires en variable.
volumes:
- ${WORDPRESS_LOCAL_HOME}:/var/www/html
- ${WORDPRESS_UPLOADS_CONFIG}:/usr/local/etc/php/conf.d/uploads.ini
- ${WORDPRESS_MUPLUGINS}:/var/www/html/test/wp-content/mu-plugins
environment:
- WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST}
- WORDPRESS_DB_NAME=${MYSQL_DATABASE}
- WORDPRESS_DB_USER=${MYSQL_USER}
- WORDPRESS_DB_PASSWORD=${MYSQL_PASSWORD}
- WORDPRESS_TABLE_PREFIX=${DB_PREFIX}
Nous procéderons de la même manière pour créer notre container MariaDB.
bdd:
# default port 3306
image: 'mariadb'
hostname: bdd
container_name: bdd
env_file:
- .env
restart: unless-stopped
networks:
- nt_wordpress
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
volumes:
- ${MYSQL_LOCAL_HOME}:/var/lib/mysql
Puis nous finirons par déclarer les réseaux. nt_wordpress sera créé en mode bridge, et nous indiquons que le réseau mcvlan_nw est déjà créé et que le container doit s’y connecter.
networks:
nt_wordpress:
name: nt_wordpress
driver: bridge
mcvlan_nw:
external: true
Ce qui donne à la fin :
services:
wordpress:
image: 'wordpress'
container_name: wordpress
hostname: wordpress
env_file:
- .env
restart: unless-stopped
networks:
mcvlan_nw:
ipv4_address: "192.168.1.1"
nt_wordpress:
depends_on:
- bdd
volumes:
- ${WORDPRESS_LOCAL_HOME}:/var/www/html
- ${WORDPRESS_UPLOADS_CONFIG}:/usr/local/etc/php/conf.d/uploads.ini
- ${WORDPRESS_MUPLUGINS}:/var/www/html/test/wp-content/mu-plugins
environment:
- WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST}
- WORDPRESS_DB_NAME=${MYSQL_DATABASE}
- WORDPRESS_DB_USER=${MYSQL_USER}
- WORDPRESS_DB_PASSWORD=${MYSQL_PASSWORD}
- WORDPRESS_TABLE_PREFIX=${DB_PREFIX}
bdd:
# default port 3306
image: 'mariadb'
hostname: bdd
container_name: bdd
env_file:
- .env
restart: unless-stopped
networks:
- nt_wordpress
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
volumes:
- ${MYSQL_LOCAL_HOME}:/var/lib/mysql
networks:
nt_wordpress:
name: nt_wordpress
driver: bridge
mcvlan_nw:
external: true
Il nous manque maintenant le fichier des variables. On va créer le fichier .env
sudo nano .env
Puis nous indiquons les variables et les valeurs.
#variable wordpress
export WORDPRESS_LOCAL_HOME=./wordpress
export WORDPRESS_UPLOADS_CONFIG=./config/uploads.ini
export WORDPRESS_MUPLUGINS=./mu-plugins
#variable mariadb
export WORDPRESS_DB_HOST=bdd
export MYSQL_LOCAL_HOME=./mariadb
export MYSQL_DATABASE=wordpress
export MYSQL_USER=NOM_USER
export MYSQL_PASSWORD=mot_de_passe_fort
export MYSQL_ROOT_PASSWORD=mot_de_passe_encore_plus_fort
export DB_PREFIX=mywp_
Une fois toutes ces étapes réalisées, il suffira de lancer notre programme.
sudo docker compose up -d
Finalement il n’y aura plus qu’à renseigner l’IP du réseau macvlan pour s’y connecter.
Dans notre exemple, il s’agira de http://192.168.1.1
Conclusion
Nous avons vu comment effectuer l’installation de WordPress sous docker.
Encore une fois, Docker nous permet d’installer facilement un ensemble d’application très facilement.
Lors d’un prochain article nous verrons comment rajouter Nginx, créer un nom de domaine gratuitement, et la mise en place du certificat https.