Installation eines lokalen git-Servers mit Gogs

Dieser Artikel befasst sich mit der Installation von einem lokalen git-Server. Als Grundlage für die Installation wird ein Debian in der aktuellen Version 9.5 verwendet. Die genutzte Git-Software ist Gogs in der Version 0.11.66 vom 16.09.2018.

Git selbst gibt es ja schon seit einigen Jahren und ist (vor allem im Microsoft-Umfeld) mit Github sehr bekannt geworden. Git selbst eignet sich sehr gut für die Pflege von Code, vor allem wenn mehrere Entwickler an Code arbeiten. Gogs ist ein Web-Frontend für Git, um Änderungen und den Code selbst im Browser betrachten zu können.

Die Grundinstallation des Servers

Neben einer reinen Grundinstallation von Debian wird auf dem System nicht viel benötigt. Ich richte einen Zugang per SSH ein, damit ich nicht auf der Konsole arbeiten muss, weiterhin werden ein paar grundsätzliche Tools wie mc und htop installiert. Das System sollte einmal mit

apt update && apt upgrade -y

auf den aktuellen Stand aktualisiert werden, danach beginnt die Installation.

Die Installation der Datenbank

Zur Speicherung der Daten können unterschiedliche Arten von Datenbanken verwendet werden (MySQL, MSSql, PostgreSQL oder auch eine lokale SQLite3). Ich nutze eine PostgreSQL-Datenbank, die wir wie folgt installieren können:

apt install postgresql postgresql-client libpq-dev -y

Nach der Installation muss der Datenbank-Dienst gestartet werden, weiterhin sollte ein automatischer Start des Dienstes eingerichtet werden bei einem System-Neustart.

systemctl start postgresql
systemctl enable postgresql

Nun legen wir einen neuen Benutzer sowie eine neue Datenbank im PostgreSQL an. Mit diesen Daten melden wir uns später im Gogs an. Im ersten Schritt melden wir uns als postgres-Benutzer an, um danach mit psql in die Datenbank-Administration zu wechseln.

su - postgres
psql

Nun erzeugen wir einen neuen Datenbank-Benutzer git, dieser Benutzer bekommt das Recht, neue Datenbanken anzulegen. Danach setzen wir das Kennwort für diesen Benutzer.

CREATE USER git CREATEDB;
\password git

Nun erstellen wir eine neue Datenbank mit dem Namen gogs, der soeben erstellte Benutzer git wird der Besitzer der Datenbank.

CREATE DATABASE gogs OWNER git;

Die Installation und Einrichtung von PostgreSQL ist nun abgeschlossen, wir können mit einem

\q

wieder zurück auf die Konsole wechseln. Die weitere Installation führen wir dann wieder mit unserem Haupt-Benutzer durch.

Die Installation von Gogs

Nun können wir das eigentliche Web-Frontend Gogs installieren. Hierzu benötigen wir das Paket git, welches wir wie gewohnt mit apt installieren können:

apt install git -y

Ist git installiert, können wir einen neuen Benutzer erstellen, der für die Gogs-Installation genutzt wird. Dieser Benutzer darf sich nicht am System interaktiv anmelden, ich nenne ihn genau so wie den Datenbank-Benutzer: git.

adduser --disabled-login --gecos 'Gogs' git

Im nächsten Schritt melden wir uns als der neue Benutzer an, erzeugen einen neuen Ordner innerhalb des home-Verzeichnisses und installieren das Paket go.

su - git
mkdir -p /home/git/local
cd /home/git/local

Wir prüfen nun den aktuellen Stand von Go, diesen finden wir unter golang.org. In meinem Fall ist die aktuelle Version 1.11.1.

wget https://dl.google.com/go/go1.11.1.linux-amd64.tar.gz

Nach dem Download entpacken wir das Archiv und setzen ein paar environment-Variablen:

tar -xf go1.11.1.linux-amd64.tar.gz
rm -f go1.11.1.linux-amd64.tar.gz
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

Nun laden wir die Bash neu und prüfen, ob go korrekt registriert ist.

source ~/.bashrc
go version

Nun kann Gogs installiert werden.

Die Installation von Gogs

Da wir extra einen neuen Benutzer git für den Gogs-Dienst erstellt haben, wechseln wir nun in diese Sitzung und laden die aktuelle Version von Gogs herunter.

su - git
go get -u github.com/gogs/gogs
cd $GOPATH/src/github.com/gogs/gogs
go build

Der Download und die Kompilierung sollten fehlerfrei durchlaufen.

Ist dies der Fall, können wir testen, ob Gogs generell betriebsfähig ist. Dazu rufen wir die gogs-Datei mit dem Parameter web auf.

Wenn man nun die IP bzw. den Namen des Servers in einem Browser aufruft und Port 3000 ansteuert, sollte direkt eine Installations-Seite von Gogs erscheinen.

Wir sind an dieser Stelle noch nicht fertig, nun folgt noch die Einrichtung von Gogs als Dienst (wir wollen den Server ja schließlich auch mal neu starten, ohne per Hand immer den Dienst starten zu müssen) und die Konfiguration von nginx als Reverse-Proxy, damit wir direkt mit Port 80 bzw. 443 sprechen können. Damit wir weitere Einstellungen vornehmen können, muss der Gogs-Dienst mit einem Strg+C wieder abgebrochen werden.

Die Einrichtung als systemctl-Dienst

Damit Gogs nach einem Neustart automatisch wieder startet, müssen ein paar Dinge angepasst werden. Als erstes wechseln wir wieder in den git-Benutzer und erstellen dort eine manuelle Konfiguration.

su - git
cd $GOPATH/src/github.com/gogs/gogs
mkdir -p custom/conf/
cp conf/app.ini custom/conf/app.ini
nano custom/conf/app.ini

Nun passen wir in zwei Bereichen die Konfiguration an: Im Bereich Server und im Bereich Database:

...
[server]
PROTOCOL = http
DOMAIN = localhost
ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/
HTTP_ADDR = 127.0.0.1
HTTP_PORT = 3000
; Permission for unix socket
...
...
[database]
; Either "mysql", "postgres" or "sqlite3", you can connect to TiDB with MySQL protocol
DB_TYPE = postgres
HOST = 127.0.0.1:5432
NAME = gogs
USER = git
PASSWD = xxx
; For "postgres" only, either "disable", "require" or "verify-full"
...

Nun können wir durch einen erneuten Aufruf von ./gogs web prüfen, ob die Konfiguration erfolgreich geladen werden kann. Hier ist nun zu beachten, dass nur auf 127.0.0.1 zugegriffen werden kann, nicht von außerhalb. Ein Refresh im Browser, falls noch geöffnet, führt nicht zu der bereits gesehenen Konfigurationsseite.

Einrichtung von nginx als Reverse Proxy

Um direkt per HTTP bzw. HTTPS (also ohne Angabe von Port 3000) auf den Server zugreifen zu können, nutzen wir den nginx-Webserver als Reverse-Proxy. Die Installation ist schnell gemacht:

apt install nginx -y

Nach der Installation müssen wir eine neue Konfiguration anlegen unter /etc/nginx/sites-available.

nano /etc/nginx/sites-available/gogs

In die Datei kommen nun ein paar Zeilen Code. Wichtig ist hierbei, dass in Zeile 3 der Name des Webservers angepasst wird.

server {
     listen 80;
     server_name adresse.server.domain;

     location / {
         proxy_pass http://localhost:3000;
     }
 }

Damit die Konfiguration nun automatisch geladen wird, müssen wir nginx noch dazu bringen, diese automatisch zu starten. Dazu legen wir einen neuen Link auf die soeben erstellte Datei an:

ln -s /etc/nginx/sites-available/gogs /etc/nginx/sites-enabled/

Bitte beachten Sie, dass vorne die Datei mit angegeben werden muss (gogs), im hinteren Teil des Befehls aber nicht mehr!

Nun können wir mit

nginx -t

testen, ob die Konfiguration so in Ordnung ist. Ist dies der Fall, können wir den nginx Webserver neustarten.

systemctl restart nginx

Die Einrichtung von Gogs als Dienst

Ist nun die Konfiguration generell lauffähig, müssen wir noch einen systemctl-Dienst einstellen, der den Gogs-Server automatisch startet. Dazu erstellen wir im Verzeichnis /etc/systemd/system eine neue Datei gogs.service.

nano /etc/systemd/system/gogs.service

In diese Datei schreiben wir nun die Bedingungen und Abhängigkeiten:

[Unit]
 Description=Gogs
 After=syslog.target
 After=network.target
 After=mariadb.service mysqld.service postgresql.service memcached.service redis.service

 [Service]
 # Modify these two values and uncomment them if you have
 # repos with lots of files and get an HTTP error 500 because
 # of that
 ###
 #LimitMEMLOCK=infinity
 #LimitNOFILE=65535
 Type=simple
 User=git
 Group=git
 WorkingDirectory=/home/git/go/src/github.com/gogs/gogs
 ExecStart=/home/git/go/src/github.com/gogs/gogs/gogs web
 Restart=always
 Environment=USER=git HOME=/home/git

 [Install]
 WantedBy=multi-user.target

Nun müssen wir die Dienste neu laden, damit wir danach den Dienst Gogs starten können und als Autostart-Dienst einrichten können.

systemctl daemon-reload
systemctl start gogs
systemctl enable gogs

Erster Aufruf und Einrichtung von Gogs

Laufen alle Dienste, können wir nun über http://servername oder http://IP_Adresse den Webserver aufrufen. Es erscheint wieder die Install-Seite, dieses Mal allerdings mit dem Unterschied, dass direkt PostgreSQL ausgewählt ist (weil wir die Konfiguration entsprechend angepasst haben). Denken Sie daran, direkt einen Admin-Benutzer im unteren Bereich der Seite zu erstellen, um sich direkt anmelden zu können.

Werden die eingegebenen Daten angenommen, kommen Sie direkt auf die Admin-Oberfläche und können mit der weiteren Einrichtung fortfahren.


Sie benötigten persönliche Unterstützung oder haben nicht die richtige Lösung für Ihr Problem gefunden?

Dieser Blog wird von mir, Jan Kappen, in seiner Freizeit betrieben, hier beschreibe ich Lösungen für Probleme aller Art oder technische Anleitungen mit Lösungsansätzen.

Die berufliche Unabhängigkeit

Ich bin seit Januar 2020 vollständig selbstständig und habe meine eigene Firma gegründet, die Building Networks mit Sitz in Winterberg im schönen Sauerland. Hier stehe ich als Dienstleister gerne für Anfragen, Support oder Projekte zur Verfügung.

Die Firma Building Networks bietet Ihnen:

  • Hilfe und Support per Telefon, Fernwartung oder persönlich vor Ort
  • Projekt-Unterstützung
  • Ausgezeichnete Kompetenz zu den Themen
    • Microsoft Hyper-V
    • Microsoft Failover Clustering & HA
    • Storage Spaces Direct (S2D) & Azure Stack HCI
    • Veeam Backup & Recovery
    • Microsoft Exchange
    • Microsoft Exchange Hybrid Infrastruktur
    • Microsoft Active Directory
    • Microsoft Office 365
    • Ubiquiti
    • 3CX VoIP PBX
    • Fortinet Network Security
    • Baramundi Software
    • ...

Ich freue mich über Ihren Kontakt, weitere Informationen finden Sie auf der Webseite meiner Firma unter Building-Networks.de

Jan

Jan Kappen arbeitet seit 2005 in der IT. Er hat seine Ausbildung 2008 abgeschlossen und war bis 2018 als IT-Consultant im Bereich Hyper-V, Failover Clustering und Software Defined Storage unterwegs. Seit 2015 wurde er jährlich von Microsoft als Most Valuable Professional (MVP) im Bereich "Cloud & Datacenter Management" ausgezeichnet für seine Kenntnisse und die Weitergabe seines Wissens. Jan ist häufig auf Konferenzen als Sprecher zu finden, weiterhin bloggt er viel. Von September 2018 bis Dezember 2019 war Jan als Senior Network- und Systemadministrator bei einem großen mittelständischen Unternehmen im schönen Sauerland angestellt. Im Januar 2020 hat er den Sprung in die Selbstständigkeit gewagt und ist seitdem Geschäftsführer der Firma Building Networks in Winterberg. In seiner Freizeit kümmert er sich um das Freifunk-Netzwerk in Winterberg und Umgebung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert