Entwicklung

Gitea auf einem Linux Server installieren

In diesem Tutorial erkläre ich euch wie Ihr Gitea auf einem Linux Server installieren könnt. Gitea ist eine in GO geschriebene Anwendung die versucht die gesamte Funktionalität von Github nachzubilden. Die Übernahme von Githubdurch Microsoft veranlasste bei mir eine Suche nach Alternative. Dabei schien mir Gitea als die perfekte Lösung, um nicht auf Drittanbieter angewiesen zu sein.

Die Installation in diesem Tutorial erfolgte unter Ubuntu 18.04. LTS sollte aber auf jeder Distribution genau so funktionieren. Zum Zeitpunkt der Erstellung dieses Tutorials habe ich Gitea in der Version 1.8.2 benutzt.

System vorbereiten

Nun beginnen wir mit der Vorbereitung unseres System für die Benutzung von Gitea. Zuallererst sollten wir natürlich dafür Sorge tragen, dass GIT installiert ist.

sudo apt-get install git

Als nächstes legen wir einen Benutzer „git“ an, unter dem später Gitea ausgeführt wird.

sudo useradd -m -s /bin/bash git

Für diejenigen, die es nicht wissen; der Parameter „-m“ sorgt dafür das ein „home“ Verzeichnis für den Benutzer angelegt wird. Die ganzen Repositorien will ich später dort ablegen. Ein Passwort wird nicht vergeben, da wir kein Login haben wollen.

Nun erzeugen wir alle notwendigen Verzeichnisse und ändern die entsprechenden Berechtigungen.

sudo mkdir /etc/gitea
sudo chown -R git:git /etc/gitea
sudo mkdir /var/lib/gitea
sudo chwon -R git:git /var/lib/gitea

Gitea installieren

Als nächstes werden wir Gitea installieren, welches aktuell nicht in den Paketquellen ist. Die Installation werde ich im Verzeichnis „/opt“ machen. Das könnt Ihr natürlich an beliebiger stelle machen, nur müsst Ihr dann den Pfad im Laufe des Tutorials mit eurem ersetzen.

sudo mkdir /opt/gitea
sudo chown -R git:git /opt/gitea
cd /opt/gitea
sudo su git

Nun sollten wir uns im richtigen Verzeichnis befinden und als Benutzer „git“ unterwegs sein.

Als nächste laden wir uns hier die aktuelle Version von Gitea herunter und machen die Datei ausführbar und erzeugen einen Link.

wget https://dl.gitea.io/gitea/1.8.2/gitea-1.8.2-linux-amd64
chmod +x gitea-1.8.2-linux-amd64
ln -s gitea-1.8.2-linux-amd64 gitea

In meinem Fall ist das die Version für AMD64 Systeme. Ihr müsst natürlich das richtige Paket für euer System auswählen. Bei einem Update müsst ihr dann einfach die neue Version herunterladen, ausführbar machen und den Link neu erstellen. Den Link brauchen wir für das Start-Script.

Damit ist erst einmal die Installation von Gitea abgeschlossen, die Einrichtung erfolgt später in diesem Tutorial.

Gitea mit dem Systemstart starten

Nun müssen wir uns um die Start von Gitea kümmern. Da Ubuntu Systemd benutzt erstellen wir und einfach einen Service. Wir erzeugen uns die Datei „/etc/systemd/system/gitea.service“ mit folgendem Inhalt:

[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
Requires=mysql.service
#Requires=mariadb.service
#Requires=postgresql.service
#Requires=memcached.service
#Requires=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
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/opt/gitea/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
# If you want to bind Gitea to a port below 1024 uncomment
# the two values below
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

Solltet Ihr euch bis hierin nicht an die gleichen Pfade und Benutzernamen gehalten haben, solltet Ihr in der Datei natürlich die Angaben entsprechend anpassen.

Nun aktivieren wir den Service und starten Gitea:

sudo systemctl enable gitea
sudo systemctl start gitea

(Optional) Datenbank erstellen

Gitea unterstützt verschiedene Datenbanksysteme wie MySQL, PostgreSQL und MSSQL. Wer nur eine kleine Installation plant, der kann auch auf eine SQLite3 Datenbank benutzen. In diesem Fall kann man direkt mit der Konfiguration von Gitea loslegen.

Wer größeres plant, oder einfach eine der genannten Datenbanken nutzen möchte, sollte sich nun einen Datenbankbenutzer und die Datenbank selbst erzeugen. Die Schritte hierfür sollen kein Bestandteil dieses Tutorials sein. Hierfür gibt es genug Anleitungen im Netz.

Je nachdem für welche Datenbank entschieden hat, sollte man im obigen Startscript die entsprechende Datenbank aktivieren z.B. „Requires=mysql.service“. Einfach die Zeile ein/auskommentieren. Damit wartet Gitea beim Start auf die Datenbank.

Gitea konfigurieren

Sobald Gitea gestartet wurde, kann man im Browser auf die Instanz zugreifen z.B. „http://localhost:3000„. Port 3000 ist der Standard Port von Gitea, den man natürlich ändern kann.

Sobald man auf der Gitea Seite ist, klickt man oben rechts auf „Anmelden“ und man kommt direkt in die Installationsroutine. Hier spare ich mir einen Screenshot. Das ganze sollte selbsterklärend sein. Bei Datenbank wählt man die gewünschte aus und trägt alle Daten ein.
Im letzten Punkt muss man noch einen Administrator Account anlegen. Der Rest kann man auch später über die Datei „/etc/gitea/app.ini“ anpassen.

Sobald man alles konfiguriert hat, werden die notwendigen Tabellen in den Datenbanken erzeugt und die Konfigurationsdatei wird erzeugt. Danach befindet man sich als Administrator auf der Weboberfläche.
Die grundlegende Einrichtung von Gitea ist damit abgeschlossen.

Im Nachgang sollte man sich aber noch um das Fine-Tuning kümmern, was aber kein Bestandteil dieses Tutorials sein soll.

(Optional) SSH Zugriff auf Repositories

Um per SSH auf die Repositories Zugriff zu bekommen muss natürlich SSH in Gitea aktiviert werden. Das geschieht in der Datei „/etc/gitea/app.ini“.
Der Einfachheit halber ein Auszug aus meiner Konfiguration:

[server]
SSH_DOMAIN       = example.org
DOMAIN           = example.org
HTTP_PORT        = 3000
ROOT_URL         = http://example.org:3000/
DISABLE_SSH      = false
SSH_PORT         = 22
LFS_START_SERVER = false
OFFLINE_MODE     = false

Danach sollte man Gitea neu starten, damit die Änderungen aktiv werden.
Ein sehr wichtiger Punkt ist, dass man die SSH Schlüssel ausschließlich über die Gitea Weboberfläche hinzufügen darf. Das geht einfach in den Einstellungen des Benutzers.

Ein „ssh-copy-id“ und sonstiges helfen nicht weiter und führen nur zum nicht funktionieren von der SSH Verbindung. Man muss unbedingt kontrollieren, das die Datein „/home/git/.ssh/authorized_keys“ leer ist, bevor man anfängt mit dem Hinzufügen von SSH Schlüsseln.

(Optional) Gitea SSL Verbindung über Apache Reverse Proxy

Die Weboberfläche läuft aktuell nur im „HTTP“ Modus, was ja nicht mehr zeitgemäß ist. Ich habe auf meinem Server eine Subdomain für Gitea erzeugt und mit einem Let’s Encrypt Zertifikat versehen. Zusätzlich habe ich eine Zwangsumleitung auf „HTTPS“ gemacht.
Auf die Details möchte ich hier nicht eingehen, da es genügen Anleitungen im Netz dafür gibt.

In Apache müssen die Module „proxy“ und „proxy_http“ aktiviert sein. Wichtig sind folgende Einträge in der Konfiguration der Domain in Apache:

ProxyPreserveHost On
ProxyRequests off
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/

Apache neu durchstarten und dann müssen wir noch in der Konfigurationsdatei von Gitea „/etc/gitea/app.ini“ den Domainnamen ändern:

[server]
ROOT_URL         = http://git.example.org/
HTTP_ADDR        = 127.0.0.1

Es reicht die Anpassung der „ROOT_URL“. Die sorgt dafür das die Links zu den Repositories richtig angezeigt werden. Zusätzlich habe ich den Parameter „HTTP_ADDR“ hinzugefügt und den Localhost reingeschrieben.
Somit ist Gitea nur noch über die erzeugte Subdomain zu erreichen z.B. „http://git.example.org“ und nicht mehr über „http://example.org:3000“.
Somit zwinge ich jeden eine verschlüsselte Verbindung zu benutzen.

Abschluss

Das waren nun alle notwendigen Schritte um Gitea auf einem Linux Server zu installieren. In weiteren Tutorials werde ich auf die Konfiguration von Gitea eingehen:

Hiermit ist dieses Tutorial abgeschlossen. Ich hoffe es war hilfreich für euch! Wenn Ihr mich unterstützen wollt, könnt ihr das sehr gerne hier tun.

4 comments

Hat alles funktioniert und ich kann auch per https auf mein unter nginx laufendes gitea repo für userx pushen bzw. von dort pullen.

Allerdings will es partout nicht mit ssh funktionieren, configs sind so wie oben und ich kann mich normal per userx auf die maschine verbinden, wenn ich aber per ssh auf das repo pullen oder pushen möchte erhalte ich immer „connection refused“..

Der öffentliche Schlüssel wurde ebenfalls über die web-oberfläche hinzugefügt.

Keine Idee mehr wo ich ansetzen könnt..

Ich kann leider nicht über ssh zugreifen. Habe gitea nach dieser Anleitung unter nginx in einer subdomain, bekomme aber bei „git push -vvv origin master“ immer einen kex_exchange_error. Vielleicht braucht es da eine spezielle conf..

Der https-sync funktioniert ohne Probleme, allerdings muss immer user und pwd eingegeben werden, daher der Wunsch zum key-auth verfahren von ssh.

Leave a Reply

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.