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.

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

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ützung
  • pam: PAM-Authentifizierungs-Support
  • cert: Unterstützung für selbst-signierte Zertifikate
  • miniwinsvc: 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. :)