DĂ©ployer son site statique automatiquement sur un Raspberry Ă  la maniĂšre de Netlify

  • bash
  • jekyll

Publié le 2020-03-01

Netlify permet, entre autre entre, de se brancher à Github et de builder ton site statique automatiquement à chaque commit et de le déployer sur un serveur. Ce service est vraiment top car tu n'as rien à faire. Netlify s'occupe de tout.

C'est gĂ©nial mais tu n'as pas forcĂ©ment envie de dĂ©pendre d'un service tiers de plus. Ou alors comme moi, tu hĂ©berge toi-mĂȘme ton serveur web.

J'ai une solution low tech à base de Crontab qui ne demande aucune dépendance: un script Bash. Assez basiquement il s'occupe de:

  1. faire un git pull si nécessaire
  2. rebuild le site avec Jekyll
  3. mettre Ă  jour les sources du site

Ca tiens en 13 lignes de code. Voilà ce que ça donne:

#!/bin/bash
# deploy.sh

UPSTREAM=${1:-'@{u}'}
LOCAL=$(git rev-parse @)
REMOTE=$(git rev-parse "$UPSTREAM")
BASE=$(git merge-base @ "$UPSTREAM")

git fetch origin

if [ $LOCAL = $BASE ]; then
  git pull origin master
  /home/pi/.rvm/gems/ruby-2.4.0/wrappers/jekyll build
  rm -rf /var/www/portfolio/*
  cp -r _site/* /var/www/portfolio/
fi

Ce fichier est versionné avec mon projet Jekyll, je l'ai sobrement appelé deploy.sh et il est situé à la racine du projet.

Il suffit ensuite d'appeler ce script toutes les heures par exemples en mettant en place un CRON. Pour l'installer, il suffit de lancer la commande:

crontab

et ensuite copier / coller la ligne suivante (en adaptant à ton cas spécifique).

0 *  *   *   *    cd /home/pi/portfolio && ./deploy.sh

Et voilà, c'est terminé.

La seule limitation est le délais de latence vu que le CRON ne se lance que toutes les heures. On pourrais modifier le CRON pour l'executer toutes les minutes mais le mieux serais d'écouter un webhook de Github lors de la création d'un commit et relancer le build. C'est l'idéal mais c'est plus compliqué et du coup c'est un peu exagéré pour mon usage. Ca fait le taff et c'est trÚs bien.

Articles liés