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:
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:
docker-compose down
)data/gogs/conf/app.ini
editierendocker-compose.yaml
verfügbar machendocker-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.
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.