GitLab ist eine umfassende Plattform für Versionskontrolle, CI/CD und DevOps. Mit Docker Compose lässt sich GitLab einfach selbst hosten, inklusive persistenter Daten, konfigurierter Ports, SSL und Backup-Möglichkeiten. Dieses Tutorial zeigt Schritt für Schritt, wie ein stabiler GitLab-Stack mit Docker Compose aufgesetzt wird.
Grundkomponenten eines GitLab-Stacks
Ein typischer GitLab-Stack besteht aus mehreren Diensten:
- GitLab-Container: Enthält die Anwendung und Webinterface (Omnibus GitLab)
- Datenbanken: PostgreSQL und Redis für persistente Speicherung und Caching
- Volumes: Persistente Speicherung von Repositories, Konfigurationen und Logs
- Netzwerke: Isolierte Kommunikation zwischen den Diensten
Volumes für Persistenz
Persistente Daten gewährleisten, dass Repositories, Konfigurationen und Logs bei Neustarts nicht verloren gehen.
volumes:
gitlab_config:
gitlab_logs:
gitlab_data:
redis_data:
postgres_data:
gitlab_configfür GitLab-Konfigurationgitlab_logsfür Logsgitlab_datafür Repositories und Datenredis_datafür Redispostgres_datafür PostgreSQL
Netzwerke für interne Kommunikation
Separate Netzwerke erhöhen die Sicherheit und gewährleisten die Erreichbarkeit der Dienste untereinander.
networks:
gitlab_frontend:
gitlab_backend:
gitlab_frontendfür Zugriff von außen (HTTP/HTTPS)gitlab_backendfür interne Kommunikation zwischen GitLab, Redis und PostgreSQL
Beispiel: docker-compose.yml für GitLab
version: '3.8'
services:
gitlab:
image: gitlab/gitlab-ee:16.1.0-ee.0
hostname: gitlab.example.com
restart: always
ports:
- "80:80"
- "443:443"
- "22:22"
volumes:
- gitlab_config:/etc/gitlab
- gitlab_logs:/var/log/gitlab
- gitlab_data:/var/opt/gitlab
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.example.com'
gitlab_rails['gitlab_shell_ssh_port'] = 22
networks:
- gitlab_frontend
- gitlab_backend
depends_on:
- postgres
- redis
postgres:
image: postgres:16
restart: always
environment:
POSTGRES_USER: gitlab
POSTGRES_PASSWORD_FILE: /run/secrets/postgres_password
POSTGRES_DB: gitlabhq_production
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- gitlab_backend
secrets:
- postgres_password
redis:
image: redis:7
restart: always
volumes:
- redis_data:/data
networks:
- gitlab_backend
secrets:
postgres_password:
file: ./postgres_password.txt
volumes:
gitlab_config:
gitlab_logs:
gitlab_data:
redis_data:
postgres_data:
networks:
gitlab_frontend:
gitlab_backend:
Erklärungen zur Compose-Datei
- GitLab: Omnibus GitLab Container, Ports 80, 443 und 22 gemappt, nutzt persistent gespeicherte Konfiguration, Logs und Daten
- PostgreSQL: Datenbank für GitLab, Passwort über Secret, persistente Speicherung im Volume
- Redis: Caching-Server für GitLab, Volume für Persistenz
- Secrets: Sensible Passwörter werden nicht im Klartext gespeichert
- Netzwerke: Frontend-Netzwerk für externe Zugriffe, Backend-Netzwerk für interne Kommunikation
- depends_on: GitLab startet erst, wenn Datenbank und Redis erreichbar sind
Start und Verwaltung des GitLab-Stacks
Den Stack starten Sie mit:
docker-compose up -d
Zum Stoppen und Entfernen aller Container, Netzwerke und Volumes:
docker-compose down -v
Best Practices
- Volumes für persistente Daten nutzen
- Secrets für sensible Daten wie Datenbankpasswort einsetzen
- Netzwerke für interne und externe Kommunikation trennen
- SSL über Reverse Proxy oder direkt im GitLab-Container konfigurieren
- CI/CD-Pipelines für automatisierte Builds und Deployments einrichten
- Regelmäßige Backups der Volumes erstellen
- Versionierte Docker Images für einfache Rollbacks
- Monitoring und Logging aktivieren, um Systemzustand und Sicherheit zu überwachen
Praxisbeispiele
GitLab starten
docker-compose up -d
Logs überwachen
docker-compose logs -f gitlab
docker-compose logs -f postgres
docker-compose logs -f redis
Rollback auf vorherige GitLab-Version
docker service update --image gitlab/gitlab-ee:16.0.0-ee.0 gitlab_service
Updatefähigkeit
Durch die Nutzung von versionierten Docker Images kann GitLab unkompliziert aktualisiert werden, während Volumes und Secrets unverändert bleiben. Dies ermöglicht schnelle Updates ohne Datenverlust.
docker-compose pull
docker-compose up -d
Zusammenfassung
Ein GitLab-Stack mit Docker Compose ermöglicht Self-Hosting mit Sicherheit, Persistenz und Updatefähigkeit. Durch den Einsatz von Volumes, Secrets, getrennten Netzwerken und Best Practices wie Backups und Monitoring wird der Betrieb stabil, wartbar und skalierbar. CI/CD-Integration und versionierte Images erleichtern zukünftige Updates und Rollbacks.
Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3
Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.
Meine Leistungen umfassen:
-
Professionelle Konfiguration von Routern und Switches
-
Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen
-
Erstellung von Topologien und Simulationen in Cisco Packet Tracer
-
Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG
-
Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible
-
Erstellung von Skripten für wiederkehrende Netzwerkaufgaben
-
Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege
-
Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting
Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.










