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
- Groups → New group (z. B. Firmenname)
- Projects → New project → Create blank project
- Sichtbarkeit: Private
- 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.