Exposer ses dépôts GIT avec GOTWEB

Écrit le 2020-07-02

game of trees

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@).

➛ COMMENTAIRE