Migration de Pelican vers Hugo

Migration vers un nouveau moteur de blog statique

Migration de Pelican vers Hugo

Migration vers un nouveau moteur de blog statique

Comme vous avez pu le remarquer, je suis assez friand de sites statiques. C’est pour cette raison que ce blog migre une nouvelle fois vers un nouveau moteur de blog statique, encore me direz vous ? Nous allons voir pourquoi.

Pourquoi une nouvelle migration ?

Après avoir fait du Python pendant de nombreuses années, il m’arrive de temps en temps de coder en Go. Ce langage est relativement simple, performant, et compilable sur de nombreuses architectures (notamment ARM).

J’en ai donc profité pour analyser les offres de blogs statiques développés en Go. J’ai découvert l’excellent projet nommé Hugo

Les avantages d’Hugo

  • S’installe facilement, il suffit de copier un binaire. En Python, parfois on se retrouve confronté à des problèmes de dépendance (même en utilisant des virtual env)
  • Ultra rapide, il permet de générer environ 1000 pages en 1 seconde
  • Multi-langue (i18n)
  • Base de données virtuelles (data)
  • Raccourci (shortcode)
  • Facile d’utilisation, flexible, …
  • Nombreux thèmes
  • etc ..

Etapes de la migration

J’ai profité de cette migration pour effectuer quelques changements, notamment :

  • Changer de thème (Voir mes contributions), j’ai préféré contribuer à une nouveau thème que convertir le mien.
  • Passer les commentaires en full statique en utilisant le projet (Staticman), malgrès l’ébauche du projet cacause que nous avions initié il y a environ 5 ans avec Nahir Mohamed & Yannic Arnoux

1) Passage de reStructuredText vers Markdown

La première étape a été de migrer le contenu des billets du format reStructuredText vers MarkDown. Etant donné que je n’avais pas beaucoup de fichiers à convertir (environ une vingtaine). J’ai effectué la conversion fichier par fichier avec la commande suivante pandoc --from=rst --to=markdown --output=monbillet.md pour ensuite finaliser la conversion à la main pour lequel l’outil pandoc n’a pas réussi la conversion.

Compatibilité avec le blog précédent

Afin que la migration soit la plus transparente possible, que ce soit pour les précédents billets ou les flux RSS. Il a fallu effectuer quelques modifications sur la configuration par défaut d’Hugo

Alias

Hugo permet de créer des Aliases pour une page. Je me sers de cette option pour migrer les URL de mon ancien blog vers les nouvelles. Ceci sans devoir utiliser la technique de l’URL rewriting des serveurs webs (Apache ou Nginx).

Feed RSS

Hugo gènère des fichiers RSS avec le format index.xml, mes anciens flux avaient le format feed.atom. Pour garder ce format, il faut ajouter au fichier config.yaml les lignes suivantes :

# Rename RSS feed
outputs:
  home: ["HTML","RSS"]
  taxonomy: ["HTML","RSS"]

mediaTypes:
  "application/rss":
    suffix: "atom"

outputFormats:
  RSS:
    mediatype: "application/rss"
    baseName: "feed"

Je ne sais pour quelle raison, Hugo ne propose pas d’option pour désactiver la génération des flux RSS non tronqué, pour cela on est obligé de créer un nouveau template dans le fichier layouts/_default/rss.atom

Migration vers un nouveau thème

Dans un premier temps, j’ai voulu conserver mon thème, mais n’ayant pas touché des feuilles de style depuis un bon bout de temps, j’ai préféré me rabattre sur un nouveau thème et de contribuer au projet Beautiful Hugo

J’ai rajouté quelques contributions au thème d’origine:

Ajout du support des commentaires statiques

Pour cela, j’utilise l’excellent projet Staticman. Pour ajouter un commentaire, staticman utilise github pour effectuer une pull request sur le projet du blog

  1. Créer le fichier staticman.yml
  2. Dans github ajouter l’utilisateur staticmanapp en tant que collaborateur de votre blog.
  3. Accepter l’invitation de collaboration curl https://api.staticman.net/v2/connect/<USERNAME>/<REPOSITORYNAME>, Si l’invitation est acceptée, vous devriez voir le texte OK!

Vérification du bon déroulement de migration

Afin de vérifier que la migration s’est déroulée sans encombre, j’ai comparé les noms des fichiers générés entre l’ancien et nouveau contenu.

Recupération de l’ancien contenu

rsync -avr --delete  w4a153382@ssh.web4all.fr:/datas/vol3/w4a153382/var/www/blog.jesuislibre.org/htdocs .
cd htdocs
find . | sort > /tmp/old.txt

Génération du nouveau contenu

hugo
cd public
find . | sort > /tmp/new.txt

Comparaison des fichiers

Pour finir, je me suis assuré via meld que le contenu de chaque billet a été migré sans trop d’incidence.

Prochaine étapes

Afin d’améliorer la génération du blog, la prochaine étape sera d’ajouter de l’automatisation via des plugins github, par exemple vérifier avec Travis-ci qu’aucune erreur ne se produit lors de l’ajout d’un commentaire ou d’un nouveau billet.

Source:

5 commentaires

damien

Moi je suis en train de passer de Wordpress à Pelican…devrais-je faire du Wordpress à Hugo ?

Bruno Adelé

Salut @damien, Il y’avait certaines choses qui me dérangés sur Pelican, notamment lorsque certaines pages étaient mal encodés (accent and co ). Si tu n’a pas trop avancé dans ta phase de migration, je te conseille grandement de passer directement de Wordpress vers Hugo :)

Bruno Adelé

Salut @Yax, effectivement c’est tellement simple de valider une PR github (commentaire). Voici le workflow

Accepter la PR sur github puis exécuter les commandes suivantes à la main (En attendent d’automatiser via Travis)

git pull origin master
make publish

Il est même possible de faire de la validation colaborative (via github) :)

Stéphane 22Decembre

Je reste actuellement sur Pelican malgré ses defauts, plutôt qu’Hugo pour une bonne raison :

Hugo massacre la mise en forme de mes poèmes ! Dès que j’ai vu ca, j’ai laissé tomber l’idée de migrer.

C’est dommage parce qu’effectivement, pelican commence à être bien lourd.