Wie gitlab im Docker installiert wird

Motivation

Einer meiner Kunden hatte kein Konzept für Code Reviews und einer modernen Versionierungslösung – gearbeitet wird mit IBMs ELM, welches seine Stärken hat, jedoch: Entwickler benötigen GitLab im Entwicklungsprozess, weil es eine integrierte Plattform für Quellcodeverwaltung, CI/CD und Teamzusammenarbeit bietet, die Agilität und Effizienz fördert. GitLab ermöglicht eine schnelle Iteration durch Funktionen wie Merge Requests und automatisierte Tests. IBM ELM hingegen konzentriert sich auf das Management des gesamten Engineering-Lebenszyklus, einschließlich Anforderungen, Tests und Änderungsmanagement, und ist ideal für komplexere Projekte, die strengen Compliance-Vorgaben unterliegen. Die beiden Tools schließen sich nicht aus; tatsächlich können sie gut zusammenarbeiten. Entwickler können GitLab für die Code-Entwicklung und -Bereitstellung nutzen, während ELM die Anforderungen und Tests verwaltet, wodurch eine nahtlose Integration und umfassende Rückverfolgbarkeit innerhalb des Projekts ermöglicht wird.

Voraussetzungen


Docker-Compose: Für die Verwaltung mehrerer Container (Datenbank, Redis, GitLab) ist Docker-Compose erforderlich:

Bash
sudo apt install -y docker-compose
  1. Docker: GitLab wird typischerweise in einem Docker-Container ausgeführt. Stelle sicher, dass Docker auf deinem System installiert ist. Wenn nicht, kannst du es mit den folgenden Befehlen installieren:
Bash
sudo apt update
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker

Um GitLab in einem Linux-Container (z.B. mit Docker) in Betrieb zu nehmen, sind einige Schritte erforderlich. Hier ist eine schrittweise Anleitung zur Installation von GitLab sowie eine Übersicht der benötigten Drittprodukte:

Schritt-für-Schritt-Anleitung zur Installation von GitLab

GitLab-Docker-Image herunterladen: Das offizielle GitLab-Image kann vom Docker Hub heruntergeladen werden. Normalerweise verwenden die meisten Benutzer die gitlab/gitlab-ee oder gitlab/gitlab-ce Version, je nachdem, ob sie die kommerzielle oder Community Edition wünschen.

Bash
docker pull gitlab/gitlab-ce:latest

Docker-Container-Setup: Erstelle ein Verzeichnis für GitLab, das die Konfiguration, die Daten und die Logs speichert.

Bash
mkdir -p ~/gitlab/config ~/gitlab/logs ~/gitlab/data

Docker-Compose-Datei erstellen: Erstelle eine docker-compose.yml-Datei in deinem ~/gitlab-Verzeichnis.

YAML
version: '3'

services:
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'gitlab.example.com'  # Ersetze dies durch deinen Hostnamen
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.example.com'  # Pfad zu deinem GitLab-Server
        gitlab_rails['gitlab_shell_ssh_port'] = 22  # Standard-SSH-Port
    ports:
      - '8080:80'
      - '8443:443'
      - '2222:22'
    volumes:
      - './config:/etc/gitlab'
      - './logs:/var/log/gitlab'
      - './data:/var/opt/gitlab'

Container starten: Mit Docker-Compose kannst du den Container starten und GitLab in Betrieb nehmen.

Bash
cd ~/gitlab
sudo docker-compose up -d

Der -d-Schalter startet die Container im Hintergrund.

Warten auf die Initialisierung: GitLab benötigt einige Minuten zum Starten und zur Initialisierung. Du kannst die Logs überprüfen, um sicherzustellen, dass alles korrekt funktioniert.

Bash
sudo docker-compose logs -f

Zugriff auf GitLab: Nachdem der Container läuft, kannst du GitLab über deinen Webbrowser erreichen. Gib die URL ein, die du in der docker-compose.yml-Datei konfiguriert hast (z.B. http://gitlab.example.com:8080).

Erste Anmeldung: Bei der ersten Anmeldung kannst du den Admin-Benutzernamen und das Passwort festlegen. Das Standardpasswort für den Benutzer root wird in den Logs angezeigt. In meiner Installation ist kein password in den Logs, deswegen zeige ich hier, wie ich das root Passwort geändert habe, funktioniert immer, auch wenn es mal vergessen wurde.

Bash
    docker ps
    docker exec -it gitlab_gitlab_1 bash # that is my container name in step 1
    gitlab-rails console -e production # wait, minutes for another prompt to come
    user = User.where(id: 1).first
    user.password = ‘secret_pass’ # use your favorite password
    user.password_confirmation = 'secret_pass' # again
    user.save!  # save user

Eine Test-EMail kann dann ganz einfach über die Rails-Konsole verschickt werden:

Bash
docker exec -it gitlab_gitlab_1 bash # we are within the docker container 

gitlab-rails console -e production # starting the rails console
Ruby
Notify.test_email('destination_email@address.com', 'Message Subject', 'Message Body').deliver_now # executing a notify test email and immediate delivery

eMail setup

Um Mails zu senden, braucht gitlab_rails die Details über den SMTP-Port/-Servers. Hierzu wird der GITLAB_OMNIBUS_CONFIG erweitert, nicht ersetzt, durch:

environment:
   GITLAB_OMNIBUS_CONFIG: |
        gitlab_rails['smtp_enable'] = true 
        gitlab_rails['smtp_address'] = "***"
        gitlab_rails['smtp_port'] = 587    
        gitlab_rails['smtp_user_name'] = "***"
        gitlab_rails['smtp_password'] = "***"
        gitlab_rails['smtp_enable_starttls_auto'] = true
        gitlab_rails['smtp_tls'] = true    
        gitlab_rails['smtp_openssl_verify_mode'] = 'peer'

Die *** müssen selbstverständlich durch die aktuellen Server Details ersetzt werden.

Notwendige Drittprodukte

  1. Docker: Grundlegende Container-Technologie, die für die Ausführung von GitLab im Container erforderlich ist.
  2. Docker-Compose: Eine hilfreiche Software, um mehrere Docker-Container zu verwalten. Damit kann die Konfiguration und Verwaltung von GitLab und seinen Abhängigkeiten erleichtert werden.
  3. PostgreSQL (optional): GitLab verwendet standardmäßig PostgreSQL als Datenbank. Diese ist im offiziellen GitLab-Image bereits integriert, daher ist keine separate Installation erforderlich.
  4. Redis (optional): Redis wird in GitLab für Caching und als Background-Jobs-Queue verwendet und ist ebenfalls im GitLab-Image enthalten.
  5. Nginx (optional): Wenn du GitLab über HTTPS bereitstellen möchtest, wäre es vorteilhaft, einen Nginx-Server für die SSL/TLS-Konfiguration und das Reverse-Proxy-Setup einzusetzen. Dies kann entweder innerhalb von GitLab oder als separater Container erfolgen.

Fazit

Das Einrichten von GitLab in einem Docker-Container unter Linux ist durch Docker und Docker-Compose relativ unkompliziert. Mit minimalen Anforderungen an Drittprodukte kannst du GitLab effizient in Betrieb nehmen, um als Versionskontrollsystem und CI/CD-Plattform zu fungieren. Achte auf die Konfiguration von Domänen und Portnummern, um einen reibungslosen Zugriff auf deine GitLab-Instanz zu gewährleisten.