I develop stuff and have opinions on things -
About me/Contact

Articles:

Détails de déploiement du blog

J’ai récemment changé de serveur, et j’en ai profité pour nettoyer ma procédure de déploiement de blog. Comme expliqué dans un article précédent, ce blog utilise pelican et des fichiers rst, ce qui veut dire que je le maintiens dans un dépôt git privé.

Puisque j’ai migré sur un serveur plus puissant, je peux maintenant faire tourner gitea sans problèmes, ce qui me permet d’utiliser des webhooks pour indiquer les nouveaux commits à un service en arrière-plan.

Voici donc un serveur HTTP minime écrit avec aiohttp; et comme le blog est sur la même machine que gitea je n’ai pas besoin de m’embêter avec des secrets, une config nginx ou autre, et je peux plutôt ouvrir un port sur localhost. (au pire: quelqu’un réussira à build mon blog à ma place)

import os
import sys
from aiohttp import web
from subprocess import run
from asyncio import get_event_loop
from os.path import abspath, dirname

os.chdir(dirname(abspath(sys.argv[0])))

def update():
    run(['git', 'pull'])
    run(['./deploy.sh'])

async def handle(request):
    loop = get_event_loop()
    await loop.run_in_executor(None, update)
    return web.Response(text='OK')

app = web.Application()
app.add_routes([web.get('/deploy', handle)])
web.run_app(app, host='localhost', port=2345)

Le service tourne à travers systemd, qui s’occupe des redémarrages et des crashsv:

[Unit]
Description=Blog deployment
After=network.target
[Service]
ExecStart=/usr/bin/python -OO /home/blog-deploy/blog/server.py
User=blog-deploy
Restart=on-failure

[Install]
WantedBy=multi-user.target

Je fais la partie système dans un script bash, car c’est la façon la plus rapide de l’écrire. Comme pelican purge le dossier avant de construire le blog, j’ai besoin de balader le dossier de destination pour éviter que les fichiers disparaissent le temps du build.

#!/usr/bin/env bash
pushd $(dirname $(realpath $0))
mkdir -p tmp_build public_html
make OUTPUTDIR=$PWD/tmp_build html
chown blog-deploy:http -R tmp_build
mv public_html to_delete
mv tmp_build public_html
rm -r to_delete
Si vous avez des remarques ou commentaires à propos de cet article, n’hésitez pas à me contacter.