Monter sa stack docker pour wordpress

docker wordpress
Dernière mise a jour 18 Déc 2022 a 04:11 pm

L’autre jour, Monsieur WordPress m’a rappelé que la version de php que j’utilise pour mon blog était obsolète. En effet, je suis en 7.4 et il est vivement conseillé de passer à php8. La montée de version de php n’est pas une opération anodine : des plugins peuvent péter, des templates s’abîmés. Alors comme toute migration de cette importance, Il est vivement conseillé d’anticiper ses éventuels effets de bord  sur un environnement de tests, où l’on pourra tout casser à volonté. D’habitude, je travaille sur une VM avec apache ou j’héberge une copie de mon blog . Mais là je me dis, que dans une démarche de sobriété (noooooon sudo systemctl stop bulshit) ce serait l’occasion parfaite pour remettre le nez dans docker et monter ma stack wordpress de dev.

Donc le but de ce billet avoir un environnement de tests pour wordpress qui soit identique avec celui qui fait tourner mon blog en prod. Je pars du principe que tu as déjà installé docker-compose sur ton host.

On va y aller par étapes:
1 – sauvegarder données du blog wordpress en prod
2 – monter la stack avec docker-compose
3 – réintégrer les données (base sql + fichiers)

Donc j’aurais besoin:
– 1 conteneur apache
– 1 conteneur phpmyadmin
– 1 conteneur mariadb

Afin de simplifier , j’ai volontairement zapper la partie reverse proxy et https. ce sera l’objet d’un prochain billet.

1 – Sauvegarde du blog actuel

Toujours l’occasion de revérifier qu’elles sont fonctionnelles 🙂
– le fichier sql du dump de la bdd
– les fichiers data wordpress (dans /var/www/wordpress/wp-content) et le fichier wp-config.php

2 – Créer le docker-compose

  • être iso avec la prod (versions php ,mariadb,wordpress)
  • avoir un fichier .env qui centralise variables d’environnement

Pour le docker-compose:

version: '3.3'

services:
   db:
     container_name: mariadb-wp
     image: mariadb:10.3.34
     env_file: .env
     volumes:
       - wp_db:/var/lib/mysql/
     restart: always
     networks:
     - wp

   wordpress:
     depends_on:
       - db
     container_name: wordpress
     image: wordpress:6.0-php8.1-apache
     volumes:
       - wp_statics:/var/www/html/
     ports:
       - 8087:80
     restart: always
     networks:
     - wp

   phpmyadmin:
     depends_on:
       - db
     image: phpmyadmin/phpmyadmin
     restart: always
     ports:
       - 8088:80
     environment:
       PMA_HOST: db
     networks:
     - wp

networks:
  wp:
    driver: bridge

volumes:
  wp_db:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: /srv/wordpress/db
  wp_html:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: /srv/wordpress/html

3 – Créer un fichier .env

copier/coller les lignes et adapter avec les valeurs qui vont bien:

MARIADB_ROOT_PASSWORD: mdpcomplexce
MARIADB_DATABASE: wordpress
MARIADB_USER: userbase
MARIADB_PASSWORD: xxxxxx

pour le conteneur wordpress:

WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: userbase
WORDPRESS_DB_PASSWORD: xxxxxx

Créer les volumes:
mkdir /srv/wordpress/{db,html}

Lancer la stack:
docker-compose up -d

on vérifie que nos conteneurs s’exécutent bien :
docker ps

Si jamais le status est en « exited » , on vérifie les logs pour débuguer:
docker logs mariadb-wp

Si besoin , se connecter au conteneur mariadb par ex et tester la connexion au sgbd:
docker exec -it mariadb-wp /bin/bash

Créer l’utilisateur de la base de données:
mysql> CREATE USER ‘user’@’localhost’ IDENTIFIED BY ‘password’;
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON * . * TO ‘user’@’localhost’;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

4 – Éditer le wp-config:

Réintégrer et copier le fichier wp-config.php du blog de prod: 
sudo cp backup/wordpress/wp-config.php /srv/wordpress/html/

Vérifizer les lignes suivantes et au besoin adapter avec les bonnes valeurs, mais normalement ya rien à toucher:

/** Nom de la base de donnée */
define( ‘DB_NAME’, ‘wp’ );

/** Utilisateur de la base de données MySQL. */
define( ‘DB_USER’, ‘tutox’ );

define( ‘DB_PASSWORD’, ‘ pasworddedingue’ );

/** Adresse de l’hébergement MySQL. */
define( ‘DB_HOST’, ‘localhost’ );

Parfois, pour le DB_HOST il faut mettre le nom du service docker , ici appelé ‘db’ dans le docker-compose.
C’est ici aussi qu’il faut préciser le port sur lequel écoute mariadb. Parfois on le change car on a déja un service sql qui tourne sur le 3306. Donc là on pourrait mettre par ex: localhost:3307 ou db:3307.

5 – Importer la base sql

docker exec -i conteneur mysql -uroot -pmotdepassecomplexe < backups/blog.sql

6 – Synchroniser les fichiers:

sudo rsync -azv backups/blog/wp-content/ /srv/wordpress/html/wp-content/

Vérifier les droits, si pas bons alors:

chown $user -R /srv/wordpress/statics/wp-content/

7 – Modifier les URL du site:

Ouvrir phpmyadmin éditer les liens dans wp_options:

Test url en local:
http://@ip_locale:8087

Et voilà une instance de wordpress toute pareille que celle de prod. On va pouvoir tester, casser et tout reconstruire 😀

Dans un prochain billet on peaufinera avec notamment l’utilisation d’un reverse proxy et l’utilisation du https.

 

 

 

liens utiles:
https://xavki.blog/docker-compose-tutoriaux-francais/
https://www.alsacreations.com/tuto/lire/1838-Docker-compose.html
https://www.armandphilippot.com/article/docker-compose-traefik-wordpress
https://blog.ouvrard.it/2016/02/22/migrer-mon-wordpress-vers-docker/
https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-docker-compose

2 commentaires sur Monter sa stack docker pour wordpress

Leave a Reply

Votre adresse de messagerie ne sera pas publiée.


*