Git --distributed-is-the-new-centralized
Chapters ▾ 2nd Edition

4.6 Git op de server - Slimme HTTP

Slimme HTTP

We hebben nu geauthenticeerde toegang via SSH en ongeauthenticeerde toegang met git://, maar er is een protocol die tot beide in staat is. Slimme HTTP opzetten is eigenlijk gewoon op de server een CGI script git-http-backend geheten activeren die met Git wordt geleverd. Deze CGI leest het pad en de headers die door een git fetch of een git push worden gestuurd aan een HTTP URL en bepaalt of de client via HTTP kan communiceren (wat elke client sinds versie 1.6.6 kan). Als de CGI ziet dat de client “slim” is, zal het op de slimme manier met deze communiceren, anders zal het terugvallen op het domme gedrag (dus het is “backward compatible” met lees acties van oudere clients).

Laten we een heel eenvoudige opzet doornemen. We zullen het gaan opzetten met Apache als de CGI server. Als je geen Apache hebt geïnstalleerd, kan je dit op een Linux machine doen met iets wat lijkt op:

$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env

Dit zet mod_cgi, mod_alias en mod_env modules aan, die alle nodig zijn om dit goed te laten werken.

Vervolgens moeten we een aantal dingen aan de Apache configuratie toevoegen om git-http-backend als afhandelaar te identificeren voor alles wat in het /git pad van je web server binnenkomt.

SetEnv GIT_PROJECT_ROOT /opt/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/

Als je de GIT_HTTP_EXPORT_ALL uit je omgevingsvariabele laat, zal Git alleen de repositories met het git-daemno-export-ok bestand erin verspreiden, net zoals de Git daemon deed.

Dan moet je Apache vertellen om verzoeken naar paden toe te staan die er zo uit zien:

<Directory "/usr/lib/git-core*">
   Options ExecCGI Indexes
   Order allow,deny
   Allow from all
   Require all granted
</Directory>

Als laatste, moet je op de een of andere manier schrijf-acties geauthenticeerd te laten plaatsvinden, mogelijk met een Auth-blok zoals deze:

<LocationMatch "^/git/.*/git-receive-pack$">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /opt/git/.htpasswd
    Require valid-user
</LocationMatch>

Dat verplicht je een .htaccess bestand aan te maken met daarin de wachtwoorden van al de geldige gebruikers. Hier is een voorbeeld van hoe een “schacon” gebruiker toe te voegen aan het bestand:

$ htdigest -c /opt/git/.htpasswd "Git Access" schacon

Er zijn tig manieren om geauthenticeerde gebruikers in Apache aan te geven, je zult een keuze moeten maken en een van deze implementeren. Dit is gewoon een van de eenvoudigste voorbeelden die we konden verzinnen. Je zult dit waarschijnlijk ook over SSL willen opzetten, zodat alle gegevens zijn versleuteld.

We willen ons niet te veel bochten wringen om de specifieke zaken van Apache configuraties uit de doeken te doen, je gebruikt misschien een andere server of andere authenticatie behoeften hebben. De clou is dat Git met een CGI geleverd wordt die git-http-backend heet die, wanneer geactiveerd, alle onderhandelingen doet teneinde bestanden te sturen en te ontvangen over HTTP. Deze implementeert het authenticeren zelf niet, maar dat kan eenvoudig worden beheert op het niveau van de server die dit aanroept. Je kunt dit met vrijwel elke web server met CGI capaciteiten, dus pas het vooral toe op hetgeen waar je het meest bekend mee bent.

Voor meer informatie over het configureren van authenticatie in Apache, verwijzen we je naar de volgende Apache documentatie: http://httpd.apache.org/docs/current/howto/auth.html