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 eher versteckt halten möchtest, solltest Du die Adresse nicht zu offensichtlich gestalten. Es empfiehlt sich also, eher neutrale Bezeichnungen für die Subdomain und den Unterordner zu wählen. In diesem Zusammenhang trägt der Unterordner deutlich mehr zur Sicherheit bei, denn der müsste sozusagen erraten werden. Die Subdomain hingegen steht in der öffentlich zugänglichen DNS Zonefile.
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 Zonefile 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 Standard Port 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 ist hier Beispielhaft 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 mit wget und speichern es unter /usr/local/bin/gitea. Zum Zeitpunkt des Schreibens ist die aktuelle Version 1.16.9:
Die heruntergeladene Datei muss dann noch ausführbar gemacht werden:
__$ sudo chmod +x /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 Web Konfigurationsdatei zeigt auf die eigenen Einstellungen: /var/lib/gitea/custom/conf/app.ini.
Fehlt noch die Web Konfigurationsdatei /var/lib/gitea/custom/conf/app.ini. Auch dazu hat Gitea eine Standard 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 Beispiel Datei sind manche überflüssig, sie sollen nur für eine schnellere Nachbearbeitung mit eingetragen werden.
Gitea ist jetzt bereit den ersten Start auszuführen, was durch INSTALL_LOCK = false einen Installationsprozess auslöst. Die Optionen, die jetzt beim Web Installer gemacht 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.
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: