logo de docker et wordpress

Installation de WordPress sous Docker

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

fenetre d'installation de wordpress

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.