Logo
Site - Blog
We are hackers.

De Wordpress à Pelican, devenir un blogueur cool

J'ai longtemps été un utilisateur et un développeur wordpress mais j'ai récemment décidé de découvrir le monde merveilleux des blogs générés de façon statique. Une journée d'ennui durant ces vacances d'hiver m'a poussé à refondre le blog d'ATILLA à l'aide de pelican un générateur de blog statique écrit en python.

Qu'est-ce-qu'un générateur de blog statique ?

Comparé aux pages web dynamiques, où la page web est affichée à l'aide d'un code s'éxecutant côté serveur et nécessitant un base de données, les sites générés de façon statique ont simplement besoin qu'on leur fournisse des fichiers écrits dans un langage de balisage comme Markdown ou reStructuredText qui vont être transformés en un site statique prêt au déploiement.

Pourquoi faire le switch ?

reStructuredText

On peut écrire des articles comme de simple fichiers textes utilisant le format reStructuredText, plus besoin de stocker les articles dans une base de données. Avoir des articles au format texte permet de réaliser des modifications plus facilement, en utilisant mon éditeur préféré, Sublime Text. Jetez un coup d'oeil au code source de cet article et regardez la facilité avec laquelle on peut intégrer des bouts de codes, c'est comme éditer un fichier source. La coloration syntaxique est permise par l'excellent pygments

print("Hello, World!")
#include <stdio.h>

int main(void) {
    printf("Hello, world!\n");
    return 0;
}
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}
package main

import "fmt"

func main() {
    fmt.Println("Hello, world!")
}

En plus, le fait d'avoir de simples fichiers textes me permet de conserver tout le site dans un répertoire git très facilement.

Affichage plus rapide des pages

Etant donné qu'il n'est pas nécessaire de reconstruire la page web à chaque fois que le serveur reçoit une requête, les pages s'afficheront beaucoup plus vite.

Github pages

La possibilité d'héberger le site en utilisant Github pages, qui est un service d'hébergement de pages statiques offert par Github, utilisant un répertoire git pour le stockage.

Le facteur geek

Pourquoi pas ? Utiliser Pelican permet de jouer un peu avec Python, Jinja2 et reStructuredText. Que demander de plus ?

Faire le switch

Le choix s'est porté sur Pelican à la place de deux autres générateurs de sites statiques que sont Jekyll et Octopress car ils sont tous deux écrits en Ruby.

Si vous pensez qu'un autre framework vous satisferait plus, jetez un coup d'oeil à la liste complète des générateurs de sites statiques staticsitegenerators.net

Installer Pelican est aussi simple que de lancer :

$ pip install pelican

Puis, il faut créer un nouveau projet. Pour cela, il faut entrer dans votre console pelican-quickstart, Pelican va vous poser une série de questions à propos de votre site afin de générer un fichier de configuration appelé pelicanconf.py et de créer un squelette pour votre site avec des scripts sympas pour que tout fonctionne.

$ pelican-quickstart

Vous pouvez éditer votre pelicanconf.py pour configurer plus en détail votre site, jetez un coup d'oeil au manuel pour voir les options disponibles, ou vous pouvez voir mon pelicanconf.py pour plus d'inspiration. Tout le contenu va dans le dossier content.

Vous pouvez exporter vos articles Wordpress dans un fichier XML en allant dans Outils -> Export et puis en lançant pelican-import pour générer le texte adapté dans le dossier content.

$ pelican-import --wpfile -o content/ wordpress-export.xml

Vous pouvez prévisualiser votre site en faisant un fab serve ou make devserver, cela va démarrer un webserver qui va afficher votre site à l'adresse http://localhost:8000/ et créer un processus qui surveille les changements dans le dossier content.

fab serve
make devserver

Héberger sur Github

Au lieu d'utiliser Github Pages, où vous êtes obligés de stocker vos pages html à la racine du projet parce que Pelican les met dans le dossier de sortie. J'ai choisi d'utiliser les pages de projet. Avec les pages de projet, on laisse les fichiers html dans une git branch appellée gh-pages et Github va publier ces pages pour nous à l'adresse GITHUB_USERNAME.github.com/GITHUB_PROJECTNAME. depuis cette branch.

Remarquez la différence entre la branch master et la branch gh-pages.

On n'a pas à maintenir cette branch manuellement, il existe un script appelé ghp-import qui va gérer cela pour nous. Il copie le dossier dans la branch gh-pages.

pip install ghp-import

Maintenant avec ghp-import installé vous pouvez publier vos pages de projet en lançant la commande make github qui va construire les pages html dans le dossier output/, lancez la commande ghp-import pour copier les fichiers du dossier dans la branch gh-pages et faites un git push afin de push les changement sur Github.

make github

Vous pouvez aussi utiliser votre propre nom de domaine, dans notre cas on a laissé un fichier CNAME dans un dossier statique appelé divers et on a ajouté le chemin du dossier à EXTRA_PATH_METADATA dans pelicanconf.py afin que Pelican le copie à chaque fois que l'on reconstruit le site.

STATIC_PATHS = ['divers']
EXTRA_PATH_METADATA = {
    'divers/CNAME': {'path': 'CNAME'},
}