Migrations: de Wordpress à un site statique avec Nikola

Ça y est, c'est fait ! Le premier billet de ce blog écrit avec Nikola et, encore mieux, tout mon site tibonihoo.net est désormais constitué de page statiques.

Après 12 ans de bons et loyaux services, Wordpress (merci à Automattic et sa communauté) ne "propulsera" donc plus ce site qui consumera donc moins de ressources et me demandera marginalement moins de maintenance.

Le nouveau logiciel que j'utilise pour le remplacer s'appelle Nikola (un grand merci à Roberto Alsina, Chris Warrick et aux autres contributeurs) et génère la totalité du site sous forme de pages html statiques une bonne fois pour toute.

La flexibilité de Nikola m'a permis de maintenir l'essentiel de l'organisation du blog avec étonnamment peu de changements d'adresses pour le contenu mais quand même avec un minimum d'effort décrit dans la suite du billet.

Et, pour le plus important, on retrouve les billets de blog et les photos aux mêmes endroits.

Quelles étapes pour migrer vers Nikola ?

1. Exporter le contenu de Wordpress

La conversion d'un site Wordpress fonctionne à partir de l'export XML que propose de faire Wordpress lui-même.

Cet export avait néanmoins deux problèmes dans mon cas.

Premièrement un hack dans le code de Wordpress est nécessaire pour pouvoir recupérer la traduction des titres de billets, comme indiqué sur https://github.com/qtranslate/qtranslate-xt/issues/199

In wp-admin/includes/export.php change
  `echo apply_filters( 'the_title_rss', $post->post_title );
to
  `echo apply_filters( 'the_title_export', $post->post_title );

Deuxièmement, j'ai du corriger à la main dans l'XML exporté certains chemins de pièces jointes (des images surtout) qui commencaient par /mnt/sda... (cad des chemins absolus sur le serveur), mais ca ne concernait que les posts les plus anciens (et donc de vieilles versions de Wordpress).

2. Importer le contenu

À partir d'un tel export, Nikola permet facilement de générer un site et c'est très bien décrit sur le manuel.

Cependant comme mon site a utilisé plusieurs "générations" de l'extension qtranslate (-x, -xt) pour écrire les billets en français et en anglais, quelques petites choses clochaient.

Comme Nikola est lui-même écrit en Python, je ne me suis pas privé pour corriger le maximum de soucis, avec cette pull request: https://github.com/getnikola/nikola/pull/3275

Ensuite un simple appel en ligne de commande suffit à faire le gros du travail:

nikola import_wordpress --qtranslate --one-file --no-draft --export-comments -o site tlog.WordPress.2019-06-16.xml

Le résultat est un site fonctionel, avec un thème "brut" et consultable localement avec:

nikola build && nikola serve

Il est ensuite très facile de jouer avec les thèmes de Nikola (pas très nombreux mais faciles à adapter) pour avoir un rendu plus personnel.

3. Les déplacements de contenu

Nikola génére automatiquement des pages de redirection pour le contenu qui change de place du fait de conventions différentes d'avec Wordpress pour organiser le contenu.

Une chose qui n'est pas faite automatiquement cependant c'est de mettre à jour les liens relatifs dans les billets importés, si bien que ces liens continuent de pointer vers les pages de redirection. Pas très grave mais un peu de search&replace m'a aidé à améliorer ça.

En tout cas, c'est une fonctionalité très utile et dont il est possible d'abuser pour ne changer que partiellement l'organisation du site en jouant sur les liens de redirections que Nikola enregistre dans son fichier conf.py et en changeant quelques préférences. Dans mon cas j'ai renommé le dossier "posts" en /blog pour conserver la plupart des billets à la même adresse mais j'ai adopté le rangement des "pages" dans /pages tel quel.

Une dernière chose après tout ça, les urls "traduites" dans mon Wordpress étaient sous le dossier /blog/en alors que Nikola les mets dans /en/blog. J'ai préféré suivre Nikola sur ce coup, mais cela m'a valu quelques search&replace supplémentaires.

4. Et les galleries photos ?

Un truc chouette et pas trivial en même temps c'est que Nikola me permet de remplacer à la fois mon blog Wordpress et mes galleries photos propulsées par zenPhoto.

Pour conserver un minimum des infos (titre et commentaires d'album) que j'avais avec zenPhoto j'ai dû réécrire les pages d'index des albums. Mais Nikola permet de faire ça simplement.

5. Statistiques et commentaires

Nikola permet d'utiliser des systèmes de commentaires comme disqus que j'utilisais sur mon blog, mais vu le peu de commentaires que je reçois j'ai préféré arrêter de fournir cette fonctionalité.

Wordpress avait un système de suivi de la fréquentation du blog qui était sympa et c'est sans doute le seul point où je vais réellement y perdre. J'aurai pu choisir de tracker mes quelques lecteurs avec Google analytics, mais j'ai décidé de me contenter du système de stats plus simpliste et sans tracking offert par mon host Dreamhost.

6. Et...

C'est fini !

En guise de conclusion, la plupart des problèmes que j'ai rencontrés viennent de mon utilisation d'un plugin pour publier les billets en deux langues.

Peut-être que ce billet aidera d'autres personnes avec une configuration similaire et se demandant ce qui les attend.