Gitlab auf einem Cloud-Server

Einleitung

Gitlab kann als zentraler Server für das Versionsverwaltungssystem git dienen. Zusätzlich bietet es Teams Funktionalitäten für das Management von Software-Projekten, wie z.B. ein integriertes Ticket-System und Funktionalitäten für Continuous Integration, sowie Continuous Delivery. Gitlab ist vergleichbar mit github.com, aber mit dem Unterschied, dass es auf einem eigenen Server installiert werden kann und man hierüber als Administrator die volle Kontrolle hat. Da es als Open Source Software angeboten wird, wären theoretisch sogar beliebige Anpassungen an Gitlab möglich.

Die Software besteht im wesentlichen aus einem Webinterface, bringt aber u.a. auch einen integrierten SSH-Server mit, über den git-Clients auf die Repositories auf dem Server zugreifen können. Das in Ruby, Go und Vue.js programmierte Gitlab kann nicht auf einem Webspace installiert werden, läuft aber auf den gängigen Linux-Distributionen, sodass der Betrieb auf einem Cloud-Server möglich ist.

Gitlab wird von der Firma Gitlab, Inc mit Unternehmenssitz in San Francisco in zwei Varianten bereitgestellt. Es existiert eine Community Edition “Gitlab CE”, welche unter einer MIT Open Source Lizenz steht und kostenlos verwendet werden kann. Werden weitere Funktionen benötigt, welche nicht in “Gitlab CE” enthalten sind, so kann auf die kostenpflichtige Enterprise Edition “Gitlab EE” zurückgegriffen werden.

Voraussetzungen

Kenntnisse

Diese Anleitung richtet sich an Personen mit grundlegenden Linux-Kentnissen, die mit dem Betrieb von Linux-Servern vertraut sind. Sie sollten u.a. mit der Linux-Kommandozeile umgehen können, sowie sollte Ihnen bekannt sein, wie Sie sich per SSH auf Ihren Cloud-Server verbinden können.

Hardware

Gitlab kommt mit 4 GB Arbeitsspeicher zurecht, empfohlen werden jedoch mindestens 8 GB. Es wird weiterhin empfohlen, dass mindestens zwei CPU-Kerne zur Verfügung stehen. In dieser Konfiguration stehen genug Ressourcen für etwa 100 Benutzer zur Verfügung. Die Größe des Festplattenspeichers orientiert sich an der Größe der git-Repositories, welche auf dem Server abgelegt werden sollen. Weitere Details zu den Vorausseztungen für Gitlab entnehmen Sie bitte dieser Seite.

Sollen auf dem Server selbst Backups von Gitlab angelegt werden, wird entsprechend mehr Speicherplatz benötigt.

Betriebssystem

In dieser Anleitung wird die Installation auf einem neu aufgesetzten Cloud-Server mit Debian 10 “Buster" gezeigt. Von Gitlab werden weitere Linux-Distributionen unterstützt. Eine Übersicht darüber findet sich auf dieser Seite.

Domain

Für den Gitlab-Server sollte man eine eigene Domain oder Subdomain anlegen, wie z.B. git.mustermann-domain.de.

Installation

Es gibt mehrere Arten, Gitlab auf einem Debian-System zu installieren. Wir verwenden hier das “Omnibus Gitlab” Paket. Es ermöglicht die Installation der verschiedenen Gitlab Komponenten in einer gebündelten Form und vermeidet großen Konfigurationsaufwand.

Loggen Sie sich bitte per SSH als root-Benutzer auf Ihrem Cloud-Server ein:

ssh root@git.mustermann-domain.de

und installieren Sie mit Hilfe der folgenden Befehle die nötigen Abhängigkeiten:

apt-get update
apt-get install -y curl sudo ca-certificates

Fügen Sie bitte das Gitlab Repository hinzu und installieren Sie es mit folgendem Befehl:

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

Installieren Sie bitte anschließend das gitlab-ce Paket für die Community-Edition:

apt install gitlab-ce

Nach der Installation des Paketes sollte die folgende Ausgabe am Bildschirm erscheinen:


       *.                  *.
      ***                 ***
     *****               *****
    .******             *******
    ********            ********
   ,,,,,,,,,***********,,,,,,,,,
  ,,,,,,,,,,,*********,,,,,,,,,,,
  .,,,,,,,,,,,*******,,,,,,,,,,,,
      ,,,,,,,,,*****,,,,,,,,,.
         ,,,,,,,****,,,,,,
            .,,,***,,,,
                ,*,.



     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ `/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/


Thank you for installing GitLab!
GitLab was unable to detect a valid hostname for your instance.
Please configure a URL for your GitLab instance by setting `external_url`
configuration in /etc/gitlab/gitlab.rb file.
Then, you can start your GitLab instance by running the following command:
  sudo gitlab-ctl reconfigure

For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md

Konfiguration

Nach erfolgreicher Installation müssen noch ein paar Dinge konfiguriert werden, bevor Gitlab genutzt werden kann.

Öffnen Sie bitte die Datei /etc/gitlab/gitlab.rb mit einem Texteditor, wie z.B. nano oder vim (für fortgeschrittene Benutzer), auf dem Server:

nano /etc/gitlab/gitlab.rb

Konfiguration einer korrekten URL

Setzen Sie bitte den Parameter external_url auf die URL des Servers, also z.B. auf https://gitlab.mustermann-domain.de. Achten Sie bitte darauf https:// statt http:// für eine gesicherte Verbindung zum Server zu verwenden. Gitlab erstellt und verwendet automatisch ein SSL/TLS-Zertifikat von “Let’s encrypt”.

## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
external_url 'http://gitlab.mustermann-domain.de'

Führen Sie anschließend bitte den folgenden Befehl aus, um die neue Konfiguration zu aktivieren:

sudo gitlab-ctl reconfigure

Der Vorgang nimmt einige Zeit in Anspruch. Nach einer großen Menge von Meldungen, sollte die Meldung “gitlab Reconfigured!” erscheinen.

Konfiguration eines Mailservers für ausgehende E-Mails (optional)

In der Datei /etc/gitlab/gitlab.rb können die Zugangsdaten für einen externen Mailserver eingetragen werden, falls der Versand nicht direkt über den Gitlab-Server selbst erfolgen soll. Die Einstellungen könnten z.B. wie folgt aussehen:

### GitLab email server settings
###! Docs: https://docs.gitlab.com/omnibus/settings/smtp.html
###! **Use smtp instead of sendmail/postfix.**

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "mail.mustermann-domain.de"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "gitlab@mustermann-domain.de"
gitlab_rails['smtp_password'] = "geheimeszufaelligespasswort"
gitlab_rails['smtp_domain'] = "mustermann-domain.de"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false

Zusätzlich kann noch die Absenderadresse spezifiziert werden:

### Email Settings
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'gitlab@mustermann-domain.de'

Aktivieren Sie bitte anschließend die neue Konfiguration:

sudo gitlab-ctl reconfigure

Den Versand von E-Mails können Sie testen, indem sie später z.B. die “Passwort vergessen”-Funktion Ihres Benutzerkontos benutzen.

Konfiguration des Administrator-Benutzerkontos

Rufen Sie nun bitte die Seite im Browser über die URL der Gitlab-Instanz auf. Hier können Sie nun das Administrator-Passwort festlegen:

Gitlab Konfiguration

Loggen Sie sich anschließend bitte mit dem Benutzernamen “root” und dem Passwort, welches Sie festgelegt haben, ein:

Gitlab Konfiguration

Nachdem Login präsentiert sich Gitlab wie folgt:

Gitlab Konfiguration

Da Ihr Name wahrschienlich nicht “root” ist, ist es sinnvoll, Ihren Benutzernamen zu ändern. Das geschieht in den Einstellungen Ihres Kontos. Rufen Sie diese bitte über das Dropdown in der oberen rechten Ecke der Seite auf:

Gitlab Konfiguration

Auf der folgenden Seite können Sie, z.B. Ihren Anzeigenamen und Ihre E-Mailadresse ändern.

Gitlab Konfiguration

Klicken Sie anschließend im Menü auf der linken Seite auf “Account”, so können Sie auf der folgenden Seite Ihren Benutzernamen ändern:

Gitlab Konfiguration

Die Sprache der Oberfläche kann unter “Preferences” für das individuelle Benutzerkonto auf Deutsch geändert werden:

Gitlab Konfiguration

Unter “SSH-Keys” können Sie einen öffentlichen SSH-Schlüssel für den Zugriff mit git auf Gitlab hinterlegen:

Gitlab Konfiguration

Öffentliche Registrierung deaktivieren

Gitlab ermöglicht standardmäßig jedem sich in der Instanz ein neues Benutzerkonto über das Webinterface zu erstellen. Es empfiehlt sich, dieses Feature abzuschalten oder einzuschränken. Gehen Sie dazu bitte in den “Adminbereich”:

Gitlab Konfiguration

Klicken Sie dort bitte auf “Einstellungen” > “Allgemein” und klappen Sie die Einstellungen unter “Registrierungsbeschränkungen” aus:

Gitlab Konfiguration

Entfernen Sie bitte den Haken bei “Sign-up enabled”. Statt die Registrierung zu deaktivieren könnten Sie auch z.B. nur Benutzern eine Registrierung erlauben, die eine E-Mailadresse der Domain Ihres Unternehmens besitzen.

Erstellung von Benutzerkonten

Neue Benutzerkonten können im “Adminbereich” angelegt werden. Klicken Sie dort bitte auf “Übersicht” > “Benutzer(innen)":

Gitlab Konfiguration

Um einen neuen Benutzer anzulegen, klicken Sie bitte dort auf “Neue(r) Benutzer(in)".

Gitlab Konfiguration

Neu erstellte Benutzer erhalten automatisch einen Einladungslink per E-Mail um ihr Passwort zu setzen.

Backups

Da sich auf dem Gitlab-Server in der Regel unternehmenskritische Daten befinden, sollten hiervon regelmäßig Sicherheitskopien erstellt werden. Gitlab bringt in der Omnibus-Installation ein Backup-Tool mit, welches alle wichtigen Daten aus der Installation sichert. Zur Verwendung müssen zunächst die nötigen Abhängigkeiten installiert werden:

apt update
apt install tar rsync

Anschließend kann mit dem Befehl:

gitlab-backup create

ein Backup auf dem Server selbst angelegt werden.

Die Backups werden im Verzeichnis /var/opt/gitlab/backups/ in Form von tar-Archiven abgelegt. Kopieren Sie die Dateien bitte von dort an einen sichere Ort außerhalb des Servers.

Das Backup enthält nicht die Konfiguration der Gitlab-Installation. Darin sind aber wichtige kryptographische Schlüssel enthalten. Daher muss die Konfiguration separat gesichert werden. Kopieren Sie dazu bitte das Verzeichnis

/etc/gitlab

an einen sicheren Ort außerhalb des Servers.

Weitere Informationen zum Backup und Restore von Gitlab findet man in der Gitlab-Dokumentation.

Updates und Pflege

Gitlab erhält kontinuierlich neue Funktionalitäten und wie in jeder anderen Software auch, können im Entwicklungsprozess Fehler und Sicherheitslücken aufgetreten sein, die nur durch die regelmäßige Installation von Updates behoben werden können. Da Gitlab über die Debian Paketverwaltung installiert wurde, werden Updates für die Gitlab Omnibus Installation beim Aktualisieren des Betriebssystems über

apt update
apt upgrade

automatisch eingespielt.

Weitere Features

Mattermost

Die Gitlab-Installation bringt den webbasierten Instant-Messaging Dienst für Unternehmen “Mattermost” direkt mit. Wie Mattermost mit geringem Aufwand eingerichtet werden kann, wird in der Dokumentation von Gitlab beschrieben.

Large File Storage (LFS)

Die Large File Storage” (LFS) Erweiterung für git, ermöglicht es, auch große Dateien platzsparend in git zu verwalten. Git LFS speichert nicht die gesamte Versionshistorie auf dem Client-Rechner, sondern auf dem Server, weshalb Gitlab diese Funktionalität unterstützen muss. Wie LFS in Gitlab aktiviert werden kann, wird hier beschrieben.

Continuous Integration, Continuous Delivery und Continuous Deployment

“Continous Integration” (CI) ist eine Methode in der Softwareentwicklung, bei der kleine Änderungen einer Software während des Entwicklungsprozesses stückweise und isoliert automatisch getestet werden und erst nach erfolgreichem Test der Codebasis hinzugefügt werden.

“Continuous Delivery” und “Continuous Deployment” (CD) erlauben die teilautomatisierte oder vollständig automatisierte Installation der entwickelten Software auf den Zielsystemen.

Gitlab bringt umfangreiche Funktionalitäten für CI und CD mit. Weitere Informationen dazu findet man in der Dokumentation von Gitlab.

Fazit

In diesem Tutorial wurde gezeigt, wie Gitlab auf einem Cloud-Server installiert und grundlegende konfiguriert werden kann. Außerdem wurde gezeigt, wie der sichere Betrieb durch die Installation von Updates und die Erstellung von Backups langfristig sichergestellt werden.

Referenzen