Git Server mit Apache und dem Git Smart HTTP Protokoll

Um ein zentrales Git Repository mit mehreren Personen zu nutzen bieten sich verschiedene Methoden an. Als eleganteste Lösung empfinde ich den Datenaustausch über einen Apache Webserver, da man aus den meisten Netzwerken ohne Probleme an den HTTPS Port 443 kommt.
In diesem Tutorial sprechen die Clients mit dem Repository über das sogenannte „Git Smart HTTP“ Protokoll, dies ermöglicht es auch serverseitig Hooks einzusetzen, die typischen Tutorials gehen nur auf die WebDAV-Anbindung ein die dies nicht ermöglicht. Git über Smart HTTP soll auch eine bessere Geschwindigkeit gegenüber WebDAV bieten, genau nachgemessen habe ich es jedoch nicht.

1. Software installieren
Zusätzlich zu einem bestehenden Apache Webserver wird nur noch folgendes Paket benötigt:
apt-get install git-core

2. Verzeichnisstruktur für Git anlegen
Für die Git Projekte lege ich typischerweise eine neue Ordnerstruktur an:
mkdir -p /data/git

3. Git Repository anlegen
Zuerst wird ein leeres Verzeichnis angelegt:
mkdir /data/git/<projekt>

Jetzt wechselt man in das Verzeichnis und initialisiert das Repository, hierbei ist es wichtig die Datei „git-daemon-export-ok“ anzulegen, damit das Repository über Smart HTTP exportiert werden kann:

cd ${GIT_REPO}
git init --bare
git update-server-info
touch git-daemon-export-ok

Zum Schluss müssen die Recht soweit angepasst werden, damit der Apache Webserver in dem Verzeichnis lesen und schreiben darf:

chgrp www-data ${GIT_DIR} -R
chown www-data ${GIT_DIR} -R
chmod 750 ${GIT_DIR}

4. Repository übergreifende Apache Konfiguration
Damit der Smart HTTP Export nachher funktioniert müssen einige Umgebungsvariablen definiert werden, dafür legen wir unter /etc/apache2/conf.d die Datei git.conf an:

SetEnv GIT_PROJECT_ROOT /data/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/

Jetzt werden alle Repositorys exportiert in denen die Datei „git-daemon-export-ok“ enthalten ist, die Absicherung über einen Benutzernamen und Passwort wird in Punkt 5 des Tutorials beschrieben.

5.Absicherung des Git-Repositorys mit einer Basic-Authentication
Zuerst wird eine Datei angelegt, in der die einzelnen Gruppen definiert werden:

touch /etc/apache2/groups

Die Gruppen und Benutzer trägt man nach diesem Schema ein:

groupname : user1 user2

Jetzt wird eine Passwortdatei angelegt in der später die Benutzer und ihre Passwörter eingetragen werden:

touch /etc/apache2/passwd

Die Nutzer werden mit diesem Befehl angelegt:

htpasswd /etc/apache2/passwd username

Nun wird man aufgefordert das Passwort des Benutzers zweimal einzugeben.

In dem Verzeichnis /etc/apache2/conf.d/ wird nun für das Repository eine eigene Konfigurationsdatei angelegt, zum Beispiel projekt.conf mit folgendem Inhalt:

< Location "/git/projekt" >
AuthType Basic
require group groupname
AuthName "Projekt"
AuthUserFile /etc/apache2/passwd
AuthGroupFile /etc/apache2/groups
SSLRequireSSL
< /Location >

2 thoughts on “Git Server mit Apache und dem Git Smart HTTP Protokoll

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.