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 s­ta­tique sur GAE. Ap­pli­quée à un blog sta­tique gé­né­ré par Ni­ko­la, il faut dans les gran­des ­lignes :

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

  2. Mettre le fichier app.yaml suivant dans le répertoire files à la racine du projet :

    runtime: python27
    api_version: 1
    threadsafe: true
    
    handlers:
    - url: /
      static_files: index.html
      upload: index.html
    
    - url: /en/
      static_files: en/index.html
      upload: en/index.html
    
    - url: /(.*)
      static_files: \1
      upload: (.*)
    
  3. Modifier le paramètre DEPLOY_COMMANDS dans le fichier conf.py comme suit (en remplaçant gae_project_id par l’identifiant du projet créé en 1. :

    STRIP_INDEXES = False
    PRETTY_URLS = False
    DEPLOY_COMMANDS = {
        'default': [
            "cd output && gcloud app deploy --project gae_project_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