Git-Repositories mit Gogs

Kurzbeschreibung

Für die Unterbringung der Git-Repositories habe ich mir Gogs angesehen. Gogs ist deutlich leichtgewichtiger als das bekanntere GitLab, kann aber natürlich auch deutlich weniger. In meinem Kontext ist das kein Problem, die für mich wichtigsten Features sind vorhanden:

Einrichtung

Das offizielle Docker-Image heißt gogs/gogs und ist ca. 92 Megabyte groß (zum Vergleich: das GitLab-Image für amd64 umfasst ca. 1,15 Gigabyte). Es fordert die beiden Volumes /data und /backup, in denen alle persistenten Daten landen. Weiterhin werden die TCP-Ports 22 und 3000 geöffnet, die entsprechend auf das Hostsystem geroutet werden müssen. Wenn man automatisch Backups erzeugen lassen möchte, dann müssen noch die Umgebungsvariablen RUN_CROND, BACKUP_INTERVAL und BACKUP_RETENTION gesetzt werden. All das kann über eine Datei docker-compose.yaml gesteuert werden, die bei mir ungefähr so aussieht:

services:
  app:
    image: gogs/gogs
    ports:
      - "10022:22"
      - "10880:3000"
    volumes:
      - ./data:/data
      - ./backup:/backup
    environment:
      RUN_CROND: "true"
      BACKUP_INTERVAL: "1d"
      BACKUP_RETENTION: "7d"

Nach dem ersten Start kann man sich via HTTP verbinden (bei mir: http://filebox:10880/) und die Grundkonfiguration vornehmen. Hier gilt es schon ein paar Entscheidungen richtig zu treffen, damit man überhaupt weiter kommt. Aber keine Angst: später kann alles noch mal manuell in der Datei app.ini angepasst werden. Folgende Einstellungen habe ich ausgewählt:

Unter Optional Settings setze ich noch die Checkboxen "Disable Self-registration" und "Enable Require Sign In to View Pages". Wenn man die Selbstregistrierung abstellt, muss man unter Admin Account Settings ein Konto mit Admin-Rechten anlegen (ich lege eine Konto felix an, das ich später auch für meine Repositories nutzen werde). Ein Klick auf den Button "Install Gogs" validiert zunächst die Eingaben (relativ gründlich, wie es mir scheint) und fürt dann zum eigenen Dashboard.

Damit ist die Installation abgeschlossen und Gogs kann bereits produktiv genutzt werden. Allerdings findet die Kommunikation mit der Weboberfläche unverschlüsselt via HTTP statt, was moderne Browser unterschiedlich aufdringlich beklagen. In der FAQ gibt es den Punkt How do I set up HTTPS? der sich damit beschäftigt. Dort wird eine Variante beschrieben, in der Gogs ein selbst-signiertes TLS-Zertifikat erzeugt. Im Kontext meines Setups mache ich das jedoch etwas anders, da ich bereits ein selbst-signiertes TLS-Zertifikat erstellt habe, das auch alle anderen Dienste benutzen sollen. Die an meine Umgebung adaptierte Prozedur sieht wie folgt aus:

  1. Falls noch nicht erfolgt: TLS-Zertifikat erstellen und an einem gemeinsamen Ort ablegen
  2. Gogs anhalten (docker-compose down)
  3. Die Datei data/gogs/conf/app.ini editieren
  4. Das TLS-Zertifikat als neues Volume in docker-compose.yaml verfügbar machen
  5. Gogs starten (docker-compose up -d)

Die Datei app.ini wird dabei im Abschnitt [server] wie folgt angepasst:

[server]
PROTOCOL         = https
CERT_FILE        = /cert/cert.pem
KEY_FILE         = /cert/key.pem
EXTERNAL_URL     = https://filebox:10880/

In docker-compose.yaml wird das Volume eingefügt:

volumes:
  - ./data:/data
  - ./backup:/backup
  - <Pfad zu TLS-Zertifikat>:/cert:ro

Achtung: der Service darf erst mit diesem Volume gestart werden, wenn das TLS-Zertifikat an Ort und Stelle ist. Andernfalls wird Docker das Verzeichnis vermissen und selbst anlegen -- mit dem Besitzer root. Das wollen wir nicht. (Andererseits muss Gogs zuvor einmal gestartet worden sein, damit die Datei app.ini existiert...)

Um Repositories via SSH zu klonen muss in Gogs der eigene Public Key hinterlegt werden. Hat man noch keinen solchen, kann man einen mit ssh-keygen erzeugen. Das funktioniert ziemlich genau so wie bei GitLab, weshalb man z.B. dieser Anleitung folgen kann. Um den Inhalt bestehender Repositories zu migrieren folgt man am besten dieser Anleitung.

Fazit

Für mich ist Gogs ein Volltreffer. Bisher hatte ich git immer nur direkt via SSH verwendet und Notizen bezüglich geplanten Änderungen oder Fehlern in einer Textdatei gesammelt. Für Projekte mit nur einer Person ist das zwar okay, aber ich denke das Ticket-System werde ich trotzdem gut gebrauchen können. Die Pull Requests und das Wiki sind wahrschenlich überdimensioniert, aber man muss es ja nicht nutzen. Auf jeden Fall ist die durchgängige Unterstützung der Markdown-Syntax nett und lässt die Notizen mit wenig Aufwand appetitlich aussehen.


Zurück zur Hauptseite