Gogs. Dein eigener selbst gehosteter Git-Service.
Vor ein paar Tagen hat mich ein Kollege gefragt, wie man den Gogs Git-Service installieren kann. Ich hab mir das angesehen und habe das auch getestet.

Vor ein paar Tagen hat mich ein Kollege gefragt, wie man den Gogs Git-Service installieren kann. Ich hab mir das angesehen und habe das auch getestet. Dabei stieß man in der Installationsanleitung auf paar Fehler gestoßen. Manchmal verwirrte die Installationsanleitung, weil man immer zwischen den "UserSSH" root und git wechseln soll und einige Schreibfehler enthalten sind. Daher habe ich mir die Mühe gemacht und die Installationsanleitung mal überarbeitet und präsentiere euch diese hier.
Meine Bewertung zu dem Programm ist, Super. Finde ich toll, dass man sowas auch hosten kann und eben seinen eigenen Git-Service damit erstellen kann.
Getestet wurde das ganze auf einem Mini-Cloud-Servers mit 1x CPU, 512 MB Arbeitsspeicher, 100 GB Traffic und einer 10 GB SSD-Festplatten-Kapazität. Diesen Mini-CloudServer können Sie selbst auch testen. 30 Tage unverbindlich und innerhalb von 60 Sekunden startklar.
Abhängigkeiten:
Ich gehe wie immer davon aus, dass auf Ihren Server, weder Apache2 oder vergleichbar Nginx, MySQL oder vergleichbar PostgreSQL noch nicht Installiert sind. So setzt sich auch die Installationsanleitung entsprechend fort.
- Datenbank (wähle eine der folgenden)
- MySQL: Version >= 5.5.3
- PostgreSQL
- oder KEINE mit SQLite3 or RiDB (experimentell)
- Git (bash):
- Version >= 1.7.1 sowohl für den Server als auch für Clients
- Am besten die neuste Version für Windows benutzen
- Ein funktionierender SSH-Server:
- Ignoriere das, wenn du Gogs nur mit HTTP/HTTPS benutzen willst
- Empfohlen: Cygwin OpenSSH oder Copssh für Windows
Installation der Datenbank
Gogs unterstützt MySQL, PostgreSQL, SQLite3 und TiDB. Je nachdem, wofür du dich entscheidest, installiere die jeweilige Datenbank oder überspringe diesen Schritt.
- MySQL (Engine: INNODB)
- PostgreSQL
WICHTIG: Benutze /etc/mysql.sql
um eine Datenbank mit dem Namen gogs
anzulegen (Standard-Name). Erzeugst du sie manuell, stelle sicher, dass das Encoding auf utf8mb4
gesetzt ist.
Git Installieren
Debian/Ubuntu (aktuelle Version)
sudo apt-get update sudo apt-get install git
Installieren werden wir Gogs aus den Quelldateien.
Allgemein
- Go Programming Language: Version >= 1.5
Wir erstellen einen neuen Benutzer mit dem Namen git
und installieren alles unter diesem Benutzer:
sudo adduser --disabled-login --gecos 'Gogs' git
Drittanbieter-Software
Wenn es dich interessiert, welche Drittanbieter-Pakete Gogs benutzt, schaue dir das gopmfile. Möglicherweise brauchst du das, wenn du Pakete für Gogs erstellst.
Go-Installation
Wenn Go auf deinem System schon den Anforderungen entspricht, überspringe diesen Abschnitt.
Download
Die aktuellen Versionen für dein Betriebssystem findest du auf der offiziellen Seite golang.org
Installiere Go in /home/git/local/go
, sodass es keine Konflikte mit zukünftigen Updates des Paketmanagers gibt:
# Zum Benutzer `git` wechseln sudo su - git cd ~ # einen Ordner erstellen, um 'go' zu installieren mkdir local # go herunterladen (ändere go$VERSION.$OS-$ARCH.tar.gz zur aktuellsten Version) wget https://storage.googleapis.com/golang/go$VERSION.$OS-$ARCH.tar.gz # Archiv in ~/local entpacken tar -C /home/git/local -xzf go$VERSION.$OS-$ARCH.tar.gz # Zum Benutzer `root` wechseln sudo su - root
$VERSION.$OS-$ARCH
ersetzen, mit der aktuellen Version.
Umgebung einrichten
Pfade entsprechend deinem System einrichten:
sudo su - git cd ~ echo 'export GOROOT=$HOME/local/go' >> $HOME/.bashrc echo 'export GOPATH=$HOME/go' >> $HOME/.bashrc echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> $HOME/.bashrc source $HOME/.bashrc sudo su - root
Installation von Gogs
Der allgemeine Weg, um Go zu installieren
# Als `root` Benutzer Ausführen # Abhängigkeiten herunterladen und installieren $ go get -u github.com/gogits/gogs # Hauptprogramm erstellen $ cd $GOPATH/src/github.com/gogits/gogs $ go build
Wenn du gopm installiert hast, kannst du Gogs auch wie folgt installieren:
# Als `root` Benutzer Ausführen # gopm auf Updates überprüfen $ gopm update -v # Herunterladen und erstellen der Binärdatei $ gopm bin -u -v gogs -d path/to/anywhere
Build aus dem develop-Branch
Falls du den develop
-branch ausprobieren möchtest:
# Als `git` Benutzer Ausführen $ mkdir -p $GOPATH/src/github.com/gogits $ cd $GOPATH/src/github.com/gogits # Sicherstellen dass du nicht "https://github.com/gogits/gogs.git" benutzt $ git clone --depth=1 -b develop https://github.com/gogits/gogs $ cd gogs $ go get -u ./... $ go build
Testen der Installation
Um zu testen, ob Gogs funktioniert:
# Als `git` Benutzer Ausführen cd $GOPATH/src/github.com/gogits/gogs ./gogs web
Wenn du keine Fehlermeldungen siehst, drücke Ctrl-C
um Gogs wieder zu stoppen.
Build mit Tags
Einige Dinge sind nicht automatisch bei Gogs mit dabei, du musst Gogs mit den entsprechenden build tags kompilieren.
Verfügbare Build-Tags sind:
sqlite3
/tidb
: SQLite3/TiDB-Datenbank-Unterstützungpam
: PAM-Authentifizierungs-Supportcert
: Unterstützung für selbst-signierte Zertifikateminiwinsvc
: Eingebauter Windows Service Support (alternativ NSSM nutzen um den Service zu erstellen)
Hinweis Solltest du TiDB verwenden wollen, folge bitte dieser Anleitung
Beispiel: Wenn du alles mit dabei haben willst, lösche zuerst den Ordner $GOPATH/pkg/${GOOS}_$GOARCH}/github.com/gogits/gogs
und führe dann folgende Befehle aus:
# Als `git` Benutzer Ausführen $ go get -u -tags "sqlite tidb pam cert" github.com/gogits/gogs $ cd $GOPATH/src/github.com/gogits/gogs $ go build -tags "sqlite tidb pam cert"
Detaillierte Konfiguration für Erstellung aus den Quelldateien
Folge den Anweisungen zum Erstellen aus den Quellen, du solltest dann einen lokalen Benutzer git
und ein funktionierendes Setup von go
und Gogs haben. Wir werden Gogs mit Nginx installieren. Bei diesem Weg werden wir die Vorteile von Nginx nutzen. Das ist auf Servern, auf denen Nginx schon läuft, sehr hilfreich.
Für den Rest dieses Dokuments werden wir Folgendes annehmen:
- Du möchtest ‘Gogs’ auf der Domain ‘example.com’ ausliefern
- Nginx ist dein Webserver
postgresql
ist dein Datenbankserver- Du möchtest, dass alle deine Git-URL wie
git.example.com
aussehen.
Wie schon in Konfiguration und Start erwähnt, solltest du deine eigene Konfigurationsdatei in $GOPATH/src/github.com/gogits/gogs/custom/conf/app.ini
anlegen.
Als ersten Schritt legen wir einige Ordner an:
# Als `root` Benutzer Ausführen sudo mkdir -p /var/log/gogs sudo chown git:git /var/log/gogs sudo su - git cd ~ mkdir -p $GOPATH/src/github.com/gogits/gogs/custom/conf mkdir -p ~/gogs-repositories
Kopiere jetzt die Standard-Konfigurationsdatei, sodass du sie editieren kannst:
# Als `root` Benutzer Ausführen cd $GOPATH/src/github.com/gogits/gogs cp conf/app.ini custom/conf/
Öffne jetzt in deinem Editor die Datei
$GOPATH/src/github.com/gogits/gogs/custom/conf/app.ini
Zum Beispiel:
vim $GOPATH/src/github.com/gogits/gogs/custom/conf/app.ini # Alternativ geht das auch mit `nano`-Editor
Server aufsetzen
Beginnend vom Anfang, ändere die folgenden Schlüssel in den verschiedenen Sektionen:
Standard-Sektion
RUN_USER=git
[repository] Sektion
ROOT=/home/git/gogs-repositories
[server] Sektion
DOMAIN = example.com ROOT_URL = %(PROTOCOL)s://git.%(DOMAIN)s/ HTTP_ADDR = localhost HTTP_PORT = 3000
Unter Debian
/Ubuntu
kannst du PostgreSQL installieren mit:
sudo apt-get install -y postgresql postgresql-client libpq-dev
Jetzt richten wir eine Datenbank ein, auf die der git
Benutzer zugreifen kann:
Erstmal logge dich in psql ein:
# Login to PostgreSQL sudo -u postgres psql -d template1
Danach, in der PostgreSQL-Prompt, gib ein:
# Erstelle einen User für git # Das folgende wird in den Prompt geschrieben CREATE USER git CREATEDB; # Setze ein Passwort für git # Merke dir das Passwort für den naechsten Schritt \password git # Erstelle die Datenbank und gib alle Rechte an git CREATE DATABASE gogs_production OWNER git; #Schließe die Datenbanksitzung \q #Versuche dich mit dem neuen User zu verbinden sudo -u git -H psql -d gogs_production # Und schließe die Datenbanksitzung wieder gogs_production> \q
Jetzt können wir app.ini
anpassen. öffne also $GOPATH/src/github.com/gogits/gogs/custom/conf/app.ini
in deinem Editor und ändere das folgende (stelle dabei sicher, dass du gerade der User git
bist, falls nicht, gib vorher noch sudo su - git
ein):
[database] Sektion
DB_TYPE = postgres HOST = 127.0.0.1:5432 NAME = gogs_production USER = git PASSWD =__postgresql_passwort_aus_vorherigem_schritt__ PATH = data/gogs.db
Nginx-Server einrichten
Wenn noch nicht installiert, installiere Nginx unter Debian
/Ubuntu
mit:
sudo apt-get install -y nginx
Jetzt erstellen wir eine Nginx-Konfiguration für unser Gogs:
sudo su - git # Benutze deinen Editor und erstelle eine temporäre Datei vim /tmp/gogs
Und füge dann folgendes ein:
server { listen 80; server_name git.example.com; location / { proxy_pass http://localhost:3000; } }
Füge diese Datei nun Nginx hinzu und starte Nginx neu.
sudo mv /tmp/gogs /etc/nginx/sites-available sudo ln -s /etc/nginx/sites-available/gogs /etc/nginx/sites-enabled/gogs sudo service nginx restart
Danach:
sudo su - git cd $GOPATH/src/github.com/gogits/gogs ./gogs web
Öffne jetzt in deinem Webbrowser die URL git.example.com
Natürlich wirst du, falls du das initiale Setup noch nicht durchgeführt hast, jetzt die Installationsseite angezeigt bekommen.
Ändere den Datenbank-Typ auf PostgreSQL, falls es nicht schon ausgewählt ist. Nachdem du überprüft hast, dass alle Einstellungen denen entsprechen, die du in der app.ini
gesetzt hast, klicke auf installieren und freue dich über deine neue Git Webseite!
Grundsätzlich bist du an dieser Stelle fertig, die nächsten Schritte beschreiben, wie man Gogs startet, wenn Debian
/Ubuntu
neu gestartet werden.
Gogs zu init.d hinzufügen
Diese Sektion beschreibt, wie man Gogs startet, wenn das Linux-System neu gestartet wird. Für andere Plattformen gucke die Dokumentation durch, um herauszufinden, wie du das tun kannst.
Wenn du den vorherigen Schritten gefolgt bist, kannst du jetzt das automatische Starten von gogs aktivieren. Unter Debian
/Ubuntu
werden wir das Skript aus $GOPATH/src/githb.com/gogits/gogs/scripts/init/debian/gogs
benutzen.
Kopieren wir also die Datei und verändern sie:
sudo su - git cd ~ cp $GOPATH/src/github.com/gogits/gogs/scripts/init/debian/gogs ./gogs.init
Editiere jetzt die Datei ~/gogs.init
wie folgt:
- Ändere die zwei Zeilen oben:
# Required-Start: $syslog $network # Required-Stop: $syslog
zu
# Required-Start: $syslog $network $local_fs nginx postgresql # Required-Stop: $syslog $local_fs
Weiter unten in der gleichen Datei setze den Pfad, sodass init.d
unsere gogs
-Installation finden kann, indem wir die WORKING_DIR
Zeile ändern zu:
WORKINGDIR=/home/git/go/src/github.com/gogits/gogs
Verschiebe die Datei nach /etc/init.d
und update es:
#erstmal wieder zum normalen Benutzer werden. wenn nicht schon geschehen exit sudo mv /home/git/gogs.init /etc/init.d/gogs sudo chmod ug+x /etc/init.d/gogs sudo update-rc.d gogs defaults 30 70
Teste dein Setup jetzt mit
sudo service gogs start
und besuche die URL deiner Seite (z.B. git.example.com
)
Das war es. :)