Cela fait plusieurs mois que j’en avait envie, je l’ai finalement fait ce week-end : une migration complète de mon blog WordPress vers Jekyll. Vous ne devriez pas voir énormément de différences… Non, la différence est surtout pour moi, l’écriture et la gestion du site.
Je n’étais pas vraiment malheureux avec WordPress, non. Seulement embêté par certaines fonctionnalités. Par exemple l’édition d’articles est juste infâme, je finissais souvent par utiliser l’éditeur HTML en fait. La performance de WordPress est minable sans plugin externe (cache), car il fait les mêmes requêtes SQL à chaque pages vues. On ne sait jamais, peut-être que l’article change toutes les 5 minutes ?
Bref, je m’égare en trollant, parlons un peu de cette migration.
Jekyll
Jekyll est un “générateur de sites statiques”, écrit en Ruby. Il y en a d’autres comme Hyde ou Blatter en Python. J’ai essayé Jekyll et Hyde, j’ai trouvé le premier plus flexible, notamment au niveau de la gestion des filtres Liquid customisé et des permalinks.
Pourquoi avoir migré sur un système statique ?
Plusieurs raisons à cela mon bon monsieur.
Gain de mémoire et performances
Ce blog est hébergé sur un petit serveur virtuel. PHP et MySQL étant assez gourmand au niveau mémoire, me passer d’eux est non négligeable avec mes 512mb de RAM.
N’ayant pas énormément de visites, on ne peut pas dire que mes instances PHP travaillaient beaucoup. Mais on ne peut pas battre la performance de pages .html directement servies par Nginx.
Plus simple pour écrire
Sur WordPress quand tu veux écrire un article, tu dois t’identifier dans l’interface d’administration, chercher le lien pour ajouter un article dans le bordel ambiant, cliquer dessus, et là tu peux commencer à t’amuser. Ah et tu dois être connecté aussi.
Avec Jekyll, mes articles sont de simples fichiers textes en Markdown ou HTML. Je peux écrire et tester le rendu de l’article localement sans avoir besoin d’être connecté aux internets.
Backup
Le site n’est qu’un ensemble de fichiers, donc Git.
Utilisation
Généralement un site basique sous Jekyll ressemble à ça :
.
|-- _config.yml
|-- _includes
|-- _layouts
| |-- default.html
| `-- post.html
|-- _posts
| |-- 2007-10-29-why-every-programmer-should-play-nethack.textile
| `-- 2009-04-26-barcamp-boston-4-roundup.textile
|-- _site
`-- index.html
_config.yml
Diverses variables utilisées pour la configuration, comme les permalinks, le moteur de rendu Markdown et d’autres choses.
_includes
Généralement des partials que vous pouvez utiliser dans vos templates. Si vous avez plusieurs bouts de HTML qui se répète un peu partout dans vos pages, c’est bon de les factoriser ici.
_layouts
Les templates de vos pages web.
_posts
Vos articles écrits en .html, .markdown ou .textile. Jekyll se basera sur l’extension lors de la compilation.
_site
Après compilation, toutes les pages iront dans ce dossier. C’est sur ce dossier que vous devez faire pointer votre serveur web.
Lancer Jekyll en local
jekyll --server
Migrations
J’avais vraiment envie de garder l’existant, et donc il a fallut trouver des astuces pour la migration. Rentrons dans le vif du sujet.
Bouger le contenu
Pour rapatrier les articles, j’ai utilisé un utilitaire appelé exitwp. Je n’ai pas converti les anciens articles en Markdown pour garder au maximum le rendu qu’avaient les anciens articles (oui parce que WordPress te rajoute plein de merdes en HTML, qui aurait été viré avec la conversion). Heureusement rien ne m’empêche d’écrire les nouveaux billets autrement.
WordPress met généralement tout ce que tu uploads dans un dossier. J’ai voulu les mettre sur Amazon pour gagner de l’espace disque. J’ai utilisé cette commande :
s3cmd put --acl-public --recursive --guess-mime-type * s3://phollow
Note sur les commentaires
Avec un site statique tu ne peux plus utiliser un système de commentaires server-side. Du coup on peut se rabattre sur un système comme Disqus ou Livefyre. Important : pour importer les anciens commentaires, il suffit d’installer un de ces systèmes sur WordPress avant la migration.
Code source
Je mets à disposition le code source de la nouvelle version du site sur Github à cette adresse. Il y a quelques trucs sympas, dont un Rakefile qui permet le déploiement des articles au travers de rsync.
rake deploy