Utilisation d'ansible avec hugo

Billet posté le 16 août 2016

Utiliser ansible pour mettre à jour son site web hugo

Cela fait pas mal d’articles que je parle du logiciel hugo (ici et ici) et je souhaite gagner un peu de temps quand je mets en ligne les pages ouaibes.

Actuellement le processus suivant est utilisé :

  • création de la page au format markdown ;
  • visualisation de la page via le serveur web intégré ;
  • corrections si nécessaire ;
  • git des fichiers ;
  • génération des pages ouaibes ;
  • publication des pages web via FTP.

Nous nous intéressons ici au dernier item qui est la publication (upload) des pages ouaibes sur un serveur FTP.

Dans un premier temps on peut critiquer le choix du protocole FTP (voir ce RFC). En effet, ce protocole est connu pour avoir toutes les informations qui circulent en clair sur le réseau. Non, définitivement ce n’est pas top pour la sécurité. Du coup il est possible d’utiliser rsync avec ssh afin de copier les données et de les envoyer en chiffrées. Nous allons donc nous concentrer sur rsync et ssh dans un premier temps.

rsync et ssh

C’est du vu et du revu alors bref j’utilise la ligne de commande suivante :

rsync -avuz /Users/hindy/hindy.lovetux.net/public/
hindy@orion.lovetux.net:/srv/sites/hindy/hindy.lovetux.net/

Du coup c’est simple et efficace vu que l’on recopie uniquement les changements des fichiers.

Il en résulte que je pourrais tout à fait me créer un alias shell ou bien faire un petit Makefile et puis cela me permettrait donc de publier les modifications en question.

Pour l’alias shell c’est facile :

alias deploywebsite="rsync -n -avuz
/Users/hindy/hindy.lovetux.net/public/
hindy@orion.lovetux.net:/srv/sites/hindy/hindy.lovetux.net/

Puis nous pouvons alors utiliser l’alias créé précédemment deploywebsite.

Autre variante on utilise un fichier Makefile :

all: config.toml
	rsync -n -avuz /Users/hindy/hindy.lovetux.net/public/
hindy@orion.lovetux.net:/srv/sites/hindy/hindy.lovetux.net/
Puis, on lance classiquement la commande make qui fera alors le traitement demandé.

Si l’on résume ce qu’il vient de se passer on a deux moyens différents et rapides pour publier le site web : pourquoi vouloir utiliser un autre moyen ?

Il se trouve que cela fait quelques mois que je voulais tester le logiciel ansible. Celui-ci m’ayant été proposé lors de plusieurs conversations twitter (cf ici): cela a éveillé ma curiosité et surtout cela avait l’air fun.

C’est quoi ansible et on fait quoi avec ?

ansible est un logiciel qui permet de faire de la configuration et de la gestion de serveurs.

Globalement ce que j’aime chez ansible :

  • il est multi plateforme ;
  • fonctionne sur SSH et par conséquent pas d’agent à installer ;
  • plutôt léger ;
  • description de rôles et scénarios via les playbooks.

Dans les choses que je n’aime pas chez ansible :

Un tableau comparatif des différents outils de gestion est disponible ici.

Soit le playbook suivant appelé deploy-website.yaml :

---
- hosts: orion.lovetux.net
  remote_user: hindy
  tasks:
    - name: rsync my blog to server
      synchronize: src=/Users/hindy/hindy.lovetux.net/public/
dest=/srv/sites/hindy/hindy.lovetux.net/
      remote_user: hindy

Nous voyons que la syntaxe n’est pas habituelle si vous ne conaissez pas YAML. Il en ressort cependant que c’est plutôt lisible et compréhensible rapidement bien que la syntaxe soit importante à respecter (tabulations, espaces, etc).

Pour utiliser ce playbook nous utiliserons alors la commande suivante : ansible-playbook deploy-website.yaml. Nous aurons alors une sortie ressemblant à ceci :

[hindy@lucifer hindy.lovetux.net]$ ansible-playbook deploy-website.yaml

PLAY [orion.lovetux.net]
*******************************************************

TASK [setup]
******************************************************************
ok: [orion.lovetux.net]

TASK [rsync my blog to server]
*************************************************
ok: [orion.lovetux.net]

PLAY RECAP
*********************************************************************
orion.lovetux.net          : ok=2    changed=0    unreachable=0
failed=0

[hindy@lucifer hindy.lovetux.net]$

Conclusion

J’apprécie l’idée qu’avec ansible on décrive des scénarios à dérouler et le fait qu’il n’y ait pas besoin de déployer d’agent sur le ou les noeuds que nous souhaitons administrer. La documentation d’ansible est bien, ceci étant un avantage certain ! Autre point intéressant vous pouvez échanger rapidement et facilement les playbooks avec les autres administrateurs. En revanche, YAML non je ne suis vraiment pas fan du tout, ceci étant totalement subjectif bien entendu. Quand on voit la pléthore de logiciels il n’y a plus qu’à choisir celui qui vous convient.