GitLab ist eine vollständige DevOps-Plattform mit Git-Repository, CI/CD-Pipelines und Projektmanagement. Mit GitLab CE (Community Edition) hosten Sie Ihre Projekte auf dem eigenen Server.

Systemanforderungen

Mindestanforderungen

- 4 CPU-Kerne
- 4 GB RAM (8 GB empfohlen)
- 10 GB Speicher (ohne Repositories)
- Ubuntu 20.04/22.04 oder Debian 11/12

Empfohlen für Teams

- 8 CPU-Kerne
- 16 GB RAM
- SSD-Speicher
- PostgreSQL auf separatem Server

Installation (Ubuntu/Debian)

Abhängigkeiten installieren

apt update
apt install -y curl openssh-server ca-certificates tzdata perl

Postfix für E-Mail (optional)

apt install -y postfix
# Wählen Sie: Internet Site

GitLab Repository hinzufügen

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

GitLab CE installieren

# Mit Ihrer Domain
EXTERNAL_URL="https://gitlab.example.com" apt install gitlab-ce

# Oder ohne SSL (später einrichten)
EXTERNAL_URL="http://gitlab.example.com" apt install gitlab-ce

Initiales Passwort

# Root-Passwort anzeigen (24 Stunden gültig)
cat /etc/gitlab/initial_root_password

Erster Login

1. Browser öffnen: https://gitlab.example.com 2. Benutzer: root 3. Passwort: aus initial_root_password

Konfiguration

gitlab.rb bearbeiten

nano /etc/gitlab/gitlab.rb

Externe URL

# /etc/gitlab/gitlab.rb

external_url 'https://gitlab.example.com'

Let's Encrypt SSL

# Automatisches SSL-Zertifikat
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['admin@example.com']
letsencrypt['auto_renew'] = true

E-Mail-Einstellungen

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.example.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "gitlab@example.com"
gitlab_rails['smtp_password'] = "passwort"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true

gitlab_rails['gitlab_email_from'] = 'gitlab@example.com'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.com'

Konfiguration anwenden

gitlab-ctl reconfigure

Benutzer und Gruppen

Admin-Bereich

1. Menu → Admin 2. Overview → Users/Groups

Benutzer erstellen

Admin → Users → New User
- Name, Username, Email
- Passwort setzen oder E-Mail senden
- Access Level: Regular oder Admin

Gruppen erstellen

Admin → Groups → New Group
- Name und URL
- Sichtbarkeit: Private/Internal/Public
- Mitglieder hinzufügen

Projekte verwalten

Neues Projekt

Menu → Projects → New Project
- Blank project / Import / Template
- Sichtbarkeit wählen
- README initialisieren

Repository klonen

# HTTPS
git clone https://gitlab.example.com/gruppe/projekt.git

# SSH
git clone git@gitlab.example.com:gruppe/projekt.git

SSH-Key hinzufügen

1. User Settings → SSH Keys 2. Public Key einfügen 3. Titel und Ablaufdatum setzen

GitLab Runner (CI/CD)

Runner installieren

# Repository hinzufügen
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash

# Installieren
apt install gitlab-runner

Runner registrieren

gitlab-runner register
Enter GitLab instance URL: https://gitlab.example.com
Enter registration token: (aus Admin → Runners)
Enter description: my-runner
Enter tags: docker,linux
Enter executor: docker
Enter default Docker image: alpine:latest

Einfache .gitlab-ci.yml

# .gitlab-ci.yml

stages:
  - build
  - test
  - deploy

build:
  stage: build
  script:
    - echo "Building..."
    - npm install

test:
  stage: test
  script:
    - echo "Testing..."
    - npm test

deploy:
  stage: deploy
  script:
    - echo "Deploying..."
  only:
    - main

Backup

Backup erstellen

gitlab-backup create

Backup-Dateien: /var/opt/gitlab/backups/

Automatisches Backup

# Crontab
0 2 * * * gitlab-backup create CRON=1

Konfiguration sichern

# Separat sichern!
tar -czf gitlab-config-$(date +%Y%m%d).tar.gz /etc/gitlab

Backup wiederherstellen

# GitLab stoppen (außer Datenbank)
gitlab-ctl stop puma
gitlab-ctl stop sidekiq

# Backup wiederherstellen
gitlab-backup restore BACKUP=11493107454_2024_12_26_16.0.0

# Starten
gitlab-ctl start
gitlab-ctl reconfigure

Performance-Tuning

Unicorn/Puma Workers

# /etc/gitlab/gitlab.rb

# Puma (GitLab 14+)
puma['worker_processes'] = 4

# Sidekiq
sidekiq['concurrency'] = 25

PostgreSQL

postgresql['shared_buffers'] = "256MB"
postgresql['max_connections'] = 200

Redis

redis['maxmemory'] = "256mb"
redis['maxmemory_policy'] = "allkeys-lru"

Speicher begrenzen

# Weniger RAM-Verbrauch
puma['worker_processes'] = 2
sidekiq['concurrency'] = 10
prometheus_monitoring['enable'] = false

Sicherheit

Registrierung einschränken

# /etc/gitlab/gitlab.rb

gitlab_rails['gitlab_signup_enabled'] = false

Zwei-Faktor-Authentifizierung

Admin → Settings → General → Sign-in restrictions
→ Two-factor authentication: Enforce for all users

Passwort-Richtlinien

Admin → Settings → General → Sign-in restrictions
→ Minimum password length: 12
→ Password complexity requirements

IP-Whitelist für Admin

gitlab_rails['rack_attack_git_basic_auth'] = {
  'enabled' => true,
  'ip_whitelist' => ["127.0.0.1", "192.168.1.0/24"],
  'maxretry' => 10,
  'findtime' => 60,
  'bantime' => 3600
}

GitLab Verwaltung

Dienste verwalten

# Status
gitlab-ctl status

# Neustart
gitlab-ctl restart

# Einzelne Dienste
gitlab-ctl restart nginx
gitlab-ctl restart puma

# Logs
gitlab-ctl tail
gitlab-ctl tail nginx

Update

apt update
apt upgrade gitlab-ce

Speicherplatz prüfen

# Repository-Größe
du -sh /var/opt/gitlab/git-data/repositories

# Artefakte
du -sh /var/opt/gitlab/gitlab-rails/shared/artifacts

# Alte Artefakte löschen (Admin → Settings → CI/CD)

Container Registry

Aktivieren

# /etc/gitlab/gitlab.rb

registry_external_url 'https://registry.example.com'
gitlab_rails['registry_enabled'] = true
gitlab-ctl reconfigure

Docker-Image pushen

docker login registry.example.com
docker tag myimage registry.example.com/gruppe/projekt/image:tag
docker push registry.example.com/gruppe/projekt/image:tag

GitLab Pages

Aktivieren

# /etc/gitlab/gitlab.rb

pages_external_url "https://pages.example.com"
gitlab_pages['enable'] = true

.gitlab-ci.yml für Pages

pages:
  stage: deploy
  script:
    - mkdir .public
    - cp -r public/* .public
    - mv .public public
  artifacts:
    paths:
      - public
  only:
    - main

Troubleshooting

Logs prüfen

# Alle Logs
gitlab-ctl tail

# Spezifische Logs
gitlab-ctl tail gitlab-rails
gitlab-ctl tail nginx
gitlab-ctl tail postgresql

502 Bad Gateway

# Puma-Status prüfen
gitlab-ctl status puma

# Speicher prüfen
free -h

# Neustart
gitlab-ctl restart puma

Rails Console

gitlab-rails console
# Benutzer-Passwort zurücksetzen
user = User.find_by(username: 'root')
user.password = 'neuespasswort'
user.password_confirmation = 'neuespasswort'
user.save!

Zusammenfassung

| Aufgabe | Befehl | |---------|--------| | Konfiguration | /etc/gitlab/gitlab.rb | | Anwenden | gitlab-ctl reconfigure | | Neustart | gitlab-ctl restart | | Status | gitlab-ctl status | | Logs | gitlab-ctl tail | | Backup | gitlab-backup create | | Update | apt upgrade gitlab-ce |

Fazit

GitLab CE bietet eine vollständige DevOps-Plattform zum Selbsthosten. Die Installation ist unkompliziert, aber planen Sie ausreichend Ressourcen ein. Für kleine Teams reichen 4 GB RAM, für größere Installationen sollten es 16+ GB sein. Automatisieren Sie Backups und halten Sie GitLab aktuell für Sicherheitsupdates.