Initialisation du blog
Pour m'introduire, je ne suis pas un ingénieur web et je déteste le développement. Il y a beaucoup trop de Framework dans la nature (ReactJS, Angular, jquery, ...). La programmation asynchrone de Javascript n'est pas triviale à mettre en place et maintenir à l'échelle d'un site web complet. Sans parler de la gestion de dépendances qui est la goute qui fait déborder le vase (oui je parle de toi npm
). Je ne suis pas non plus un web designer donc le HTML/CSS et moi, nous ne sommes pas copains (principalement parce que je ne sais pas les utiliser à leurs plein potentiel).
C'est plus ou moins la raison pourquoi j'ai quitté le développement web et je suis devenu ingénieur SysOps.
Danger
Cet article de blog est déprécié. Je l'ai laissé en ligne pour des raisons historiques. Maintenant le blog est généré avec MKDocs.
Un peu de théorie
C'est un site static. Pas de code Javascript alambiqué, de framework et autres CMS. Toutes les pages et les medias sont distribués via un service d'hébergement web basique que je détaillerais dans un autre articles prochainement.
Comment il est généré ?
Je ne voulais pas trop me faire des noeuds au cerveau en construisant la structure du site (HTML & company) et je voulais pouvoir me concentrer uniquement sur le contenu de ce blog. J'ai donc cherché un outil pour générer de jolie site à partir de ficher texte.
Digression
Pas mal de monde connaissent déjà Jekyll. C'est un outil développé en Ruby qui fait le job. Il n'y a qu'à configurer deux/trois fichiers, écrire des articles au format texte, construire et ... voilà une super site internet. Mais retournement de situation ! Je n'ai pas utiliser Jekyll parce que de mon point de vu, l'outil n'est pas adapté à mes besoins. Vous vous demandez pourquoi ? Voilà donc :
- Je n'y connais pas grand chose avec Ruby donc c'est plutôt difficile pour débugger
- La gestion de dépendances de paquets Ruby sont une horreur
- les plugins Jekyll sont (pour une majorité) développés par la communauté donc beaucoup d'entre eux sont incompatible les uns des autres, ont des bouts de documentation manquant ou alors ne fonctionne tout simplement pas.
- J'ai déjà déployé un autre blog il y a quelques années avec Jekyll et je n'en ai pas un bon souvenir. Je le maintiens toujours, mais ce n'est pas trivial ...
Quel est la solution ?
J'utilise Pelican !
C'est un outil tout simple de génération de site statique qui ne requiert que Python pour fonctionner. Il me permet d'écrire mon blog au format Markdown. Les fichiers HTML sont templaté via Jinja. Etant un ingénieur SysOps, Python, Markdown, Jinja sont, parmi tant d'autres, des mots clés qui me font plaisir ! (Il vient même avec un Makefile !!)
Donc Pelican est un outil de génération de site statique HTML via des fichiers Markdown et des templates Jinja.
Super ?! Quand est ce qu'on commence ?!
Mise en pratique
Je ne vais pas réinventer la roue, donc suivez le guide de démarrage rapide Pelican et revenez ici pour une description en profondeur de mon environnement pour ce blog.
Pré-requis
I have Python 3.9.6 installé sur mon PC et je fait tourner tout ça dans un VirtualEnv.
Création du VirtualEnv :
Rentrer dedans :
Installer les paquets requis :
Structure des fichiers
Voilà l'organisation actuelle des mes dossiers/fichiers (PI c'est celui par défaut fourni par la configuration Pelican):
.
├── Makefile
├── content
│ ├── articles
│ │ ├── init-en.md
│ │ └── init-fr.md
│ ├── images
│ │ └── logo.png
│ └── pages
├── output
├── pelicanconf.py
├── publishconf.py
├── tasks.py
└── theme
└── flex
-
Le dossier
content
contient les articles, pages et medias rangés en trois dossiers :articles
pour les posts du blogimages
pour les médiaspages
pour les pages supplémentaires du blog
-
Le dossier
output
contient tous les fichiers statiques HTML and CSS générés après avoir buildé le site. -
Le dossier
theme
contient le theme actuel du site. J'utilise actuellement le theme communautaire Flex. -
Les fichiers
Makefile
ettasks.py
sont auto-générés par Pelican lors de la création du projet avec le guide de démarrage rapide Pelican. -
Le fichier
pelicanconf.py
contient les paramètres par défaut Pelican. -
Et enfin
publishconf.py
contient les paramètres spécifiques Pelican utilisés lors de la publication du blog.
Configuration du blog
J'utilise la configuration par défaut fournie par le guide de démarrage rapide Pelican et ai juste ajouté deux ou trois paramètres additionnels.
Génération du blog
Maintenant que j'ai site complet, il faut que je le build.
Quand je développe pour ce blog (ou que j'écrit des articles), j'utilise la commande suivante :
Cela génère les pages du blog et les sert avec un petit serveur web local à l'adresse http://localhost:8000.Une fois que je suis content de l'apparence du blog/articles, j'utilise la commande fournie pour générer une version publiable du site :
Tous les fichiers du site se retrouvent générés dans le dossieroutput
:
output
├── 404.html
├── archives.html
├── authors.html
├── categories.html
├── drafts
│ ├── init-fr.html
│ └── init.html
├── images
│ ├── getpelican.jpg
│ ├── getpelican.png
│ └── logo.png
├── index.html
├── tags.html
└── theme
└── ...
La différence majeur entre ces deux commandes et que publish
utilise la configure publishconf.py
et devserver
utilise uniquement pelicanconf.py
.
Conclusion
Maintenant que j'ai un environnement complet de build de mon blog et que j'ai besoin d'écrire un nouvel article, make publish
et tada.
Dans un futur billet de blog, j'expliquerai comment j'héberge ces fichiers statiques pour les rendre accessibles sur internet.