Exposer ses dépôts GIT avec GOTWEB

[../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/.

../img/got.png

GIT

code source exposé par GITWEB

httpd(8)

Stefan Sperling

GOT (Game Of Trees)

de remplacer GIT

nous le dira

GOTWEB

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].

--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

`----

slowcgi(8)

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"

| }

| }

`----

let's encrypt

cette lecture

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 .

`----

https://dev.galusik.fr

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

gigit