
Hochsicherheits-Komplettanleitung: Multi-App-Setup unter Debian 13
5. August 2026
Grafana – Monitoring & Visualisierung mit Docker
20. August 2026
GitLab Community Edition – Sichere Installation hinter Nginx Proxy Manager
# 1. Erstelle die persistenten Verzeichnisse auf dem Host (als deinuser)
mkdir -p ~/infra/gitlab/{config,logs,data}
cd ~/infra/gitlab
Erstelle die docker-compose.yml:
cat <<EOF > docker-compose.yml
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab-app
restart: unless-stopped
hostname: gitlab.deinedomain.net
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.deinedomain.net'
# Passt die in der Web-UI angezeigten SSH-Klone-URLs an Port 2222 an
gitlab_rails['gitlab_shell_ssh_port'] = 2222
# Verhindert, dass sich fremde Personen registrieren können
gitlab_rails['gitlab_signup_enabled'] = false
# Datenschutz-Härtung: Keine Profilbilder von externen US-Servern laden
gitlab_rails['gravatar_enabled'] = false
# Interner Nginx lauscht unverschlüsselt, da NPM SSL übernimmt
nginx['listen_port'] = 80
nginx['listen_https'] = false
# Empfohlen für Betrieb hinter Reverse Proxies (SSL Offloading)
nginx['proxy_set_header'] = {
"X-Forwarded-Proto" => "https",
"X-Forwarded-Ssl" => "on"
}
ports:
- "2222:22" # SSH-Port für Git-Clones (Host-Port 2222 -> Container 22)
volumes:
- ./config:/etc/gitlab
- ./logs:/var/log/gitlab
- ./data:/var/opt/gitlab
shm_size: 256m
networks:
- proxy-nw
networks:
proxy-nw:
external: true
EOF
# Stack starten (Achtung: Der erste Start von GitLab kann bis zu 5-10 Minuten dauern!) docker compose up -d
GITLAB_OMNIBUS_CONFIG. Ohne diese Anpassung würde GitLab dort standardmäßig Port 22 anzeigen, was beim git clone zu einem Timeout führen würde, da dein Host-SSH diesen Port blockiert.gitlab_rails['gitlab_shell_ssh_port'] = 2222 in die docker-compose.yml deiner app-gitlab.md ein.docker-compose.yml für GitLab CE🔐 Single Sign-On (SSO) mit Authentik einrichten
cat <<EOF > docker-compose.yml
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab-app
restart: unless-stopped
hostname: gitlab.snorthost.net
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://snorthost.net'
# Passt die in der Web-UI angezeigten SSH-Klone-URLs an Port 2222 an
gitlab_rails['gitlab_shell_ssh_port'] = 2222
# Verhindert, dass sich fremde Personen frei registrieren können
gitlab_rails['gitlab_signup_enabled'] = false
# Datenschutz-Härtung: Keine Profilbilder von externen US-Servern laden
gitlab_rails['gravatar_enabled'] = false
# Interner Nginx lauscht unverschlüsselt, da NPM SSL übernimmt
nginx['listen_port'] = 80
nginx['listen_https'] = false
# Empfohlen für Betrieb hinter Reverse Proxies (SSL Offloading)
nginx['proxy_set_header'] = {
"X-Forwarded-Proto" => "https",
"X-Forwarded-Ssl" => "on"
}
# --- SSO MIT AUTHENTIK (LINUX.OR.AT CONFIG) ---
gitlab_rails['omniauth_enabled'] = true
gitlab_rails['omniauth_allow_single_sign_on'] = ['openid_connect']
gitlab_rails['omniauth_block_auto_created_users'] = false
gitlab_rails['omniauth_auto_link_user'] = ['openid_connect']
gitlab_rails['omniauth_providers'] = [
{
name: "openid_connect",
label: "Authentik Login",
args: {
name: "openid_connect",
scope: ["openid", "profile", "email"],
response_type: "code",
issuer: "https://auth.domainname.at/application/o/git-lab/",
client_auth_method: "query",
discovery: true,
uid_field: "preferred_username",
client_options: {
identifier: "DEINE_AUTHENTIK_CLIENT_ID",
secret: "DEIN_AUTHENTIK_SECRET",
redirect_uri: "https://gitlab.domainname.net/users/auth/openid_connect/callback"
}
}
}
]
ports:
- "2222:22" # SSH-Port für Git-Clones (Host-Port 2222 -> Container 22)
volumes:
- ./config:/etc/gitlab
- ./logs:/var/log/gitlab
- ./data:/var/opt/gitlab
shm_size: 256m
networks:
- proxy-nw
networks:
proxy-nw:
external: true
EOF
# Stack starten (Achtung: Der erste Start von GitLab kann bis zu 5-10 Minuten dauern!) docker compose up -d
Einrichtung in der Authentik Admin-Oberfläche
Damit die Anmeldung über GitLab funktioniert, musst du in deiner Authentik-Instanz einen passenden OAuth2/OpenID-Anbieter erstellen. Gehe dazu wie folgt vor:
- Navigiere im Authentik-Admin-Interface zu Applications ➡️ Provider.
- Klicke auf Create und wähle OAuth2/OpenID Provider.
- Trage folgende Werte ein:
- Name:
GitLab SSO - Authentication flow: Wähle deinen Standard-Anmeldeflow (z. B.
default-authentication-flow). - Authorization flow: Wähle den Standard-Autorisierungsflow (z. B.
default-authorization-flow). - Client Type:
Confidential - Redirect URIs/Origins (RegEx): Trage hier exakt die Callback-URL aus deiner GitLab-Konfiguration ein:
- Name:
https://gitlab.domain.net/users/auth/openid_connect/callback
- Klicke auf Finish.
- Öffne den neu erstellten Provider und kopiere dir die Client ID sowie das Client Secret. Ersetze damit die Platzhalter
DEINE_AUTHENTIK_CLIENT_IDundDEIN_AUTHENTIK_SECRETin deinerdocker-compose.yml. [1]
- Navigiere zu Applications ➡️ Applications.
- Klicke auf Create und vergib einen Namen:
- Name:
GitLab - Slug:
git-lab(Wichtig: Dieser muss exakt mit dem Pfad in deinerissuer-URL übereinstimmen:/application/o/git-lab/).
- Name:
- Wähle im Dropdown-Menü Provider den gerade erstellten
GitLab SSO-Anbieter aus. - Klicke auf Create.
- Erstelle in Authentik unter Directory ➡️ Groups eine neue Gruppe (z. B.
gitlab-users) und füge die erlaubten Mitglieder hinzu. - Navigiere zu Applications ➡️ Applications und klicke auf deine GitLab-Anwendung.
- Wechsle oben auf den Reiter Policy / Group Bindings.
- Klicke auf Bind existing policy und wähle im Dropdown deine Gruppe
gitlab-usersaus. - Klicke auf Create.
gitlab-users: Diese Gruppe enthält alle Benutzer, die sich grundsätzlich im GitLab anmelden und Repositories anlegen dürfen.gitlab-admins: Diese Gruppe ist für dich und weitere Administratoren gedacht.
- Gehe zu Applications ➡️ Applications und klicke auf deine GitLab-Anwendung.
- Wechsle oben auf den Reiter Policy / Group Bindings.
- Schau oben rechts nach der Option Execution Authorization Mode und stelle diesen zwingend auf
ANY(Mindestens eine Richtlinie muss zutreffen). - Klicke auf Bind existing policy und füge die Gruppe
gitlab-usershinzu. - Klicke erneut auf Bind existing policy und füge die Gruppe
gitlab-adminshinzu.
ANY erlaubt Authentik nun jedem Benutzer den Login, der in mindestens einer der beiden Gruppen Mitglied ist.docker-compose.yml haben wir zwar die Übergabe der Admin-Gruppe hinterlegt (admin_groups: ["gitlab-admins"]), allerdings gibt es hier eine Besonderheit bei der GitLab Community Edition (CE):⚠️ GitLab CE Einschränkung: Die automatische Auswertung und Zuweisung von Administrator-Rechten über OIDC-Gruppen ist ein exklusives Feature der kommerziellen Enterprise Edition (EE). In der kostenlosen Community Edition (CE) ignoriert GitLab diese Anweisung beim Login und legt den Authentik-Admin initial als Standard-Benutzer an.
- Melde dich einmalig über Authentik mit deinem Admin-Konto im GitLab an, damit das Benutzerprofil in der GitLab-Datenbank erzeugt wird.
- Logge dich wieder aus und melde dich stattdessen mit deinem initialen, lokalen GitLab-Admin-Konto (root) an, das du bei der Erstinstallation erstellt hast.
- Navigiere im GitLab-Admin-Bereich (Schraubenschlüssel-Symbol) zu Overview ➡️ Users.
- Klicke auf deinen über Authentik erstellten Benutzer, wähle Edit und setze den Haken bei Administrator. Speichere die Änderung.
- Registrierung fremder User deaktivieren: Verhindert, dass sich unbefugte Dritte über das Webinterface einfach einen Account auf deinem Server klicken können.
- Gravatar deaktivieren (Datenschutz): Unterbindet, dass GitLab bei jedem Profilaufruf ungefragt MD5-Hashes der E-Mail-Adressen an externe Server (Automattic/Gravatar) übermittelt.
GITLAB_OMNIBUS_CONFIG-Feld deiner docker-compose.yml ein: # Verhindert, dass sich fremde Personen registrieren können
gitlab_rails['gitlab_signup_enabled'] = false
# Datenschutz-Härtung: Keine Profilbilder von externen US-Servern laden
gitlab_rails['gravatar_enabled'] = false
Damit der Nginx Proxy Manager (NPM) die Anfragen von https://gitlab.domain.net korrekt an deinen neuen GitLab-Container weiterleitet, musst du im Web-Interface von NPM einen neuen Proxy Host mit folgenden Werten anlegen:
1. Tab: Details
Domain Names: gitlab.domain.net
Scheme: http (Wichtig: Hier bleibt http, da der interne GitLab-Nginx laut deiner Konfiguration unverschlüsselt auf Port 80 lauscht).
Forward Hostname / IP: gitlab-app (Dank des gemeinsamen Netzwerks proxy-nw kann NPM diesen Containernamen direkt auflösen).
Forward Port: 80
Cache Assets: Deaktiviert lassen.
Block Common Exploits: Aktivieren (Empfohlen für die Sicherheit).
Websockets Support: Aktivieren (Wichtig für Echtzeit-Updates in der GitLab-Oberfläche).
2. Tab: SSL
SSL Certificate: Wähle dein Zertifikat aus (oder erstelle ein neues via Request a new SSL Certificate).
Force SSL: Aktivieren (Leitet alle HTTP-Anfragen automatisch auf HTTPS um).
HTTP/2 Support: Aktivieren (Sorgt für eine schnellere Ladezeit).
HSTS Enabled: Aktivieren (Erhöht die Sicherheit, zwingt Browser zu HTTPS).
