Git-Hosting mit Gogs

Git-Hosting mit Gogs

Einen eigenen Git-Server zur Versionsverwaltung aufzusetzen, kann mit prominenten Softwarelösungen ziemlich viele Ressourcen verschlingen. Etwas leichter geht es mit dem schlanken Gogs.

Für das Versionskontrollsystem Git braucht man nicht unbedingt einen Server, denn es wurde von Linus Torvalds als Peer-to-Peer-System entworfen, bei dem jeder Anwender sein eigenes Repository hat. Wenn mehrere Menschen zusammen Software entwickeln oder andere Dateien bearbeiten, ist es aber trotzdem nützlich, einen zentralen Platz zu haben, an dem sich die Dateien befinden, der sich zum Beispiel in Backups einbinden lässt. Auch ein grafisches Frontend ist praktisch, denn im Webbrowser lassen sich längere Dateien oder Diffs besser begutachten als im Terminal.

Für diese Zwecke gibt es im Internet einige Services, allen voran Github, das mittlerweile die meisten Open-Source-Projekte hostet. Noch mehr Zulauf wird Github wohl erhalten, wenn Google Code wie angekündigt im Lauf des Jahres 2015 seine Pforten schließt. Eine Alternative zu Github ist Gitlab, das sich Anfang 2015 durch den Zukauf von Gitorious verstärkt hat. Der kommerzielle Dienst von Github startet bei 25 US-Dollar im Monat bis zum Platinum-Tarif mit 200 US-Dollar, bei Gitorious sind es mindestens 99 US-Dollar.

Gitlab steht in einer Community-Version auch als Open-Source-Software zur Verfügung, die sich auf einem eigenen Server installieren lässt. Allerdings ist Gitlab schwer zu installieren, da es aus einigen Komponenten aus dem Ruby/Rails-Umfeld besteht. Es gibt zwar auch eine Gitlab-Distribution namens Omnibus, die alle Einzelteile mitbringt, aber auch die funktioniert nicht unbedingt problemlos. Zudem verbraucht Gitlab für eine relativ einfache Anwendung eine ganze Menge an Ressourcen: Mit weniger als 4 GByte Speicher brauchen User gar nicht anzutreten, und dann ist Gitlab immer noch quälend langsam.

Git-Server mit weniger Ballast

Wer nur einen Git-Server mit wenig Komfort braucht, kann Gitolite oder Gitosis verwenden, das wir an anderer Stelle vorgestellt haben . Eine Alternative zu den etablierten Git-Servern mit mehr Komfort ist Gogs (Go Git Service), das in der Programmiersprache Go geschrieben und deshalb leicht und schnell ist. Laut seinen Entwicklern läuft Gogs sogar auf einem Raspberry Pi. Gogs gibt es im Quellcode und als Binary für Linux, OS X und Windows. Die Websitet bietet fertige Pakete für diverse Linux-Distributionen, und auch die virtualisierte Installation mit Docker oder Vagrant ist unterstützt.

Um Gogs auf dem eigenen Server zu betreiben, legen Sie am besten zuerst einen eigenen Benutzer an, etwa git :

sudo adduser git

Nun laden Sie als Benutzer git die passende Datei herunter und entpacken Sie:

wget https://github.com/gogits/gogs/releases/download/v0.5.13/linux_amd64.zip
unzip linux_amd64.zip

Nun können Sie, nachdem Sie das gogs -Binary ausführbar gemacht haben, den Gogs-Webserver starten:

chmod +x gogs
./gogs web

Im Browser erreichen Sie das Gogs-Interface unter der Adresse http://Servername:3000 (Abbildung 1).

Abbildung 1: Die Installationsseite von Gogs.

Gogs bietet drei Optionen für die Datenbank an, von denen SQLite die unkomplizierteste ist, denn sie verlangt keine weitere Konfiguration. Bei MySQL müssen Sie im Installations-Interface das MySQL-Root-Passwort eingeben oder besser in MySQL einen Benutzer für die Gogs-Anwendung anlegen, dessen Zugangsdaten Sie dann bei der Gogs-Installation verwenden. Im MySQL-Kommandozeilen-Tool etwa so:

> create database gogs;
Query OK, 1 row affected (0.04 sec)
> grant all on gogs.* to gogs@localhost identified by 'gogspw';
Query OK, 0 rows affected (0.01 sec)

Außer den Datenbankzugangsdaten geben Sie noch den Ort des Git-Repository ein, etwa /home/git/repo , optional die Mailserver-Einstellungen und die Zugangsdaten für den ersten User, der gleichzeitig zum Gogs-Administrator wird.

Passt alles, legt Gogs nach einem Klick auf "Install Gogs" die Datenbanktabellen und die Datei custom/conf/app.ini an, in der alle wichtigen Konfigurationsdaten abgelegt sind. Wenn Sie die Konfiguration ändern, editieren Sie immer diese Datei und nicht etwa deren Pendant conf/app.ini , denn diese wird bei einem Update der Gogs-Software überschrieben. Beim Ändern der Datei ist das Configuration Cheat Sheet nützlich.

Ist die Installation abgeschlossen, können Sie sich bei Gogs anmelden und werden von einem übersichtlichen Webinterface begrüßt (Abbildung 2). Dort können Sie beispielsweise neue "Organizations" anlegen, um bestimmten Projekten oder Entwicklergruppen eine Heimat zu geben. Ebenso legen Sie dort neue Repositories an, die entweder privat bleiben oder mit anderen Entwicklern geteilt werden. Nach dem Anlegen eines Repository gibt Gogs einige Git-Befehle aus, mit denen Sie das Gegenstück zum Gogs-Repository auf einem anderen Rechner initialisieren, Datein hinzufügen und dann zu Gogs überspielen (pushen). Auf der Übersichtsseite laden Sie andere zur Mitarbeit ein und legen neue Teams an.

Abbildung 2: Das Benutzerinterface von Gogs.

Unter den Icons oben rechts finden Sie einen Schalter für das Admin-Panel, hinter dem sich die typischen Admin-Aufgaben verbergen, etwa neue Benutzer anzulegen, aber auch die Gogs-Konfiguration (teilweise) zu verändern. Zudem bietet Gogs auch die Möglichkeit, andere "Authentication Sources" fürs User Management einzubinden, etwa LDAP.

Ein weiteres Icon führt zu den persönlichen Einstellungen, unter denen der SSH-Key besonders wichtig ist. Hier kopieren Sie den SSH Public Key in ein Textfeld, damit Sie Repositories per SSH synchronisieren dürfen.

Sicherer mit TLS

Wer mit der Konfiguration zufrieden ist und nichts gegen den verwendeten Port 3000 und unverschlüsselte Verbindungen hat, kann jetzt die Beine hochlegen. Alle anderen sollte sich noch um darum kümmern, dass Gogs beispielsweise hinter einem Apache- oder Nginx-Webserver läuft und die Verbindung mit TLS verschlüsselt wird.

Am einfachsten ist die Konfiguration, wenn Sie dafür einen eigenen virtuellen Host abstellen, der auf Port 443 lauscht und die verschlüsselte Verbindung übernimmt. Neben der TLS-Konfiguration von Apache ist in Listing 1 die Proxy-Konfiguration interessant, die die Verbindung von Apache an Gogs weiterleitet. Die Apache-Proxy-Module müssen dafür installiert sein.

Listing 1: Apache-Proxy-Konfiguration

<VirtualHost 127.0.0.1:443>
   ServerAdmin webmaster@server.de
   ServerName git.server.de
DocumentRoot /srv/www/htdocs/server
ErrorLog /var/log/apache2/git-error.log
CustomLog /var/log/apache2/git-access.log combined
RewriteEngine On
<Location />
    Order allow,deny
    Allow from all
</Location>
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
SSLEngine on
SSLCertificateFile /etc/apache2/keys/server.crt
SSLCertificateKeyFile /etc/apache2/keys/server.key
SSLCACertificateFile /etc/apache2/keys/intermediate.crt
</VirtualHost>

Läuft der Gogs-Webserver wie oben beschrieben auf Port 3000, können Sie ihn nun über den Apache unter der Adresse https://git.server.de erreichen. Wer unter der gleichen Adresse noch einen unverschlüsselten Webserver laufen hat, kann die Verbindungen mit folgendem Rewrite auf TLS umleiten:

RewriteRule ^(.*)$ https://git.server.de$1

Damit der Gogs-Server automatisch startet, nehmen Sie ihn in das Init-System des verwendeten Servers auf. Hierzu bietet die Gogs-Website zwei Vorlagen für Init.d auf CentOS und Debian und Hinweise zur Konfiguration von Systemd .

Um Gogs grafisch anzupassen, um beispielsweise die Eigenwerbung von der Startseite zu entfernen, editieren Sie die mitgelieferten HTML-Templates wie templates/home.html .

Gogs steckt mitten in der Entwicklung, ist aber für den produktiven Einsatz geeignet, wie viele Anwenderbeispiele zeigen. Allerdings sind die Programmierer sehr aktiv und haben für die Zukunft noch eine Vielzahl weiterer Features geplant, etwa Unterstützung für CAS-Authentifizierung, den Anschluss externer Bugtracker und die Visualisierung von Repository-Aktivitäten.

comments powered by Disqus
Mehr zum Thema

Versionierte Backups via Git

Ein Backup schützt nicht nur vor Hardwareausfällen, sondern auch vor Benutzerfehlern. Eine grundlegende Empfehlung ist dabei die Versionierung der Dateien, um im Zweifelsfall auf ältere Stände zurückgreifen zu können. Für eine solche versionierte Sicherung können Administratoren neben etablierten Backupprogrammen auch ein Open-Source-Tool nutzen, das eigentlich aus der Entwicklerwelt stammt: Git.
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023