Exposer ses dépôts GIT avec GOTWEB
Pour exposer au monde votre code source géré par GIT, il existe quelques interfaces web. Gitweb est livrée avec GIT, voici son code source exposé par GITWEB. C'est léger et efficace mais, ce n'est pas pensé pour tourner dans le chroot var/www du serveur maison OpenBSD httpd(8).
Par bonheur, Stefan Sperling, un développeur OpenBSD a initié le développement de GOT (Game Of Trees). L'objectif n'est pas tant de développer une alternative à GIT sous une licence plus libre (troll inside).
Le but n'est même pas de remplacer GIT. L'objectif est de développer une alternative compatible avec la structure des dépôts GIT, une alternative qui priorise la facilité d'utilisation, une alternative maison développée par et pour l'équipe d'OpenBSD.
GOT va remplacer CVS ? L'avenir nous le dira.
Bref, revenons à l'exposition du code. Conjointement à GOT, est fourni GOTWEB. À l'instar de GITWEB, son rôle est d'offrir une interface web pour exposer vos codes sources.
Pour rappel, GOT est compatible avec la structure des dépôts GIT, GOTWEB n'est ainsi pas limité aux dépôts GOT.
Dépôts publics
Vos dépôts doivent se trouver dans /var/www/got/public. Ils ne sont pas destinés à être des répertoires de travail, d'où l'option –bare.
tout neuf
git init --bare opengnuthing.git
cloner un existant
git clone --bare git@framagit.org:fredg/snaps.git
droits
doas chown -R vous:www opengnuthing.git
description
$EDITOR opengnuthing.git/description
adresse de clonage public
$EDITOR opengnuthing/cloneurl
Plus d'explications plus bas.
Installation
doas pkg_add gotweb
Activation
gotweb est un programme CGI dont le but est de fonctionner dans un environnement chrooté dans /var/www
httpd et slowcgi
Le serveur httpd ne peut servir que des pages statiques (HTML/CSS/JS). Il est requis d'activer slowcgi(8).
doas rcctl enable httpd slowcgi doas rcctl start httpd slowcgi
Configuration
Comme d'habitude, la page de manuel fournit la configuration de base à ajouter à /etc/httpd.conf :
types { include "/usr/share/misc/mime.types" } server "gotweb.example.com" { listen on * port 80 root "/htdocs/gotweb" location "/cgi-bin/*" { root "/" fastcgi } location "/*" { directory index "index.html" } }
Certificat SSL
Je ne vais pas vous expliquer comment mettre en place des certificats géré par let's encrypt, je vous conseille cette lecture.
Je vous livre une configuration fonctionnelle. L'ordre des instructions est importante. Ainsi, l'adresse http est redirigée vers https.
server "dev.galusik.fr" { listen on * port 80 root "/htdocs/gotweb" location "/.well-known/acme-challenge/*" { root "/acme" request strip 2 } location * { block return 301 "https://$HTTP_HOST$REQUEST_URI" } location "/cgi-bin/*" { root "/" fastcgi } location "/*" { directory index "index.html" } } server "dev.galusik.fr" { listen on * tls port 443 root "/htdocs/gotweb" tls { certificate "/etc/ssl/galusik.fr.fullchain.pem" key "/etc/ssl/private/galusik.fr.key" } hsts location "/.well-known/acme-challenge/*" { root "/acme" request strip 2 } location "/cgi-bin/*" { root "/" fastcgi } location "/*" { directory index "index.html" } }
Clone URL
Afin d'autoriser la collaboration, il est pertinent de permettre le clonage de votre dépôt via https.
Lien
Le dépôt (/var/www/got/public/opengnuthing) n'est visible que par l'interface gotweb. Selon la configuration précédente, cette dernière est située à cet endroit : /var/www/htdocs/gotweb
Ainsi, https://dev.galusik.fr pointe sur ce répertoire. Il n'y a qu'à faire un lien symbolique vers votre dépôt.
cd /var/www/htdocs/gotweb ln -s ../../got/public/opengnuthing.git .
git update-server-info
Cette commande est utile pour mettre à jour votre dépôt afin que les fichiers soient accessibles via https.
Elle doit être exécutée à chaque changement (push). Pour automatiser la procédure, créer un fichier dans le dossier hooks.
$EDITOR opengnuthing.git/hooks/post-receive git update-server-info chmod +x opengnuthing.git/hooks/post-receive
Et, voilà, votre dépôt est clonable de façon sécurisée :
git clone https://dev.galusik.fr/opengnuthing.git
GIGIT
Quoi Gigit ?
Si vous souhaitez du plus léger, du sans CGI, que du static, je vous conseille gigit mis au point par Charlène (cwen@).