Migration de blog : de Byteflow à Pelican

Contexte

Byteflow − ma belle boutique

Un jour j'ai voulu avoir Hackriculture, une baraque à frites pour partager avec le monde ma vision des frites auto-hébergées et surtout ordonner ma propre mémoire, garder des traces structurées1.

J'ai élu byteflow, écrit en python/django comme moteur moteur de blog :

  • Peu gourmand en ressources (comparé à un wordpress), ce qui est important sur mon minuscule serveur ;
  • Pouvant fonctionner avec sqlite ;
  • Bidouillable (connaissant bien python/django) ;
  • Offrant les fonctionnalités que je recherchais (auth OpenID, commentaires, tags, antispam).

Un peu de bugfix et de CSS plus tard, et je me retrouvai à la tête d'une belle2 baraque à frite colorée.

La baraque dérape…

Ce fut par la suite une histoire houleuse, pour faire bref :

  • Le côté cuisine de la baraque était souvent inaccessible ou bugué4 ;
  • Le logiciel n'est que peu ou pas maintenu ;
  • À chaque mise à jour d'une lib se casse quelque-chose5, cela faisait bien 6 mois que les flux se répandaient en 500 huiles brûlantes sans que je ne puisse réparer la chose sans prendre en main une grosse partie du code ;
  • Ça restait relativement lent ;
  • De manière générale, je n'aime pas éditer du texte dans un navigateur.

Bref, ma belle grande baraque bigarrée s'en allait à vau-l'huile.

Pelican le remplaçant − panique chez les frites ?

À l'occasion d'une discussion avec mon bon copain Georges, je cogite que plutôt que d'avoir une baraque à frites, je pourrais aussi simple avoir un blog qui marche, et qu'il pourrait être statique. Bref, il me fait re-découvrir le moteur de site statique pelican.

Petite présentation :

  • Simple et amical avec les développeurs3;
  • Plus économe en ressources tu meurs (puisque statique) ;
  • Utilisant le moteur de template jinja2, très proche de celui de Django ;
  • Pas de commentaires6, sauf à passer par un service hébergé disqus

Puisque j'aime à dire fermement Ronald je ne mangerais pas de tes frites, le dernier point était pour moi bloquant. Cependant, une fois écrémé du spam, ce blog totalisait zéro commentaires. J'ai relativisé le problème…

Migration

Problème, byteflow étant probablement utilisé par 5 4 amateurs de frites, il n'y a aucun script de migration byteflow → pelican. Ou plutôt il n'y en avait aucun.

Ta-poum ! En voici un : byteflow-to-pelican.py

Alors ça n'est pas un couteau suisse, mais un outil pour ma pomme, qui peut-être réutilisé, si vous le bricolez ; comme disait dieu : « Occupe-toi de tes frites ».

Fonctionalités :

  • Import depuis une base sqlite ;
  • Import des meta-données globales du blog ;
  • Import des articles en balisage markdown et leurs métadonnées ;
  • Import des images, en gérant gracieusement les URLs ;
  • Import des tags.

Non-fonctionalités :

  • Import depuis une base autre que sqlite ;
  • Import des commentaires ;
  • Balisages autres que markdown ;
  • Catégories ;
  • Liens internes entre les articles ;
  • Ré-écriture d'URLs.

Lire le code pour l'usage, il est documenté.

Réécriture d'URLs avec lighttpd − "301: baraque déménaged"

Vu que tout le monde avait les URLs de ma précédente baraque à frites, et que détruire des URLs ça n'est vraiment pas très sympa, il faut dire au serveur web de faire des redirections HTTP vers les pages qui vont bien7.

Exemple de configuration pour le serveur web lighttpd:

#
## Hackriculture static pelican
#

$HTTP["host"] == "hackriculture.fr" {
    server.document-root = "/var/www/hackriculture.fr/pelican/"
    url.redirect = (
      "^/blog/\d{4}/\d{2}/\d{2}/([a-z\-]+)/?" =>   "/$1.html",
      "^/blog/tag/(.*)"                       =>   "/tag/$1.html",
      "^/feeds/atom/tag/(.*)/"                =>   "/feeds/tags/$1.atom.xml",
      "^/feeds/atom/blog/?"                   =>   "/feeds/all.atom.xml",
    )
}

Deux astuces en cadeau avec le menu enfant si vous devez faire des réécritures d'URLs :

  • Ne testez pas avec votre navigateur, son cache risque de vous enduire d'erreur. curl -v http://example.com/old/url vous donne un teint plus frais ;
  • Vérifiez les logs ; On a tôt fait d'oublier une réécriture, un grep 404 /var/log/lighttpd/access.log s'impose au bout de quelques heures/jours pour vérifier les erreurs 404.

En parlant de frites, voici cher lecteur un hamburger.


  1. de gras, naturellement 

  2. Hélas, je ne peux pas vous montrer ça, archive.org n'a pas gardé la CSS. Comme quoi un crawler peut avoir bon goût… 

  3. sources versionnées dans git, makefile pour publier/régénérer, édition en local avec son éditeur de texte favori

  4. database locked aléatoires et parfois systématique, que je n'ai malgré mes efforts, jamais réussi à le débuguer. 

  5. Avec le recul, je me rend compte que l'utilisation d'un virtualenv aurait certainement évité ces soucis. 

  6. ben oui, on a dit statique… 

  7. . j'ai redirigé les URLs des articles, des tags, du flux Atom principal, ceux par tag ; considérant que le reste (page par année, mois, flux des commentaires…) n'avait pas spécialement de sens dans ce nouveau blog.