====== Aufsetzen eines Git-Servers mit Apache2 ======
Wer einen reinen HTTP-Gitserver haben möchte, kann dies ohne weitere Tools mit einer normalen git-Installation plus Webserver Apache2 einrichten. Die Authentifizierung kann via HTTP-Basis-Authentifizierung erfolgen, Datenübertragung erfolgt über HTTPS.
===== Konfiguration =====
Der Apache2 wird wie folgt konfiguriert. In diesem Beispiel wird zusätzlich gitweb installiert, was ermöglich, eine Weboberfläche zum Browsen des Codes bereitzustellen. Mit dieser Konfiguration haben alle User aus der developmentusers.htpasswd Zugriff auf alle Git-Repos.
ServerName git.example.com:443
ServerAdmin nobody@example.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/example.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example.com.key
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
SetEnv GIT_PROJECT_ROOT /var/local/git/
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
AllowOverride None
Options +ExecCGI -Includes
Order allow,deny
Allow from all
AuthType Basic
AuthName "Git Repositories"
AuthUserFile /etc/apache2/developmentusers.htpasswd
Require valid-user
DocumentRoot /srv/httpd/dev/
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
ErrorDocument 401 /403.html
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
# Bugtracker and other dev stuff, e.g.
Alias /gitweb /usr/share/gitweb
Options FollowSymLinks +ExecCGI
AddHandler cgi-script .cgi
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
ErrorDocument 401 /403.html
AuthType Basic
AuthName "Git Repositories"
AuthUserFile /etc/apache2/developmentusers.htpasswd
Require valid-user
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
===== Zugriffsbeschränkung =====
Um Users separat Zugriff auf einzelne Repos zu gewähren oder zu verweigern kann mit der Location-Direktive gearbeitet werden:
AuthType Basic
AuthName "myproj repository"
AuthUserFile /etc/apache2/developmentusers.htpasswd
Require user devuser01
Einzufügen unter den bereits vorhandenen Location-Direktiven (siehe oben).
Hier hätte nurnoch devuser01 Zugriff. Achtung: Über gitweb ist weiterhin für alle User möglich, den Code zu //sehen//.
===== Repos und User anlegen =====
Git Repos lassen sich am besten mit einem dafür angelegten Skript anlegen, damit man nicht alle Befehle manuell ausführen muss.
#!/bin/sh
# Git-Repo-Creator-Skript by rkCSD - www.rkcsd.com
mkdir -p /var/local/git/$1.git
cd /var/local/git/$1.git
git init --bare
chown -R www-data:www-data /var/local/git/$1.git
Es ist wichtig, dass das Repo dem User und der Gruppe gehört, mit der Apache2 läuft, in unserem Fall www-data. Jetzt kann man ganz einfach Repos anlegen:
# ./mkproj projektname
Benutzer lassen sich mit dem Befehl htpasswd anlegen:
# htpasswd /etc/apache2/developmentusers.htpasswd devuser001
Das legt den Benutzer devuser001 an, das zu setzende Kennwort wird abgefragt.