J’ai récemment décidé de publier mes articles en français et en anglais. Au préalable, je devais trouver et tester des plugins afin d’en choisir un. J’ai donc passé du temps, plus que je ne l’aurais cru, à le faire fonctionner localement à travers Docker. Comme j’ai rencontré quelques pièges, j’ai décidé de partager la recette.
1. Créer les artefacts
On se connecte sur le serveur avec ssh, puis on génère le fichier « dump » de la base de données. Ici, sous mysql:
mysqldump -u USER -p PASSWORD > /BLOG_BASE_DIR/blog.sql
Remplacez « USER », « PASSWORD » et « BLOG_BASE_DIR » par les valeurs appropriées.
2. Télécharger les artefacts
Localement, créez un répertoire blog
. C’est à partir de celui-ci que les étapes suivantes seront exécutées.
rsync [USER@]HOST::/BLOG_BASE_DIR PATH_TO_BLOG_DIR/site
Puis déplacez blog.sql
.
> mkdir db
> mv site/blog.sql db/.
3. Ajouter des directives à blog.sql
Le fichier blog.sql
contient les valeurs de production de WordPress. Il faut en modifier deux afin qu’il fonctionne dans un autre environnement.
Donc, à la fin de blog.sql
, ajoutez
UPDATE options SET option_value='http://127.0.0.1' WHERE option_name IN ('siteurl', 'home');
UPDATE options SET option_value='LOCAL TRIAL' WHERE option_name='blogname';
⚠️ Il est important de ne PAS ajouter de slash à la fin de l’adresse, sinon vous aurez des redirections à l’infini quand vous tenterez d’accéder à votre site.
4. Mettre à jour wp-config.php
Ouvrez site/wp-config.php
, et changez les valeurs DB_USER
et DB_PASSWORD
pour root
. Puis DB_HOST
pour localhost
.
define('DB_USER', 'root');
define('DB_PASSWORD', 'root');
define('DB_HOST', 'localhost');
5. Créer le fichier setup.sh
docker exec blog_db_1 bash -c 'mysql -u root --password=root < /db/blog.sql'
docker exec blog_server_1 bash -c 'a2enmod rewrite'
docker exec blog_server_1 bash -c 'docker-php-ext-install pdo_mysql'
docker exec blog_server_1 bash -c 'docker-php-ext-install mysqli'
docker exec blog_server_1 bash -c 'service apache2 restart'
Pour le détail: La première ligne charge les données dans la base de données.
La ligne suivante installe modrewrite
dans apache, suivi de deux modules php: pdo_mysql
et mysqli
.
Finalement, le service apache2 est redémarré.
6. Créer le fichier docker-compose.yml
Ici on utilise docker-compose pour orchestrer deux conteneurs docker. Ça s’installe simplement avec
pip install docker-compose
Voici le fichier docker-compose.yml
services:
db:
image: mariadb:10.4.24
hostname: blog-db
ports:
- "127.0.0.1:3306:3306"
volumes:
- ./db:/db:ro
environment:
- MARIADB_ROOT_PASSWORD=root
server:
image: php:7.4-apache
hostname: blog-server
ports:
- "127.0.0.1:80:80"
volumes:
- ./site:/var/www/html/
depends_on:
- db
Évidemment, utilisez les versions de base de données, php et apache qui vous conviennent. Naturellement, la présente recette peut ne plus être exacte en fonction de ces versions.
7. Démarrer les conteneurs
docker-compose up
8. Exécuter setup.sh
Dans un nouveau terminal, exécutez
bash setup.sh
9. Redémarrer le conteneur apache
Dans le terminal où vous avez exécuté docker-compose up
, interrompez le (CTRL+C
) et redémarrez le (docker-compose up
).
Explication: La dernière commande de setup.sh
a pour effet d’éteindre le conteneur apache. (La cause étant que les conteneurs s’éteignent lorsque le processus qui tourne sous le PID 1 s’éteint. Comme apache tourne sous le PID 1 et que la commande service apache2 restart
l’éteint, le conteneur s’éteint.)
10. Accéder à votre copie locale
Démarrez votre navigateur de choix et pointez le sur http://127.0.0.1
🎉
Nettoyage
- Éteignez les conteneurs:
CTRL+C
dans le terminal oùdocker-compose up
a été exécuté, puis exécutezdocker-compose down
. - Supprimez le répertoire
site