Vous l'avez peut-être remarqué, mais le site a un peu changé.
J'ai profité d'un changement de VPS pour revoir également le mode de publication de mes articles. Depuis le début, mon blog était propulsé par Drupal, CMS sur lequel j'avais eu l'occasion de travailler il y a déjà bien longtemps, dans sa version 7.
Drupal est un CMS puissant, écrit en PHP, et utilisant une base MySQL.
Au fil du temps cependant, il est devenu de plus en plus lourd, beaucoup plus orienté vers une utilisation en entreprise, et clairement trop complexe pour un simple site personnel. De plus, les mises à jour se font maintenant plus facilement via composer, qui n'est pas forcément disponible sur un hébergement mutualisé "traditionnel".
J'ai donc décidé de partir sur un CMS plus léger. Comme j'utilisais déjà Grav pour le site de ma société ID NUM Consulting, je suis parti sur la même base.
Grav utilise une syntaxe de type Markdown pour les articles, ce qui est assez simple à produire.
Je n'ai pas trouvé de solution toute faite pour la migration, mais j'avais un volume de données tout à fait maîtrisable (un peu plus de 200 articles).
Les points à considérer étaient les suivants :
Dans un premier temps, j'ai cherché s'il existait des skeletons Grav adaptés à ce que je voulais faire, mais au final je suis parti sur une installation de base, avec quelques plugins :
Pour le thème, je suis également parti du thème Quark (le thème de base), que j'ai customisé selon mes besoins.
Dans un premier temps, je voulais caractériser le contenu de mon site sous Drupal. Pour agit efficacement, il faut savoir de quoi on parle.
PLutôt que de partir de la base de données, j'ai préféré faire un scraping de mon site pour en extraire les éléments. J'ai fait ça avec un programme python, et plusieurs modules :
Le programme fait un appel pour chaque numéro de node Drupal. On récupère ensuite les éléments tels que titre, chemin (URL), type de contenu, date de publication, catégorie, tags, images et fichiers.
A partir de là, j'ai pu avoir une liste des contenus, et leur catégorie et tags. J'avais assez peu de contenus avec des images et des fichiers, j'ai donc préféré ne pas passer de temps à reprendre ces éléments de manière précise.
Une fois que le programme de liste a été réalisé, un autre programme me permet de récupérer le contenu, et le convertir en Markdown, tout en générant l'entête qui va bien pour donner les méta-données :
J'en ai profité pour valider le contenu, éventuellement l'adapter ou le supprimer.
Je n'ai pas repris, volontairement, tout ce qui concerne le CMS Drupal, puisque j'avais arrêté de travailler dessus en version 7, et que j'imagine que ce qui était valable à l'époque (en 2012) n'est plus pertinent en 2026.
Pour la publication, je rédige les pages en local, avec une instance sur mon localhost.
Lorsque c'est OK, je pousse les modifications sur mon serveur Git.
Je vais ensuite sur le VPS, et je récupère les dernières mises à jour. Je gère ça manuellement, car je n'ai pas un rythme de publication très élevé. On pourrait sans doute ajouter un hook qui irait déclencher une mise à jour lorsqu'on fait le commit côté Git, mais je n'ai pas encore poussé l'automatisation jusque là.