Bouée de sauvetage

Disposer d’une copie conforme d’un site WordPress en ligne sur un serveur local, est-ce vraiment utile ?

Effectuer une copie en local d’une installation WordPress déjà en ligne est très sécurisant, notamment pour tester de nouvelles fonctionnalités et éviter de laisser le site en maintenance trop longtemps en anticipant les éventuels problèmes, auxquels on fait tous face un jour ou l’autre. Cependant si vous ne monétisez pas votre site ou si n’avez que peu de trafic vous allez perdre votre temps plus qu’autre chose : effectuer un backup complet de votre WordPress avant d’essayer un plugin ou de lancer une des mises à jour majeures de WordPress (3.7, 3.8, 3.9) est suffisant… et recommandé. En cas de problème votre site sera hors ligne le temps d’effectuer un backup, pas de quoi s’affoler donc. Par contre, pour un site à fort trafic, qui génère des revenus conséquents, ou si des utilisateurs dépendent de l’accessibilité du site mère (réseaux de sites) ou encore si des utilisateurs payent pour avoir accès à une formation en ligne, on ne peut pas se permettre de laisser le site hors ligne trop longtemps. Si vous êtes dans un cas similaire, ou si vous développez, testez, ou modifiez les fichiers core, installer wordpress sur un serveur local vous permet de travailler sereinement en plus de vous permettre de travailler hors connexion. Si avez besoin d’effectuer des tests de configuration serveur, rappelons que c’est aussi une simulation de tout l’environnement de développement Web qui héberge votre site.

Copier-Coller mon WordPress et ma base de données sur mon serveur local , pourquoi ça ne marche pas ?

 

La sérialisation des données (data serialization)

Ce qui se passe, c’est que WordPress, ses thèmes, et ses plugins stockent des données en utilisant une méthode appelée la sérialisation. La sérialisation des données est la source de notre problème : si vous changez la longueur ou le nombre de caractère d’une chaîne de donnée sérialisée, vous devez aussi déclarer le nouveau nombre de caractères déclaré dans la chaîne générée.

Exemple d’une URL sérialisé :

Nous avons

$array = array( 
	'url' => 'https://wp-infinity.com'
);

Qui devient, une fois sérialisé :

a:1:{s:3:"url";s:22:"https://wp-infinity.com";}

Où s:22 est le nombre de caractères qui compose l’URL. Il y a donc bien un problème  en passant de https://wp-infinity.com (s:22) vers http://localhost/monsite/ (s:22). http://localhost/monsite/ contenant 25 caractères on devrait avoir http://localhost/monsite/ (s:25). Il nous faut donc une solution qui tienne compte des données sérialisées.

Search and Replace

Une approche simple serait de faire une sauvegarde de base de données, de lancer un script de type Search and Replace de façon à modifier tout ce qui fait référence au nom de domaine, puis d’importer la base de données modifiée dans le nouvel emplacement. Ca peut fonctionner mais…  Le script d’interconnectit.com tente de tenir compte des données sérialisées, mais cela ne fonctionne pas pour les widgets. Dans mon cas, avec mes 3 colonnes, des sidebars différentes attribués à chaque catégorie et des widgets différents par langue, ça ne me fait pas loin d’une centaine de widgets lourdement configurés, incluant du PHP et des classes CSS. Hors de question bien entendu de tout refaire à la main. Le search and replace peut fonctionner, mais vous perdez vos widgets et parfois la configuration d’un certain nombre de plugins. Bon à savoir : certains plugins disposent également de la fonction Export/Import des paramètres.

Solution : le plugin WordPress Duplicator

On a vu plus tôt qu’un trop grand nombre de plugins WordPress installé ralentit votre site. Avec WordPress Duplicator pas de problème, une fois le travail achevé vous pourrez le désinstaller. Contrairement à la fonction Export de WordPress le plugin WordPres Duplicator va vous permettre de télécharger une copie de votre site préconfiguré en fonction de la destination de cette copie. Il suffit d’indiquer les identifiants de la base de données de destination, ainsi que le nouveau répertoire où sera installé WordPress. Ca peut être une adresse locale comme : http://localhost/monsite/ou pour déplacer WordPress vers un autre répertoire : /home/votre_login_ftp/www/nouveau_dossier_de_destination/.

Exemple de création d’un package pour un import ultérieur sur un serveur local :

Configuration de duplicator pour export local   J’ai dû exclure mon fichier Upload (ici uploads2) pour réduire la taille de l’archive, sinon ça plantait en plein milieu. Si vous êtes dans mon cas, il suffit de copier-coller par la suite votre dossier upload par FTP, les images peuvent être déplacées tel-quel à la main tant qu’elles gardent le même nom de fichier. Ce sera plus rapide de toute façon, et indispensable si vous avez beaucoup d’images. Archive trop lourde, exclusion des images   Il ne vous reste plus qu’à cliquer sur Bouton next afin de lancer un scan qui vous avertira d’un certain nombre d’avertissements susceptibles de faire échouer l’opération. Comme je le disais plus haut, exclure mon dossier upload pour réduire la taille de l’archive a suffi, il restait pourtant un certain nombre d’avertissements : Création d'archive pour transfert de wordpress Télécharger le script d’installation nommé « installer.php », puis votre archive. Le script est indispensable pour déployer cette archive. Téléchargez les deux et placez-les dans le dossier de destination, là où vous voulez déployer cette copie de votre site WordPress (avec XAMPP, ce sera au sein d’un dossier placé dans le répertoire /htdocs). Telecharger archive de la copie de wordpress   Enfin, ouvrez votre navigateur et lancez localhost/monsite/intaller.php par exemple, pour une copie sur un serveur local. Les informations de connexion sont préremplies si vous les avez renseignés avant de créer l’archive. Je précise qu’il faut avoir créé la base de données au préalable, comme expliqué sur cette page pour installer WordPress en local avec XAMPP. Tester la connexion à la base de données locale avant de cliquer sur Run deployment : Test de connexion à la base de données locale   La copie du site est déployée, il ne reste qu’à effectuer la mise à jour du répertoire, des URLs et des données sérialisées. De nouveau si vous avez renseigné ces informations avant de créer l’archive, elles sont préremplies. Vous avez aussi la possibilité d’activer tout de suite les plugins installés sachant qu’ils sont désactivés par défaut, et d’effectuer un scan des tables de la base de données : Modification des données sérialisées, des URL et du répertoire où est installé WordPress   Copier maintenant le dossier uploads vers la nouvelle destination de façon à récupérer les images si comme moi, vous avez dû alléger l’archive. Enfin, procéder aux 4 étapes finales en cliquant sur chacun des liens présents, à savoir:

  1. Visualiser le rapport d’installation
  2. Sauvegarder les permaliens pour régénérer le fichier .htaccess
  3. Se promener sur le site pour vérifier que tout fonctionne
  4. Supprimer les fichiers d’installation (installer.php + l’archive)

Procéder aux 4 étapes finales

Conclusion

A chacun sa méthode, parfois un search and replace suffira, parfois non. J’ai trouvé cette solution en cherchant comment conserver mes widgets après le transfert. Une chose est sûre, je ne passerai plus que par le plugin Duplicator pour tout type de migration de WordPress. Voilà du travail bien fait. Et un plugin polyvalent.