[../img/got.png]
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/.
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].
,----
| git init --bare opengnuthing.git
`----
,----
| git clone --bare git@framagit.org:fredg/snaps.git
`----
,----
| doas chown -R vous:www opengnuthing.git
`----
,----
| $EDITOR opengnuthing.git/description
`----
,----
| $EDITOR opengnuthing/cloneurl
`----
Plus d'explications plus bas.
,----
| doas pkg_add gotweb
`----
/gotweb/ est un programme CGI dont le but est de fonctionner dans un environnement /chrooté/ dans //var/www/
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
`----
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"
| }
| }
`----
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"
| }
| }
`----
Afin d'autoriser la collaboration, il est pertinent de permettre le clonage de votre dépôt via /https/.
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 .
`----
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
`----
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@).