Migration du blog sous Pelican

Et oui, un de plus à migrer son blog sous Pelican ! J’ai lu plusieurs récits de migration depuis trois mois, ce qui dénote un engouement certain pour ce moteur de blog par… essentiellement des développeurs. La perspective de gérer ses articles comme du code, avec un article par fichier, de construire le blog avec une commande ‘make’ et publier dans un gestionnaire de source nous ramène en terrain familier.

Les points suivants ont achevé de me convaincre :

  • l’écriture dans une syntaxe simplifiée (un markup langage) ; j’ai opté pour Markdown. Je peux commencer l’écriture d’un article depuis n’importe quel équipement, même l’application mémo de mon téléphone.
  • la possibilité de tout gérer depuis un terminal en mode texte, de l’écriture d’un article à sa publication. Ce qui me permet de travailler facilement depuis n’importe où avec une connexion SSH sur mon serveur
  • La génération de pages statiques. Adieu PHP, on peut héberger encore plus facilement.

En fait c’est le prolongement du raisonnement qui m’avait fait passer de WordPress à PluXml.

L’import depuis PluXml est faisable par l’import RSS mais la conversion en Markdown est approximative. J’ai donc écrit un outil de migration dédié en langage Python. Ce qu’il apporte c’est une mise en forme plus fidèle lors de la conversion en Markdown, une gestion des catégories et des tags. Il ne couvre peut-être pas tous les cas mais il m’a permis de migrer mes articles sans retouche manuelle. Cet outil est disponible sur mon compte GitHub : PluXml2Pelican

Pour les thèmes c’est selon les goûts de chacun. Pelican fournit un langage de templating Python Jinja 2. A chacun de voir s’il veut un thème simple ou un thème plus dynamique avec du JavaScript. Quelques thèmes d’exemple sont fournis sur GitHub. Pour ma part, Je suis parti d’un thème basé sur Bootstrap, le kit CSS qui permet facilement de faire du Responsive Design afin d’avoir un site qui s’adapte à tous les périphériques Web (ordinateurs de bureau, tablettes, téléphones) et je l’ai adapté à ma sauce.

En résumé, Pelican est un très beau projet. Sous le capot, on trouve un outil bien pensé, dans l’esprit du langage Python. Il est possible de développer des plugins qui effectueront des actions à différentes phases de la génération des pages HTML. Le seul point manquant, c’est le support des commentaires. Normal pour un outil qui génère des pages statiques. La solution proposée consiste à déléguer cette tâche à Disqus, un service Web privé. Cela ne me convient pas du tout, je me suis auto-hébergé pour garder la main sur mes données. J’ai gardé les commentaires de tous les articles et je cogite à une solution alternative…. En attendant, j’ai ouvert un email pour le blog qu’on peut utiliser pour échanger : blogduyax at madyanne.fr

Thorfinn - 2013-11-20 13:02:51

Merci pour cette article. Je voulais savoir quel système de commentaire tu utilises avec Pelican?

Merci

Yax - 2013-11-26 08:30:00

@Thorfinn Salut ! Avec deux autres libristes nous avons démarré l’écriture d’un système de commentaire pour les blogs statiques et plus particulièrement Pelican. L’idée c’est d’intégrer aux sources du blog les commentaires approuvés en tant que fichier Markup. Le système se décompose en 3 parties :

  • un formulaire de création de commentaire en HTML / JavaScript dans le template Pelican,
  • un serveur de commentaire avec lequel le formulaire interagit en RESTful,
  • un plugin Pelican qui traite les commentaires lors de la génération statique du blog.

Nous avons pas mal d’idées en chantier sur la partie serveur qui sera multi-sites, qui permettra de gérer l’approbation des commentaires.

Il y a encore pas mal de boulôt donc le serveur n’est pas encore publié. Par contre, tu peux trouver le plugin Pelican (CaCause) et le template dans les sources de mon blog. Et en attendant le serveur, j’ai développé rapidement un serveur de POST en Python qui sauve le commentaire en Markdown et l’envoie par email à l’auteur du blog. C’est minimal mais ça fait le job ! C’est aussi disponible sur mon GitHub.

Esprit - 2014-05-18 12:34:12

Bonjour Yax,

Je commence à utiliser Pelican et je pensais utiliser Discourse ( http://www.discourse.org/ ) pour les commentaires. Cependant, ton système me semble vraiment intéressant donc j’ai décidé de le tester. J’ai ajouté le plugin “cacause”, je l’ai configuré dans pelicanconf.py, j’ai réussis à configurer un thème pour qu’il affiche le bouton “commenter” en bas des articles mais je bloque.

Quand je clique sur commenter, il me donne une erreur : “The requested URL /post_a_new_comment was not found on this server.”

Je ne vois pas à quoi il fait référence et j’ai beau fouiller sur ton github, je ne comprends pas. Peux-tu m’aiguiller ?

Yax - 2014-05-18 14:15:00

@Esprit Ce qui te manque c’est la partie serveur. Pelican génère des pages statiques mais pour poster des commentaires nous avons besoin d’un bout de code qui gère la requête POST. En attendant la fin du développement de CaCause, j’ai implémenté un serveur minimaliste en Python qui accepte la requête POST, récupère les données du formulaire et m’adresse le fichier Markdown en email afin que je puisse l’incorporer aux sources du blog. C’est très rustique mais pour gérer peu de commentaires ça fait le job. Ce bout de serveur est disponible sur mon GitHub avec la configuration NginX correspondante pour le lier à l’URL /post_a_new_comment. N’hésites pas à me recontacter si ce n’est pas clair.

Esprit - 2014-05-19 11:16:32

@Yax, merci pour ta réponse rapide. Je comprends mieux et je vois maintenant où se situe mon problème… J’utilise apache2 sur ma debian de test et je n’ai pas ngynx.

J’imagine qu’il doit être possible de configurer apache2 pour qu’il fasse la même chose. Il faut juste que je trouve comment. :-)

Esprit - 2014-05-19 11:32:05

@Yax, juste pour être sûr que j’ai bien compris jusqu’ici.

J’ai récupéré les fichiers sur ton Github ( https://github.com/kianby/postcomment ).

J’ai mis les fichiers “daemon.py” et “postcomment.py” dans le dossier “/srv/postcomment/”, j’ai mis le fichier “postcomment” dans le dossier “/etc/init.d/” et il ne reste plus qu’à configurer apache2 pour qu’il prenne en compte la requête POST ?

Je me suis rendu compte d’un autre point. Il faut absolument un serveur mail sur le même serveur pour que ça fonctionne ? Peut-on tester sans cela ?

(Désolé pour toutes ces questions, je débute en développement web. :-) )

Yax - 2014-05-19 13:00:00

Salut ! Pour Apache, tu as plusieurs possibilités. Tu peux utiliser le module proxy, de manière similaire à ce que j’ai fait sous NginX. Il y a un exemple ici. Ou utiliser WSGI mais je crois que ça demande une modification de code.

Pour l’envoi de mails, j’ai effectivement un serveur en local mais ce n’est pas obligatoire. La librairie SMTPLib permet de se connecter à un serveur SMTP distant en connexion sécurisée (SSL) ou non. Voici un exemple. La doc officielle de la lib est ici.

Tu tiens le bon bout. Bon courage

Esprit - 2014-05-20 12:00:08

Salut Yax, grâce à tes conseils, j’avance ! Mais pas très rapidement. J’ai rajouté ces lignes dans le fichier “/etc/apache2/sites-enabled/000-default” :

ProxyPreserveHost on
<Proxy *>
    Order allow,deny
    Allow from all
</Proxy>
ProxyPass /post_a_new_comment http://127.0.0.1:8001/
ProxyPassReverse /post_a_new_comment http://127.0.0.1:8001/

J’ai lancé le daemon.py ( $ python daemon.py et $ sudo python postcomment.py -start ). Le fichier de log dans “/var/log/” me dit que le service a bien démarré ( $ cat postcomment.log ) :

2014-05-15 08:22:45,230 - __main__ - INFO - Server Starts - 127.0.0.1:8001

Et pourtant, quand je clique sur commenter sur mon blog de test, j’ouvre bien la page “http://a.b.c.d/post_a_new_comment" mais j’arrive sur l’architecture de fichier du serveur.

Pas facile… ;-) Quand j’aurai fini, j’essayerai de documenter ça dans un de mes premiers article, ne serait-ce que pour m’en souvenir si je dois le refaire un jour.

Yax - 2014-05-20 22:00:00

Je n’ai pas eu le temps de monter un serveur Apache mais je me demande si ça ne vient pas de proxy *. Fais l’essai avec :

ProxyPreserveHost on
ProxyPass /post_a_new_comment http://127.0.0.1:8001/
ProxyPassReverse /post_a_new_comment http://127.0.0.1:8001/

Si ça ne fonctionne pas envoie moi ta config de 000-default sur mon email blogduyax at madyanne.fr et je monterai une vraie maquette de mon côté.

Votre commentaire
Le site Web est optionel
Le message peut être rédigé au format Markdown