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.
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.
Hast du das Repository in Gitea erst erstellt und dann auch per SSH geklont?
Hast du auf deinem Sever den SSH Port in der Firewall freigegeben?
Ja und Ja – ich vermute gitea lauscht gar nicht auf den in der app.ini spezifiezierten Port, warum auch immer..