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 constistué de page statiques.

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

Le nouveau logiciel que j'utilise pour le remplacer s'appelle donc nikola (un grand merci à Roberto Alsina, Chris Warrick et aux autres contributeurs) et génère la totalité du site sous forme de html statique 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'adresse du contenu mais quand même avec un minimum d'effort décrit dans la suite du billet.

Au final, 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.

Cette 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 version 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 billest en deux français et en anglais, quelques petites choses clochaient.

Comme nikola c'est du 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éplacement 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 automaiquement 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é a 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 pour les "posts" en "blog" pour conserver la plupart des billets à la même adresse mais j'ai adoter le rangement des "pages" dans /pages.

Une dernière chose après tout ça, les urls "traduites" dans mon Wordpres é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 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ème de commentaires comme disqus que j'utilisais sur mon blog, mais vu le peu de commentaire que je reçois j'ai préférer arrêter de fournir cette fonctionalité.

Wordpress avait un systeme 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 un peu simpliste et sans tracking offert par mon host Dreamhost.