Linuxguide

GitLab CE selbst hosten mit Docker – vollständige Anleitung 2025

Eigener Git-Server mit CI/CD, Issues und Container Registry

S
SeeColors IT
11. Juni 20264 Min. Lesezeit171 Aufrufe

Warum GitLab selbst hosten?

GitLab CE (Community Edition) ist die Open-Source-Version von GitLab. Sie bietet gegenüber GitHub für Self-hosters entscheidende Vorteile:

  • Vollständige Datenkontrolle: Code verlässt nie Ihr Netzwerk
  • CI/CD gratis: Beliebig viele Pipelines ohne Minuten-Limits
  • Container Registry: Docker Images direkt im GitLab-Projekt speichern
  • Issue Tracker & Milestones: Projektmanagement integriert
  • Merge Request Workflows: Code-Reviews mit internen Teams
  • DSGVO-konform: Alle Daten auf eigenen Servern

Voraussetzungen

  • Ubuntu 22.04 oder 24.04 LTS
  • Mindestens 4 GB RAM (empfohlen: 8 GB), 4 vCPU, 50 GB SSD
  • Docker und Docker Compose
  • Domain mit SSL-Zertifikat (Let's Encrypt)
  • Port 22 (SSH), 80 (HTTP), 443 (HTTPS) erreichbar

Installation mit Docker Compose

Verzeichnis und Konfiguration:

mkdir -p /opt/gitlab/{config,logs,data}

/opt/gitlab/docker-compose.yml:

version: '3'
services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    restart: always
    hostname: git.ihredomain.de
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://git.ihredomain.de'
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
        # Let's Encrypt aktivieren
        letsencrypt['enable'] = true
        letsencrypt['contact_emails'] = ['[email protected]']
        # E-Mail konfigurieren
        gitlab_rails['smtp_enable'] = true
        gitlab_rails['smtp_address'] = 'smtp.ihredomain.de'
        gitlab_rails['smtp_port'] = 587
        gitlab_rails['smtp_user_name'] = '[email protected]'
        gitlab_rails['smtp_password'] = 'IhrSMTPPasswort'
        gitlab_rails['smtp_domain'] = 'ihredomain.de'
        gitlab_rails['smtp_authentication'] = 'login'
        gitlab_rails['smtp_enable_starttls_auto'] = true
        gitlab_rails['gitlab_email_from'] = '[email protected]'
        # Performance-Tuning für KMU-Server
        unicorn['worker_processes'] = 2
        postgresql['shared_buffers'] = '256MB'
        sidekiq['max_concurrency'] = 10
    ports:
      - '80:80'
      - '443:443'
      - '2222:22'
    volumes:
      - /opt/gitlab/config:/etc/gitlab
      - /opt/gitlab/logs:/var/log/gitlab
      - /opt/gitlab/data:/var/opt/gitlab
    shm_size: '256m'

Starten:

cd /opt/gitlab
docker compose up -d

Erster Start dauert 3–5 Minuten. GitLab initialisiert Datenbank, Zertifikate und Konfiguration.

Root-Passwort ermitteln

docker exec -it gitlab-gitlab-1 grep 'Password:' /etc/gitlab/initial_root_password

Login unter https://git.ihredomain.de mit Benutzer root.

Grundkonfiguration

Admin-Area

Admin → Settings → General:

  • Account and limit: Sign-up deaktivieren (nur eingeladene Benutzer)
  • Visibility and access controls: Standardsichtbarkeit auf „Private"
  • Third party offers: Alle deaktivieren

Erste Gruppe und Projekt

  1. Groups → New group (z. B. Firmenname)
  2. Projects → New project → Create blank project
  3. Sichtbarkeit: Private
  4. Repository initialisieren

SSH-Key hinzufügen

# Lokaler Schlüssel (falls nicht vorhanden)
ssh-keygen -t ed25519 -C "[email protected]"
cat ~/.ssh/id_ed25519.pub

In GitLab: User Settings → SSH Keys → Add key

Test:

ssh -T [email protected] -p 2222
# Welcome to GitLab, @username!

GitLab CI/CD einrichten

GitLab CI/CD wird durch eine .gitlab-ci.yml-Datei im Repository-Root gesteuert:

stages:
  - build
  - test
  - deploy

variables:
  DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA

build:
  stage: build
  image: docker:24
  services:
    - docker:24-dind
  before_script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  script:
    - docker build -t $DOCKER_IMAGE .
    - docker push $DOCKER_IMAGE

test:
  stage: test
  image: node:20-alpine
  script:
    - npm ci
    - npm test

deploy-production:
  stage: deploy
  only:
    - main
  environment:
    name: production
    url: https://app.ihredomain.de
  script:
    - ssh deploy@$PROD_SERVER "
        docker pull $DOCKER_IMAGE &&
        docker compose -f /opt/app/docker-compose.yml up -d"

GitLab Runner installieren

CI/CD-Jobs laufen auf einem GitLab Runner. Auf demselben oder einem separaten Server:

# GitLab Runner installieren
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo apt install gitlab-runner -y

# Runner registrieren
sudo gitlab-runner register   --url https://git.ihredomain.de   --registration-token <TOKEN_AUS_GITLAB>   --executor docker   --docker-image alpine:latest   --description "Docker Runner"

Token unter: Admin → CI/CD → Runners → Register an instance runner

GitLab Container Registry

GitLab enthält eine integrierte Docker Container Registry:

# Login
docker login git.ihredomain.de:5050 -u <USERNAME> -p <ACCESS_TOKEN>

# Image taggen und pushen
docker tag meine-app git.ihredomain.de:5050/firma/mein-projekt/meine-app:latest
docker push git.ihredomain.de:5050/firma/mein-projekt/meine-app:latest

In CI/CD-Pipelines stehen automatisch $CI_REGISTRY, $CI_REGISTRY_USER und $CI_REGISTRY_PASSWORD als Variablen zur Verfügung.

Backup einrichten

# Manuelles Backup
docker exec -t gitlab-gitlab-1 gitlab-backup create

# Backup liegt unter:
ls /opt/gitlab/data/backups/

# Automatisches tägliches Backup (crontab)
0 2 * * * docker exec -t gitlab-gitlab-1 gitlab-backup create CRON=1

GitLab aktualisieren

cd /opt/gitlab
docker compose pull
docker compose up -d

GitLab führt automatische Datenbankmigrationen durch. Bei Major-Version-Updates (z. B. 16.x → 17.x) empfiehlt sich ein vorheriges Backup.

FAQ

Wie viele Benutzer kann GitLab CE verwalten?
GitLab CE hat kein Benutzerlimit. Auf einem 8-GB-RAM-Server laufen problemlos 50–100 aktive Entwickler.

Was ist der Unterschied zu Gitea/Forgejo?
Gitea/Forgejo ist leichtgewichtiger (512 MB RAM) aber bietet weniger Features. GitLab CE ist umfassender (vollständige CI/CD, Security Scanning) aber ressourcenintensiver.

Kann GitLab CE mit LDAP/Active Directory verbunden werden?
Ja. LDAP-Konfiguration in gitlab.rb:

gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load(...)

Fazit

GitLab CE ist die kompletteste Self-hosted-DevOps-Plattform. Für Teams die Code, CI/CD und Container Registry auf eigenen Servern betreiben wollen ist es die beste Wahl.

Wir helfen Entwicklungsteams in Heidelberg und Mannheim beim Aufbau ihrer eigenen GitLab-Infrastruktur. DevOps-Beratung anfragen.

Artikel teilen

War dieser Artikel hilfreich?

Dein Feedback hilft uns, bessere Inhalte zu erstellen.

Kommentar hinterlassen

Verwandte Artikel