Migration du blog nikola + GAE

Ce blog est en lé­thar­gie pro­fonde de­puis plu­sieurs an­nées. Je ne suis pas cer­tain d’ar­ri­ver à le faire re­vi­vre, mais je vais es­sayer, en com­men­çant par vous ex­pli­quer com­ment je m’y suis pris pour le mi­grer de blog­ger à un hé­ber­ge­ment de site sta­tique gé­né­ré par ni­ko­la et hé­ber­gé sur GAE (Google app en­gi­ne).

Import dans Nikola

Nikola propose le plugin import_blogger qui permet d’importer un fichier d’export XML de blogger dans la structure des fichiers de nikola. Il s’installe par :

nikola plugin -i import_blogger

Un pro­jet ni­ko­la se crée alors avec la com­mande :

nikola import_blogger -o nom_du_blog blogger_export.xml

Il faut ensuite copier le fichier de configuration générée (par exemple conf.py.import_blogger-20171228_142937) dans le fichier conf.py et modifier la configuration selon vos souhaits.

Les fi­chiers des ar­ticles de blog sont gé­né­rés au for­mat html ac­com­pa­gné d’un fi­chier .me­ta au for­mat re­struc­tu­red­text conte­nant les mé­ta-don­nées de l’ar­ticle.

Globalement la conversion se passe bien et le rendu est acceptable. Certains articles nécessitent néanmoins une reprise. Je suis pour cela passé par les outils pandoc et html2text2 pour obtenir une version de l’article au format restructuredtext à reprendre et modifier à la main :

html2text2 article.html | pandoc -f markdown -t rst > article.rst
mv article.html article.bak

Hébergement sur GAE

Google four­nit des ex­pli­ca­tions as­sez dé­taillées pour hé­ber­ger un blog sta­tique sur GAE. Ap­pli­quée à un blog sta­tique gé­né­ré par Ni­ko­la, il faut dans les grandes lignes :

  1. Créer un pro­­jet sur la console google cloud

  2. Mettre le fi­chier app.yaml sui­vant dans le ré­per­toire files à la ra­cine du pro­jet :

    run­time:   py­thon27  api_­ver­sion:   1  thread­safe:   true    hand­lers:  -   url:   /      sta­tic_­files:   in­dex.html      upload:   in­dex.html    -   url:   /en/      sta­tic_­files:   en/in­dex.html      upload:   en/in­dex.html    -   url:   /(.*)      sta­tic_­files:   \1      upload:   (.*)  
  3. Mo­di­fier le pa­ra­mètre DE­PLOY_­COM­MANDS dans le fi­chier conf.­py comme suit (en rem­pla­çant gae_­pro­ject_id par l’iden­ti­fiant du pro­jet créé en 1. :

    STRIP_IN­DEXES   =   False  PRET­TY_URLS   =   False  DE­PLOY_­COM­MANDS   =   {        'de­fault':   [            "cd out­put && gcloud app de­ploy --pro­ject gae_­pro­ject_id"        ]  }  

Il est sans doute possible d’utiliser PRETTY_URLS en modifiant le fichier app.yaml pour prendre par défaut les fichiers index.html, mais cette configuration permet de garder les mêmes URLs que sur blogger, à condition de configurer une redirection pour les URLs existantes :

REDIRECTIONS = [
    ('2012/04/lettre-eva-joly.html', '/posts/2012/04/lettre-eva-joly.html'),
    ]

Ou encore plus simplement, comme me l’a très aimablement fait remarquer @GetNikola sur twitter, en remplaçant "posts" par "" dans la variable POSTS :

POSTS = (
            ("posts/*.txt", "", "post.tmpl"),
            ("posts/*.rst", "", "post.tmpl"),
            ("posts/*.html", "", "post.tmpl"),
            )

Ensuite un simple nikola build && nikola deploy rendra accessible le site sur l’URL https://gae_project_id.appspot.com. Libre à vous de configurer votre enregistrement DNS pour que votre nom de domaine redirige vers cette page. Il vous est également possible de configurer la génération et le renouvellement automatique de certificats afin de rendre votre site accessible en HTTPS. Cela se fait facilement sur la console google cloud.

Commentaires