Gitlab auf einem Cloudserver
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:
Loggen Sie sich anschließend bitte mit dem Benutzernamen “root” und dem Passwort, welches Sie festgelegt haben, ein:
Nachdem Login präsentiert sich Gitlab wie folgt:
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:
Auf der folgenden Seite können Sie, z.B. Ihren Anzeigenamen und Ihre E-Mailadresse ändern.
Klicken Sie anschließend im Menü auf der linken Seite auf “Account”, so können Sie auf der folgenden Seite Ihren Benutzernamen ändern:
Die Sprache der Oberfläche kann unter “Preferences” für das individuelle Benutzerkonto auf Deutsch geändert werden:
Unter “SSH-Keys” können Sie einen öffentlichen SSH-Schlüssel für den Zugriff mit git auf Gitlab hinterlegen:
Ö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”:
Klicken Sie dort bitte auf “Einstellungen” > “Allgemein” und klappen Sie die Einstellungen unter “Registrierungsbeschränkungen” aus:
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)”:
Um einen neuen Benutzer anzulegen, klicken Sie bitte dort auf “Neue(r) Benutzer(in)”.
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
- Offizielle Webseite des Versionsverwaltungssystems git
- Allgemeine Informationen zu Gitlab
- “GitLab Installation” in der Gitlab-Dokumentation
- “Configuration options” in der Gitlab-Dokumentation
- “Backing up and restoring GitLab” in der Gitlab-Dokumentation