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.
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.
<VirtualHost 1.2.3.4:443> 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/ <Directory "/usr/lib/git-core/"> AllowOverride None Options +ExecCGI -Includes Order allow,deny Allow from all </Directory> <Location /git> AuthType Basic AuthName "Git Repositories" AuthUserFile /etc/apache2/developmentusers.htpasswd Require valid-user </Location> DocumentRoot /srv/httpd/dev/ <Directory /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. </Directory> Alias /gitweb /usr/share/gitweb <Directory /usr/share/gitweb> Options FollowSymLinks +ExecCGI AddHandler cgi-script .cgi ErrorDocument 404 /404.html ErrorDocument 403 /403.html ErrorDocument 401 /403.html </Directory> <Location /gitweb> AuthType Basic AuthName "Git Repositories" AuthUserFile /etc/apache2/developmentusers.htpasswd Require valid-user </Location> ErrorLog /var/log/apache2/error.log LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature On </VirtualHost>
Um Users separat Zugriff auf einzelne Repos zu gewähren oder zu verweigern kann mit der Location-Direktive gearbeitet werden:
<Location /git/myproj.git> AuthType Basic AuthName "myproj repository" AuthUserFile /etc/apache2/developmentusers.htpasswd Require user devuser01 </Location>
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.
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.