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.