In diesem Tutorial werden wir auf unserem Cloud-Server einen Git-Service hosten.
Ein Git-Service lässt sich relativ schnell installieren. Für den sicheren und produktiven Einsatz, braucht es jedoch noch weitere Einstellungen am Server. Außerdem soll der Git-Server unter einer Subdomain adressiert sein und nicht die ganze Cloud-Ressource einnehmen.
Ziel dieses Tutorials ist, Gitea unter einer verschlüsselten Subdomain in einem Unterordner zu hosten: https://git.linuxserversetup.com/gitea.
Falls du den Git-Server weniger offensichtlich platzieren möchtest, kannst du neutrale Bezeichnungen für die Subdomain und den Unterordner wählen. Ein Unterordner ist weniger leicht auffindbar als eine Subdomain, die in öffentlichen DNS-Daten steht. Das reduziert aber nur zufällige Funde: Es ist keine Zugriffskontrolle und ersetzt weder die Anmeldung noch eine restriktive Gitea-Konfiguration.
Wir starten damit eine Subdomain mit TLS vorzubereiten, so dass wir anschließend einen beliebigen Git-Service installieren können. Als Versionsverwaltungssoftware mit grafischer Weboberfläche nehmen wir Gitea. Es ist kostenlos und Open Source. Die Vorgehensweise Gitea zu implementieren ist eigentlich klar, lässt aber im Detail viele Einstellungen zu. Die Feinheiten kannst du in der Konfigurationsdatei und über die Weboberfläche für dich anpassen.
Wie eine Subdomain in die DNS-Zonendatei eingetragen wird, wurde bereits in DNS-Einträge bearbeiten beschrieben.
Beispielhaft nenne ich die Subdomain git. Aus genannten Gründen macht es aber Sinn, einen nicht so offensichtlichen Namen zu vergeben. Der A-Record dazu wäre:
git IN A 116.203.69.89
Bei mir sieht die finale Zonendatei dann so aus:
$ORIGIN linuxserversetup.com.
; SOA-Records
$TTL 86400
@ IN SOA hydrogen.ns.hetzner.com. dns.hetzner.com. (
2021123100 ; serial
86400 ; refresh
10800 ; retry
3600000 ; expire
3600 ; negatives caching
)
; NS Records
@ IN NS hydrogen.ns.hetzner.com.
@ IN NS oxygen.ns.hetzner.com.
@ IN NS helium.ns.hetzner.de.
; MX-Records
@ IN MX 10 mail
; A Records
@ IN A 116.203.69.89
mail IN A 116.203.69.89
www IN A 116.203.69.89
dev IN A 116.203.69.89
git IN A 116.203.69.89
Input the webroot for git.linuxserversetup.com: /var/www/com.linuxserversetup.git
Die neuen Zertifikate sollten dann unter /etc/letsencrypt/live/git.linuxserversetup.com/ liegen. Genauer gesagt, liegen dort Verknüpfungen zu den tatsächlichen Dateien.
__$ sudo ls -la /etc/letsencrypt/live/git.linuxserversetup.com
Nginx Konfigurationsdatei auf HTTPS umstellen
Die Zertifikate können wir jetzt in die vorhin erstellte Konfigurationsdatei implementieren und nehmen noch folgende Änderungen vor:
HTTPS soll erzwungen werden
TLS Implementation
git.linuxserversetup.com soll mit der leeren HTML Seite antworten
git.linuxserversetup.com/gitea leitet auf den internen Port 3800 weiter
Der Standardport von Gitea ist eigentlich 3000. Ich werde den später auf 3800 ändern, daher hier schon die Vorbereitung dazu.
MySQL installieren und einrichten hatten wir bereits in einem vorherigen Kapitel erledigt. Jetzt brauchen wir nur noch einen MySQL-Benutzer gitea mit gleichnamiger Datenbank erstellen. Das Passwort lautet in diesem Beispiel gitea123.
__$ sudo mysql
__gt CREATE USER 'gitea'@'localhost' IDENTIFIED BY 'gitea123';
__gt GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'localhost';
__gt FLUSH PRIVILEGES;
__gt CREATE DATABASE gitea;
__gt exit;
Gitea herunterladen und konfigurieren
Wir beziehen Gitea von der offiziellen Quelle. Zum Zeitpunkt des Schreibens ist die aktuelle Version 1.27.1. Bevor du die Befehle später verwendest, solltest du auf der verlinkten Seite nach der aktuellen Version schauen und gegebenenfalls die Versionsnummer in allen Dateinamen ersetzen.
Wir laden zunächst die Binärdatei und ihre Signatur nach /tmp, prüfen die Signatur mit dem veröffentlichten Schlüssel von Gitea und installieren die Binärdatei erst danach unter /usr/local/bin/gitea:
Wir erstellen für Gitea eine Ordnerstruktur unter /var/lib. Dort platzieren wir auch einen Ordner für eigene Einstellungen, die die Standard Konfiguration überschreibt. Dadurch lässt sich Gitea aktualisieren, ohne dass die eigenen Einstellungen zurückgesetzt werden.
Mit dem ersten Start wird die Software installiert und dadurch weitere Systemdateien in /etc/gitea erstellt. Danach können die Verzeichnisrechte wieder geändert werden. Wir kommen später darauf zurück.
Damit Gitea automatisch startet, erstellen wir einen Linux Service /etc/systemd/system/gitea.service. Eine Standard Datei ist zum Beispiel hier zu finden githubusercontent.com/go-gitea.
Wir erstellen die Datei:
__$ sudo nano /etc/systemd/system/gitea.service
Mit diesem Inhalt:
/etc/systemd/system/gitea.service
[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
###
# Don't forget to add the database service dependencies
###
#
Wants=mysql.service
After=mysql.service
#
#Wants=mariadb.service
#After=mariadb.service
#
#Wants=postgresql.service
#After=postgresql.service
#
#Wants=memcached.service
#After=memcached.service
#
#Wants=redis.service
#After=redis.service
#
###
# If using socket activation for main http/s
###
#
#After=gitea.main.socket
#Requires=gitea.main.socket
#
###
# (You can also provide gitea an http fallback and/or ssh socket too)
#
# An example of /etc/systemd/system/gitea.main.socket
###
##
## [Unit]
## Description=Gitea Web Socket
## PartOf=gitea.service
##
## [Socket]
## Service=gitea.service
## ListenStream=
## NoDelay=true
##
## [Install]
## WantedBy=sockets.target
##
###
[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/
# If using Unix socket: tells systemd to create the /run/gitea folder, which will contain the gitea.sock file
# (manually creating /run/gitea doesn't work, because it would not persist across reboots)
#RuntimeDirectory=gitea
ExecStart=/usr/local/bin/gitea web --config /var/lib/gitea/custom/conf/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
# If you install Git to directory prefix other than default PATH (which happens
# for example if you install other versions of Git side-to-side with
# distribution version), uncomment below line and add that prefix to PATH
# Don't forget to place git-lfs binary on the PATH below if you want to enable
# Git LFS support
#Environment=PATH=/path/to/git/bin:/bin:/sbin:/usr/bin:/usr/sbin
# If you want to bind Gitea to a port below 1024, uncomment
# the two values below, or use socket activation to pass Gitea its ports as above
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE
###
[Install]
WantedBy=multi-user.target
Es handelt sich im Grunde um die oben erwähnte Standard Datei mit lediglich zwei Änderungen:
Wants=mysql.service und After=mysql.service sind einkommentiert.
Der Pfad zur Webkonfigurationsdatei zeigt auf die eigenen Einstellungen: /var/lib/gitea/custom/conf/app.ini.
Fehlt noch die Webkonfigurationsdatei /var/lib/gitea/custom/conf/app.ini. Auch dazu hat Gitea eine standardmäßige app.example.ini-Datei veröffentlicht. In dieser Datei stehen alle möglichen Optionen, von denen wir nicht alle übernehmen müssen. Auch in der folgenden Beispieldatei sind manche überflüssig, sie sollen nur für eine schnellere Nachbearbeitung mit eingetragen werden.
Gitea ist jetzt für den ersten Start bereit, was durch INSTALL_LOCK = false einen Installationsprozess auslöst. Die Einstellungen, die jetzt im Webinstaller vorgenommen werden, überschreiben automatisch die zuletzt erstellte Konfigurationsdatei /var/lib/gitea/custom/conf/app.ini. Wir rufen also die Gitea-Webadresse https://git.linuxserversetup.com/gitea auf und legen unter anderem darüber einen Administrator an. Die Option "E-Mail-Benachrichtigungen" kann an dieser Stelle auch aktiviert werden (ENABLE_NOTIFY_MAIL). Dadurch werden Repository-Beobachter per E-Mail über Ereignisse benachrichtigt.
Noch ein Hinweis: Im nächsten Abschnitt wird beschrieben, wie die öffentliche Registrierung deaktiviert werden kann. Das kann auch schon bereits jetzt im Installationsprozess über die Weboberfläche eingestellt werden.
Gitea installieren und Administrator erstellen:Gitea WebinstallerFehlerseite nach der Installation
Nach der Installation landen wir auf einer Fehlerseite, was typisch ist. Die Seite muss dann einfach nur neu geladen werden.
Der Git-Server ist jetzt fertig und betriebsbereit.
Falls der Ordner /etc/gitea nach der Installation noch existiert, was in neueren Gitea Versionen eventuell nicht mehr sein sollte, können die Zugriffsrechte davon wieder herabsetzen:
__$ sudo chmod 750 /etc/gitea
Öffentliche Registrierung deaktivieren
Wenn du Gitea nicht öffentlich teilen möchtest, solltest du die Registrierung DISABLE_REGISTRATION aktivieren:
Wir öffnen wieder die Webkonfiguration:
__$ sudo nano /var/lib/gitea/custom/conf/app.ini
Und ändern den Parameter:
Auszug aus /etc/systemd/system/gitea.service
...
DISABLE_REGISTRATION = true
...
Gitea neustarten, um die Änderungen zu übernehmen: