Eigenen Gitlab-Server unter Linux installieren und betreiben

Vorwort zur Anleitung:
Diese Anleitung hat einen mittleren Schwierigkeitsgrad.
Installation von Linux und Kenntnisse in der Befehlszeile sind vorausgesetzt.

Was ist ein Gitlab-Server?

GitLab ist eine DevOps-Plattform, die Entwicklern hilft, Code zu verwalten und zu entwickeln.
 
GitLab CE (Community Edition) 
    • Open Source: Die Community Edition ist die kostenlose, Open-Source-Version von GitLab. Sie bietet Funktionen für die Versionskontrolle und DevOps-Prozesse..
    • Funktionsumfang: GitLab CE umfasst Funktionen wie:
        ◦ Git-Repository-Management
        ◦ Code-Reviews
        ◦ CI/CD-Pipelines (mit begrenztem Funktionsumfang im Vergleich zur kostenpflichtigen Version)
        ◦ Issue-Tracking
        ◦ Merge-Requests
        ◦ Wiki und Snippets
 
Einsatzmöglichkeiten eines GitLab CE Servers 
    • Entwicklerteams können ihre Projekte und Code-Repositorys auf diesem Server verwalten.
    • CI/CD-Prozesse für automatisierte Tests und Deployments werden auf dem GitLab CE Server eingerichtet.
    • Private Git-Instanzen: Unternehmen oder Einzelpersonen, die GitLab für ihre eigene Infrastruktur verwenden möchten, ohne eine kommerzielle Lizenz (Enterprise Edition) zu benötigen, können GitLab CE auf einem eigenen Server betreiben. 
Zusammengefasst ist ein GitLab CE Server einfach eine selbstgehostete Installation von GitLab in der Community Edition. Er kann auf einer Vielzahl von Betriebssystemen installiert werden und ermöglicht es Teams, GitLab mit den grundlegenden Funktionen zu nutzen.

Vorbereitungen / Anforderungen:

Anforderungen
Schwierigkeitsgrad-Installation: Mittel
Schwierigkeitsgrad-Anwendung: Schwer
Erforderliche Kenntnisse: Linux-Befehlszeile
Systemvoraussetzungen:
Basis: Debian
Betriebssystem: Ubuntu Server (Headless)
Festplattenspeicher: Mindestens 17 GB
CPU: Mindestens 2 CPU
RAM: Mindestens 5 GB
Internetverbindung: Verfügbar
Die Systemanforderungen wurden in einer virtualisierten Umgebung getestet.
Tipp:
Wenn du mit Virtualisierung, z.B. ProxMox, vertraut bist, kannst du deine eigenen Server effizient und stromsparend betreiben!
Getestet auf:
  • Ubuntu-Server 22.04
  • Ubuntu-Server 24.10
Installationsablauf:
1. Durchführung von System-Upgrade
2. Statische IP-Adresse festlegen und anwenden
3. (Optional) Hostnamen festlegen
4. Installation und Einstellungen
5. CUPS Bedienoberfläche
6. Systembedienung
7. Störungsanalyse
Optionale Schritte können weggelassen werden, da sie lediglich unterstützende Funktionen bieten, wie zum Beispiel die Zusammenfassung von Servern in einem Rechenzentrum.
Für den Betrieb in einem Rechenzentrum sollten die optionalen Abläufe jedoch aus Gründen des beruflichen Stolzes in Betracht gezogen werden.

1. Durchführung von System-Upgrade

Vor jeder Installation ist ein System-Update erforderlich:
$> ssh DEINUSER@192.168.1.X
# Stelle eine SSH-Verbindung zu deinem Server her
$> sudo apt update
# Aktualisiere die Paketquellen
$> sudo apt upgrade -y
# Starte das System-Upgrade
$> sudo apt autoclean
# Optional: Entferne überflüssige Pakete
$> sudo apt autoremove
# Optional: Bereinige das System von Abhängigkeiten

2. Statische IP-Adresse festlegen und anwenden

Ein Gitlab-Server benötigt eine statische IP-Adresse. Alternativ kann auch eine per DHCP zugewiesene feste Adresse verwendet werden, jedoch sollte diese niemals geändert werden.
Es besteht die Möglichkeit, sich selbst vom Server auszuschließen, wenn die IP-Adresse nicht korrekt konfiguriert ist.
$> ip addr
# Liste alle Netzwerkadapter und Informationen auf
$> sudo su
# Wechsel in die Super-User-Shell
$> cd /etc/netplan
# Wechsle ins Netplan-Verzeichnis
$> ls -l
# Zeige alle Dateien im Netplan-Verzeichnis an
$> for i in $( ls ); do mv $i $i.bak; done
# Sichere alle bestehenden Konfigurationen als Backup
$> touch /etc/netplan/01_static_ip.yaml
# Erstelle eine neue Konfigurations-Datei
$> nano /etc/netplan/01_static_ip.yaml
# Öffne die neue Konfigurations-Datei
network:
  version: 2
  renderer: networkd
  ethernets:
    ens18: #Edit this line according to your network interface name.
      dhcp4: no
      addresses:
        - 192.168.1.150/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
# Öffne die Datei mit einem Texteditor (Copy-Paste)
# Ersetze ens18 durch den Namen deines Netzwerk-Adapters (siehe Ausgabe von ip addr).
# Ändere die IP-Adresse und die Netzmaske nach Bedarf.
# Passen die DNS-Adressen an, falls erforderlich.
# Überprüfe und passe ggf. die Routen (Gateway) an.
Speichern und Verlassen
• Speichern der Datei: Ctrl + O
• Editor verlassen: Ctrl + X
$> netplan generate && netplan apply
# Wende die neuen Netzwerkeinstellungen an
🚨 Der Server wechselt nun zu einer neuen IP-Adresse, was dazu führt, dass deine SSH-Sitzung unterbrochen wird.

3. (Optional) Hostnamen festlegen

Durch das Ändern des Hostnamens der Server-Station vergibst du einen eindeutigen Namen für das System.
In unserem Fall könnte der Hostname beispielsweise „S5-Gitlab-Server“ lauten.
Die Hosts-Datei wird verwendet, um auf Server-Ebene IP-Adressen Namen zuzuordnen, die intern genutzt werden. Wenn du den Hostnamen änderst, muss auch der entsprechende Eintrag in der Hosts-Datei aktualisiert werden. Bei produktiven Systemen sollte diese Kleinigkeit unbedingt beachtet werden, da sie ein Zeichen von Berufsethos und Professionalität ist. Für Tests und Experimente ist dies jedoch nicht zwingend erforderlich.
Der neue Hostname muss zwingen der gleiche sein wie auch im Hosts-File.
$> ssh DEINUSER@192.168.1.X
# Wiederherstellen der SSH-Verbindung
$> sudo hostnamectl set-hostname DEINHOSTNAME
# Einen neuen Host-Namen setzen
$> sudo nano /etc/hosts 
# Hosts-Datei öffnen und ändere den markierten Bereich

127.0.0.1 localhost
127.0.1.1 DEINHOSTNAME

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ……..

# Speichern und Verlassen
• Speichern der Datei: Ctrl + O
• Editor verlassen: Ctrl + X
$> sudo reboot
# Server neu starten, damit die Änderungen wirksam werden

4. Installation und Einstellungen

$> ssh DEINUSER@192.168.1.x
# Wiederherstellen der SSH-Verbindung
$>sudo apt install curl openssh-server ca-certificates tzdata perl postfix -y
# Zusatz-Systeme installieren
$> curl -O https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
# Download Install-Script 
$> chmod +x script.deb.sh
# SH-File ausführbar machen
$> sudo bash script.deb.sh
# Script ausführen
$> sudo apt install gitlab-ce
# System installieren
$> nano /etc/gitlab/gitlab.rb
# Konfiguration eintragen


external_url ‚http://192.168.1.151‘

# IP / URL Eintragen
$> sudo gitlab-ctl reconfigure
# Einstellung laden
$> sudo cat /etc/gitlab/initial_root_password
# Root-Passwort anzeigen
$> sudo gitlab-rake "gitlab:password:reset[root]"
# Optional: Neues Root-Passwort setzen
$> sudo reboot
# System-Neustart

5. Systembedienung

$> sudo gitlab-ctl restart
# Dienst starten
$> sudo gitlab-ctl stop
# Dienst stoppen 
$> sudo gitlab-ctl status
# Dienst Status 
$> sudo nano /etc/gitlab/gitlab.rb 
# Konfigurationsdatei bearbeiten
$> gitlab-ctl --help
# Hilfe-Prompt, Steuerungsoptionen
$> sudo gitlab-ctl upgrade
# Gitlab upgrade
$> sudo apt install nmap -y && nmap localhost
# System-Ports anzeigen
$> sudo proftpd -t
# Konfigurations-Überprüfung
$> cat /var/log/proftpd/proftpd.log
# Log-Files
$> cat /var/log/proftpd/xferlog
# Log-Files

6. Gitlab Bedienoberfläche, erstes Projekt erstellen

Öffnen des Web-GUI via Web-Browser
Für das erste Login ist der Account «root» zu verwenden.
Wechsle auf die Admin-Seite wo du auf eine Nutzer-Übersicht gelangst.
Erstelle einen neuen GitLab-Benutzer.
Wähle passende Credentionals und sieh dir die möglichen Einstellungen genau an:
In unserem Fall existiert noch kein Mail-Server, richte für den Benutzer X also ein Passwort ein:
Logge dich mit dem neuen Benutzer ein.
Lege unter dem neuen User ein Projekt an.
Immer schön easy bleiben... und ein leeres Projekt erstellen – man kann die Funktionalitäten damit unverfälscht testen und erkunden:
Erstelle ein Projekt nach deinem Geschmack! Sieh dir die möglichen Einstellungen genau an.
Dein Test-Projekt wurde erfolgreich erstellt. Hier findest du die Projekt-Übersicht:
Für weiter Schritte ist es hilfreich unter «Code» die http-Sektion des Projektes zu kopieren:

7. Projekt-Handling anhand eines Beispieles

Hinweis: Dieses Beispiel überspingt die Einrichtung von Git nach dem installieren. Es dient der Veranschaulichung.
$> ssh CLIENT1@192.168.1.X
# Verbindung zum Client aufbauen
$> sudo apt install git
# Dienst installieren … Wichtig: Hier kämen noch Einstellungen hinzu.
$> mkdir projekte && cd projekte
# Ordner erstellen
$> git clone http://DeineIP/User/PROJEKT.git 
# Projekt klonen
$> cd PROJEKT && touch neuedatei1
# Eine neue Datei  erstellen
Dein Projekt-Repository ist nun vom Server-Stand abweichend. Dein lokales Projekt hat jetzt einen aktuelleren Status als der GitLab-Server.
$> git status
# Datei-Status anzeigen
$> git add .
# Alle Änderungen selektieren
$> git commit -m «neue-Datei»
# Kommentar eingeben
$> git push
# Projekt zum Server pushen
$> git status 
# Datei-Status anzeigen
Dein Projekt-Repository hat nun wieder den gleichen Projekt-Stand, wie der Server.
GitLab-Projekt von einem anderen eingerichteten Client auf den neuesten
Stand bringen. (Einfaches Pull–Beispiel wenn mehrere Benutzer das gleiche Projekt betreuen)
$> ssh CLIENT2@192.168.1.X
# Verbindung zum Client aufbauen
$> cd projekte
# Zum Projektordner wechseln
$> git pull
# Neuer Server-Stand herunterladen
Resümee:
Wer zum ersten Mal mit GitLab in der Kommandozeile arbeitet, sollte Geduld und Durchhaltevermögen mitbringen – vor allem, wenn man sich das Thema eigenständig erarbeiten muss. Fehlerbehandlung und verschiedene Betriebsmodi sind dabei noch nicht einmal angesprochen.
Zwar gibt es viele Anleitungen im Internet, doch die Herangehensweisen unterscheiden sich häufig stark. Dieses Thema könnte problemlos eine eigene Anleitung füllen.
Mein Tipp: Wenn du dich mit GitLab vertraut machst, geh es spielerisch an – zum Beispiel mit einem Testprojekt. Experimentiere, mache Fehler und lerne daraus.

8. Schlussbemerkung

Die GitLab-Technologie wurde hier anhand eines einfachen Beispiels vorgestellt. Mit GitLab
können Projekte versioniert und geteilt werden – in diesem Fall anschaulich über die
Kommandozeile. 
Viele grafische Entwicklungsumgebungen nutzen ebenfalls GitLab. Dadurch
können mehrere Entwickler gleichzeitig an einem Projekt arbeiten und den Versionsstand
aktuell halten.

Allerdings erfordert dies eine koordinierte Zusammenarbeit. Mit dieser Technologie hat GitLab
nicht nur einen neuen Ansatz in der Softwareentwicklung etabliert, sondern auch eine neue
Ideologie des Entwicklungsprozesses geprägt.
Die Entwicklung kann nun nicht nur dezentral organisiert werden, sondern es ist auch möglich, in alle Richtungen zu arbeiten. Entwickler können unabhängig an Projekten arbeiten oder diese mit anderen teilen – unabhängig davon, ob nur ein einzelner Entwickler oder ein ganzes Team beteiligt ist oder ob einfach nur Entwicklungen ausgetauscht werden.

Hier wurde lediglich eines der einfachsten Beispiele sowie die Installation demonstriert. Dabei
wurden Fehlerbehandlung und Versionskonflikte noch nicht berücksichtigt.