Migrer un site wordpress avec wp-cli

Depuis la sortie de wp-cli, les opérations courantes sur un site web écrit en wordpress sont plus facilement automatisables. La mise à jour et la migration sont moins contraignantes.

Les opérations qui suivent demandent un accès ssh aux différents serveurs.

On souhaite migrer notre site de https://foo.com vers https://bar.com. On se rend sur le serveur foo.com, on suppose que notre site web wordpress est dans le dossier /path/wordpress. On va créer un backup de la BD et du projet (dans /backup)

ssh -p xxx username1@foo.com # où xxx est le numéro de port pour se connecter en ssh à foo.com
cd /path/wordpress
wp-cli db export /backup/wordpress.sql
tar czf /backup/wordpress.tar.gz .
exit

On copie les données de l’ancien site vers le nouveau (on peut se connecter à bar.com, et le copier directement via foo.com, mais parfois les hébergeurs bloquent certains ports, on va le faire le local).

Sur le serveur distant, on suppose qu’on a l’arborescence suivante: /path2/wordpress pour le dossier wordpress, et /backup2/ pour le dossier de backup.

mkdir -p /tmp/wordpress
cd /tmp/wordpress

# récupère le backup de bar.com en local
scp -P xxx username1@foo.com:/backup/wordpress.sql .
scp -P xxx username1@foo.com:/backup/wordpress.tar.gz .

# envoie le backup vers foo.com
scp -P yyy wordpress.sql username2@bar.com:/backup2/ # où yyy est le numéro de port pour se connecter en ssh à foo.com
scp -P yyy wordpress.tar.gz username2@bar.com:/backup2/

On se rend ensuite sur le serveur bar.com pour y migrer notre site.

ssh username2@bar.com
cd /path2/wordpress
tar xzf /path2/wordpress.tar.gz

On doit ensuite créer une base de donnée si elle n’existe pas, et modifier les informations d’accès dans le fichier wp-config.php, On peut l’ouvrir via nano ou un autre éditeur en console (nano wp-config.php).

On modifie les informations suivantes:

define('DB_NAME', 'Nom de la base de données');

/** MySQL database username */
define('DB_USER', 'Nom d`utilisateur de la BD');

/** MySQL database password */
define('DB_PASSWORD', 'Mot de passe d`accès à la BD');

/** MySQL hostname */
define('DB_HOST', 'Nom d`hôte de la BD (ou localhost si pas fourni)');

Reste à importer les différentes tables, et changer le nom de domaine, on est toujours dans foo.bar:/path2/wordpress.

wp-cli db import /backup2/wordpress.sql
wp-cli search-replace "https://foo.com" "https://bar.com"
wp-cli search-replace "https%3A%2F%2Ffoo.com" "https%3A%2F%2Fbar.com"
# on en profite aussi pour migrer les url qui ne sont pas en https://
wp-cli search-replace "http://foo.com" "https://bar.com"
wp-cli search-replace "http%3A%2F%2Ffoo.com" "https%3A%2F%2Fbar.com"

On vérifie également le fichier .htaccess, en remplaçant toute occurrence de foo.com par bar.com, et notre site devrait être disponible via https://bar.com.