Créer et maintenir à jour un site avec git

Dans ce billet, je vais présenter une manière de gérer un site web statique via un dépôt git. Je ferais certaines références à Yunohost mais il va sans dire que cette approche peut se décliner sur n'importe quel serveur.

La racine

Si vous avez déjà votre propre serveur (sous nginx, apache, lighttpd...) vous pouvez passer cette étape.

Sur Yunohost, si on ne veut pas mettre les mains dans les configs nginx, il va falloir installer un "bac à sable", une application vide qui sera la racine de notre site.

Lors de ma première installation de Yunohost, cette appli était disponible depuis l'interface mais il semblerait que ce ne soit plus le cas. Il faudra donc copier-coller ce lien dans le formulaire "Install custom app" en bas de la page d'installation.

https://github.com/YunoHost-Apps/multi_webapp_ynh

Gitea

Si ce n'est pas déjà fait, on va commencer par installer un serveur Gitea.

Pour pouvoir créer des hook côté serveur, il va d'abord falloir rajouter une ligne au fichier /opt/gitea/custom/conf/app.ini :

[security]

DISABLE_GIT_HOOKS = false

(liste complète des options)

Penser ensuite à redémarrer gitea

$ yunohost service restart gitea

Vous pourrez maintenant créer un post-receive hook sur votre dépot.

#!/bin/sh

TARGET=/var/www/webapp_user/domain.tld_/

git --work-tree=$TARGET clean -fd

git --work-tree=$TARGET checkout --force

Enfin, n'oubliez pas de donner l'accès à gitea sur le serveur:

$ chown gitea:gitea /var/www/webapp_user/domain.tld_/

Dès que vous ferez un git push depuis votre client vers le dépot, git se chargera de mettre à jour à votre site.

Problème de taille

Si vous avez besoin de gros fichiers pour votre site (audio/vidéo) ou si vous rajoutez beaucoup de fichiers d'un coup, vous risquez d'être bloqué par la limite d'envoi.

Vous pouvez contourner ce problème en augmentant la limite de git sur votre machine avec la commande:

$ git config --global http.postBuffer 400000000

Ce qui vous donnera une taille maximale de 50 Mo par push (1 Mo par défaut)

(documentation)

Si vous voyez l'erreur suivante:

error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413

Vous pouvez remonter la limite en éditant le fichier /etc/nginx/conf.d/git.domain.tld.d/gitea.conf (sur le serveur)

client_max_body_size 50M;
Puis redémarrer nginx avec la commande:
$ yunohost service restart nginx

(documentation)

Autoindex / serveur de fichier basique

Si vous voulez pouvoir vous consulter l'arborescence de votre serveur depuis n'importe quel navigateur, vous pouvez activer l'autoindex en modifiant le fichier /etc/nginx/conf.d/domain.tld.d/webapp_domain.tld_.conf

location / {
	autoindex on;
	alias /path/to/root/ ;
}

Attention cependant, tout le monde pourra voir ce que vous avez sur votre serveur. En ce qui concerne les fichiers statiques (CSS, JS, police d'écriture...) utilisés sur les pages publiées, tout le monde peut déjà les voir, d'une manière contournée.

Le seul cas qui me vienne à l'esprit dans lequel cette visibilité pourrait poser problème est si vous avez des mots de passe écrit "en dur" dans un fichier mais c'est une très mauvaise pratique à éviter dans tous les cas.

Sur un domaine j'utilise l'autoindex pour facilement retrouver des fichiers de police (.woff, .ttf) ou quelques librairies javascript.