Migration d’un site WordPress

Sujet

Nous avons 2 environnements, dits de “développement” et de “production”.
Les 2 ne sont pas nécessairement sous la même URL.
On peut par exemple avoir :
www.xxx.com et wwww.yyy.com
ou bien
www.dev-xxx.com et www.xxx.com

Nota

Comme tous les sujets, la solution que je décris n’est pas universelle, il en existe bien d’autres.
Elle n’est que le reflet de mon expérience, i.e. une solution parmi d’autres, et elle vous conviendra plus ou moins bien selon les cas.
Elle n’est pas exclusivement décrite pas à pas, il est donc nécessaire de disposer de bases (parfois solides) pour se lancer dans ce qui est décrit.
Et si vous avez des questions/suggestions, le formulaire de contact est là pour ça.

Description du Problème

Nous développons avec le site de développements, disons de façon itérative Agyle/Scrum.
Tous les X jours une nouvelle version sort et doit être déployée dans l’environnement de production.
Laissons de côté la migration du coude source, c’est un autre sujet.
Nous allons donc nous concentrer sur le contenu de la base à migrer.
A noter que cette solution est compatible avec un environnement WP mono-site et multi-sites.

La solution

Nous allons utiliser un outil tel que SearchAndReplace de Interconnect/IT

Lisez les consignes pour cet outil, comme par exemple effectuer une sauvegarde de votre base de production AVANT tout action.

Vous vous dites … pas besoin de cet outil, je sais faire un Search And Replace dans un fichier, à la main … je suis un expert de sed, awk, global search and replace sous emacs, vi … ben moi aussi.

Sauf que, j’attire votre attention sur ceci : Comme le dit la documentation, cet outil vous aide à faire un “Safe Search and Replace on Database with Serialized Data”. Je vous laisse méditer là dessus.

Les étapes

Effectuer un dump partiel de la base de données du site de développement

L’idée n’est pas de décrire comment faire un dump total ou partiel de votre base de données, à vous de vous débrouiller.
Mais contentez vous de ne prendre que les tables dont le préfixe vaut $table_prefix (défini dans wp-config.php).
Assurez vous de prendre les directives de structure et contenu des tables (création et peuplement).

Importation

Importez ce dump tel quel dans la base de production.

Installer SearchAndReplace à la racine de votre site

Par exemple si $home_url() vous rend /home/www/ alors installez le à cet endroit.
Vous aurez alors /home/www/SearchAndReplace/ que je conseille de renommer … car cet outil est dangereux.
Par exemple /home/www/SearchAndReplace/ devient /home/www/foobarbaz/

Lancer le script depuis le site de production

www.url-site-de-production/foobarbaz/index.php
Notez que le script va alors charger les paramètres d’accès à votre base, il les retrouve dans wp-config.php

Première passe

Il s’agit de remplacer l’url du site de développement par l’url du site de production
Admettons que l’on migre www.dev-xyzt.com vers wwww.xyzt.com, nous aurons alors :

Dans certains cas, vous devrez :
a. Sélectionner les tables qui participent à la migration, surtout si vous n’avez pas pris exclusivement les tables dont le préfixe vaut $table_prefix
b. Sélectionner “dry run” pour faire une première passe sans conséquence. Elle ne modifie pas la base mais vous permet de vérifier le résultat que ça donnerait. Du reste JE CONSEILLE !

Enfin, le lancement effectif se faire par un clic sur “Live Run”. Attention c’est irréversible.

Seconde passe

Admettons que votre site de développement charge l’image www.dev-xyzt.com/wp-content/uploads/2018/12/mon-image.png
En base, nous aurons une référence à son emplacement physique avec un PATH absolu, quelque chose comme /home/www/wp-content/uploads/2018/12/mon-image.png
Imaginons maintenant que vos deux sites sont hébergés aux mêmes endroits, mais dans des sous-répertoires différents.
Ou bien sur des hébergements différents avec des répertoires aux règles de nommage différents, dues aux contraintes de votre hébergeur.
Nous pouvons donc avoir cette configuration :

Développement : /home/www/site_dev/wp-content/uploads/2018/12/mon-image.png
Production : /home/www/site_prod/wp-content/uploads/2018/12/mon-image.png

ou bien :

Développement : /home/www/wordpress/wp-content/uploads/2018/12/mon-image.png
Production : /home/www//wp-content/uploads/2018/12/mon-image.png

En bref, il est possible que les répertoire source et destination des images (ou toute autre ressources) soient différents.
Il faut donc faire une seconde passe de SearchAndReplace.

Par exemple : chercher “site_dev” et le remplacer par “site_prod”.

Conclusions

Je trouve cet outil très pratique, il facilite la tâche et gère très bien le cas des “Serialized Datas”.
Je ne l’ai pas testé avec Drupal et Joomla, mais gageons que ça fonctionne aussi très bien !