Hi,
da ich selbst immer auf der Suche nach einer Anleitung für Gitlab im Docker Container war, dachte ich mir nun, dass ich mal meine Erkenntnisse hier zusammentragen kann. Diese Anleitung kann und wird bestimmt auch Fehler beinhalten, aber im Großen und Ganzen sollte sie jedoch mit der aktuellen Version von Gitlab (13.2.0) funktionieren.
Was soll erreicht werden?
Ziel ist es, dass Gitlab samt Redis, Postgresql und Runner in einem „docker-compose.yml“ zusammen konfiguriert und gestartet werden. Ihr könnt natürlich die einzelnen Produkte in separate Container auslagern, aber was zusammengehört, kann meiner Ansicht nach auch zusammenbleiben.
ACHTUNG: In dieser Anleitung ist aktuell noch der Postgresql-Container von „Sameersbn“ in aufgeführt, da ich ursprünglich auch dessen Gitlab Container benutzt habe. Da aber die beiden Entwickler kaum noch Zeit haben und somit deren Version hinterherhängt, habe ich erst am Wochenende auf das offizielle Image von Gitlab-CE umgestellt, aber den PostgreSql – Container noch so belassen. Zu gegebener Zeit werde ich diesen auch auf das offizielle Image umstellen (das schafft ihr aber auch ohne meine Hilfe oder ich reiche das noch nach)
MACVLAN:
Nur ein kurzer Hinweis zu MacVlan, denn eigentlich gibt es hier im Forum reichlich Infos zu diesem Thema. Ich benutze dieses Modul um auf der Netzwerkschnittelle meines NAS mehrere virtuelle Netzwerkschnittstellen einzurichten, so dass ich die eigentlich blockierten Ports „80“ und „443“ in meinen Containern verwenden kann. Es nervt mich immer gewaltig, wenn ich die Ports „umbiege“ und dann in der Url sowas wie „https://meine.domain.de:8080“ verwenden muss. Mit den virtuellen Schnittstellen bekommt euer Container nach außen eine eigene IP aus eurem Netzwerk, bzw. könnt ihr ihm eine entsprechende zuweisen. Ihr solltet aber aufpassen, dass ihr euren DHCP-Server entsprechend einrichtet und das Subnetz des MacVlans im DHCP „ausklammert“, nicht dass es ggf. zu einem IP-Adresskonflikt kommt.
Los geht es!!!
Zuerst müsst ihr euch via Putty oder terminal (Mac) mit eurem NAS verbinden. Hierzu muss aber der SSH – Zugang aktiviert sein. Wie das geht, entnehmt ihr bitte der Anleitung von Synology.
Ich verbinde mich nun also mit diesem Befehl mit meinem NAS:
Nun wechsle ich noch den Benutzer, da ich schreibfaul bin:
Einrichtung der Ordnerstruktur
Dieser Punkt ist relativ schnell abgehandelt. Ich persönlich habe mir in dem üblicherweise verwendeten Ordner „Docker“ auf meinem NAS (dieser Ordner ist Standard in jeder Anleitung ) einen Unterordner „personal“ angelegt, da ich nicht weiß, ob ich mal „System-Images“ oder was auch immer in dem Ordner „Docker“ hostet, so dass ich meine „eigenen“ Images von anderen unterscheiden kann.
In dem Ordner „personal“ werden nun folgende Verzeichnisse erstellt:
Achtung: falls es später zu Problemen bei dem Start des Containers „Gitlab“ kommen sollte, dann müsst ihr hier den Owner umstellen (bei mir war es die UID 998 <- der „git“ Benutzer innerhalb meines Containers). Aber das erst dann, wenn ihr Probleme beim Start oder zur Laufzeit bekommt!!!
Das war es dann auch schon mit der Vorbereitung des Dateisystems und jetzt kommt der eigentlich spannende Teil.
Docker-Compose.yml
ACHTUNG: Beim Bearbeiten der "docker-compose.yml" immer darauf achten, dass ihr NIEMALS Tabulator-Zeichen einbringt, sondern immer nur Leerzeichen!
Container starten und prüfen
Nun ist es endlich soweit und wir können das erste Mal unseren Container (bzw. die Container) starten. Hierzu gebt ihr in Putty oder im Terminal folgenden Befehl ein:
Das -d am Ende des Befehls bewirkt, dass der Container als Dienst gestartet wird und ihr nicht in der Ausführung "gefangen" bleibt.
Nun warten wir bis alles fertig heruntergeladen und gestartet ist.
Wenn alles geklappt hat, dann präsentiert sich die Docker App in DSM wie folgt:
Nicht wundern: Der MySql - Container gehört nicht zu diesem Beispiel, der läuft aber halt bei mir, da dagegen die Runner ihre Unit-Tests schieben.
Wenn wir soweit sind, dann ist schon mal viel geschafft! Nun prüfen wir aber noch die Gitlab-Instanz, so dass auch wirklich alles passt.
Hierzu loggen wir uns in den Container ein:
Nun prüfen wir mit folgenden Befehl die Instanz und veranlassen ggf. Korrekturen mit "SANITIZE=True":
Folgendes Ergebnis sollte auch bei euch herauskommen (seid geduldig, selbst bei meiner Rs1619xs+ braucht der Befehl kurz, bis er die ersten Meldungen bringt).
Berechtigungsprobleme / Permission denied
Falls es wider Erwarten zu Problemen bei den Berechtigungen kommt (ggf. als Meldung beim Einchecken von Änderungen in Repositories oder schon grundsätzlich beim Start des Gitlab-Containers -> siehe Logs im Ordner "Logs"), dann loggt euch wieder in den Container ein und gebt folgenden Befehl ein:
Damit sollte Gitlab automatisch alle Berechtigungen wieder so setzen, wie es sein soll. Falls es dann immer noch nicht klappt, könnt ihr versuchen einzeln alle Berechtigungen mittels "chmod" oder "chown" zu setzen. Bei mit hat der git user die id "998", das sollte eigentlich auch bei euch so sein (also im Container ).
Reverse Proxy in NAS (HTTPS Zugriff einrichten)
Falls ihr eure Gitlab-Instanz über eine Url erreichen wollt, dann müsst ihr in den Einstellungen des DSM noch eine Umleitung von der Url auf eure IP des Containers einrichten.
Hierzu wechselt ihr in die Systemsteuerung und dort unter den Punkt Anwendungsportal:
In der Registerkarte Reverse Proxy erstellt ihr nun einen neuen Eintrag:
Wenn ihr nun noch euren Router so konfiguriert, dass er den Port "80" und "443" an eurer NAS schickt, dann habt ihr auch von "außen" Zugriff auf eure Gitlab - Instanz (ein entsprechendes https - Zertifikat gibt es von Let's Encrypt kostenlos -> hierzu gibt es tausende Beiträge und Videos im Netz, wie man das unter DSM einrichtet).
Ich hoffe die Anleitung war verständlich und enthielt nicht zu viel "bla bla".
Gruß Christian
da ich selbst immer auf der Suche nach einer Anleitung für Gitlab im Docker Container war, dachte ich mir nun, dass ich mal meine Erkenntnisse hier zusammentragen kann. Diese Anleitung kann und wird bestimmt auch Fehler beinhalten, aber im Großen und Ganzen sollte sie jedoch mit der aktuellen Version von Gitlab (13.2.0) funktionieren.
Was soll erreicht werden?
Ziel ist es, dass Gitlab samt Redis, Postgresql und Runner in einem „docker-compose.yml“ zusammen konfiguriert und gestartet werden. Ihr könnt natürlich die einzelnen Produkte in separate Container auslagern, aber was zusammengehört, kann meiner Ansicht nach auch zusammenbleiben.
ACHTUNG: In dieser Anleitung ist aktuell noch der Postgresql-Container von „Sameersbn“ in aufgeführt, da ich ursprünglich auch dessen Gitlab Container benutzt habe. Da aber die beiden Entwickler kaum noch Zeit haben und somit deren Version hinterherhängt, habe ich erst am Wochenende auf das offizielle Image von Gitlab-CE umgestellt, aber den PostgreSql – Container noch so belassen. Zu gegebener Zeit werde ich diesen auch auf das offizielle Image umstellen (das schafft ihr aber auch ohne meine Hilfe oder ich reiche das noch nach)
MACVLAN:
Nur ein kurzer Hinweis zu MacVlan, denn eigentlich gibt es hier im Forum reichlich Infos zu diesem Thema. Ich benutze dieses Modul um auf der Netzwerkschnittelle meines NAS mehrere virtuelle Netzwerkschnittstellen einzurichten, so dass ich die eigentlich blockierten Ports „80“ und „443“ in meinen Containern verwenden kann. Es nervt mich immer gewaltig, wenn ich die Ports „umbiege“ und dann in der Url sowas wie „https://meine.domain.de:8080“ verwenden muss. Mit den virtuellen Schnittstellen bekommt euer Container nach außen eine eigene IP aus eurem Netzwerk, bzw. könnt ihr ihm eine entsprechende zuweisen. Ihr solltet aber aufpassen, dass ihr euren DHCP-Server entsprechend einrichtet und das Subnetz des MacVlans im DHCP „ausklammert“, nicht dass es ggf. zu einem IP-Adresskonflikt kommt.
Los geht es!!!
Zuerst müsst ihr euch via Putty oder terminal (Mac) mit eurem NAS verbinden. Hierzu muss aber der SSH – Zugang aktiviert sein. Wie das geht, entnehmt ihr bitte der Anleitung von Synology.
Ich verbinde mich nun also mit diesem Befehl mit meinem NAS:
ssh -p 4711 derSlurp@10.0.0.185
Nun wechsle ich noch den Benutzer, da ich schreibfaul bin:
sudo -i
Einrichtung der Ordnerstruktur
Dieser Punkt ist relativ schnell abgehandelt. Ich persönlich habe mir in dem üblicherweise verwendeten Ordner „Docker“ auf meinem NAS (dieser Ordner ist Standard in jeder Anleitung ) einen Unterordner „personal“ angelegt, da ich nicht weiß, ob ich mal „System-Images“ oder was auch immer in dem Ordner „Docker“ hostet, so dass ich meine „eigenen“ Images von anderen unterscheiden kann.
In dem Ordner „personal“ werden nun folgende Verzeichnisse erstellt:
Code:
-- gitlab
- gitlab
+ config
+ data
+ logs
- postgresql
- gitlab-runner
- redis
Achtung: falls es später zu Problemen bei dem Start des Containers „Gitlab“ kommen sollte, dann müsst ihr hier den Owner umstellen (bei mir war es die UID 998 <- der „git“ Benutzer innerhalb meines Containers). Aber das erst dann, wenn ihr Probleme beim Start oder zur Laufzeit bekommt!!!
Das war es dann auch schon mit der Vorbereitung des Dateisystems und jetzt kommt der eigentlich spannende Teil.
Docker-Compose.yml
YAML:
version: '2.4'
services:
redis:
restart: always
image: redis:latest
mac_address: 'd0:ca:ab:ff:ef:01'
networks:
vlan:
ipv4_address: '10.0.0.201'
command:
- --loglevel warning
volumes:
- /volume1/docker/personal/gitlab/redis:/var/lib/redis
postgresql:
restart: always
image: sameersbn/postgresql:12-20200524
container_name: gitlab-postgresql
mac_address: 'd0:ca:ab:dd:ef:02'
networks:
vlan:
ipv4_address: '10.0.0.202'
volumes:
- /volume1/docker/personal/gitlab/postgresql:/var/lib/postgresql
environment:
- DB_USER=User
- DB_PASS='Password-muss-auch-bei-gitlab-gesetzt-werden'
- DB_NAME=gitlabhq_production
- DB_EXTENSION=pg_trgm
gitlab:
restart: always
image: gitlab/gitlab-ce:latest
container_name: gitlab
mac_address: 'd0:ca:ab:cd:ef:03'
networks:
vlan:
ipv4_address: '10.0.0.200'
depends_on:
- redis
- postgresql
ports:
- "80:80"
- "22:22"
- "443:443"
volumes:
- /volume1/docker/personal/gitlab/gitlab/config:/etc/gitlab
- /volume1/docker/personal/gitlab/gitlab/logs:/var/log/gitlab
- /volume1/docker/personal/gitlab/gitlab/data:/var/opt/gitlab
healthcheck:
test: ["CMD", "/usr/local/sbin/healthcheck"]
interval: 5m
timeout: 10s
retries: 3
start_period: 5m
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://your.domain.de'
gitlab_rails['time_zone'] = 'Europe/Berlin'
gitlab_rails['db_key_base'] = '65-Zeichen-langer-String'
gitlab_rails['otp_key_base'] = '65-Zeichen-langer-String'
gitlab_rails['secret_key_base'] = '65-Zeichen-langer-String'
nginx['listen_port'] = 80
nginx['listen_https'] = false
postgresql['enable'] = false
gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'unicode'
gitlab_rails['db_host'] = 'postgresql' # oder IP
gitlab_rails['db_password'] = 'Password'
gitlab_rails['db_username'] = 'User'
gitlab_rails['db_database'] = 'gitlabhq_production'
redis['enable'] = false
gitlab_rails['redis_host'] = 'redis'
gitlab_rails['redis_port'] = '6379'
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'gitlab@your.domain.de'
gitlab_rails['gitlab_email_reply_to'] = 'gitlab@your.domain.de'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = 'smtp-server-name'
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = 'User'
gitlab_rails['smtp_password'] = 'password'
gitlab_rails['smtp_domain'] = 'your.domain.de'
gitlab_rails['smtp_authentication'] = 'login'
gitlab_rails['smtp_enable_starttls_auto'] = true
#### Change the initial default admin password and shared runner registration tokens.
####! **Only applicable on initial setup, changing these settings after database
####! is created and seeded won't yield any change.**
# gitlab_rails['initial_root_password'] = 'Super-Geheimes-Git-Root-Password'
# gitlab_rails['initial_shared_runners_registration_token'] = 'Kann-Aber-Muss-Nicht-Gesetzt-Werden'
gitlab-runner:
image: 'gitlab/gitlab-runner:latest'
container_name: 'gitlab-runner'
restart: always
volumes:
- /volume1/docker/personal/gitlab/gitlab-runner:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- gitlab
networks:
vlan:
ipv4_address: 10.0.0.203
networks:
vlan:
driver: macvlan
driver_opts:
parent: ovs_eth1 # 'ovs' fuer Synology NAS
ipam:
config:
- subnet: 10.0.0.0/24
gateway: 10.0.0.1
ip_range: 10.0.0.200/28
ACHTUNG: Beim Bearbeiten der "docker-compose.yml" immer darauf achten, dass ihr NIEMALS Tabulator-Zeichen einbringt, sondern immer nur Leerzeichen!
Container starten und prüfen
Nun ist es endlich soweit und wir können das erste Mal unseren Container (bzw. die Container) starten. Hierzu gebt ihr in Putty oder im Terminal folgenden Befehl ein:
docker-compose up -d
Das -d am Ende des Befehls bewirkt, dass der Container als Dienst gestartet wird und ihr nicht in der Ausführung "gefangen" bleibt.
Nun warten wir bis alles fertig heruntergeladen und gestartet ist.
Wenn alles geklappt hat, dann präsentiert sich die Docker App in DSM wie folgt:
Nicht wundern: Der MySql - Container gehört nicht zu diesem Beispiel, der läuft aber halt bei mir, da dagegen die Runner ihre Unit-Tests schieben.
Wenn wir soweit sind, dann ist schon mal viel geschafft! Nun prüfen wir aber noch die Gitlab-Instanz, so dass auch wirklich alles passt.
Hierzu loggen wir uns in den Container ein:
docker exec -it gitlab bash
Nun prüfen wir mit folgenden Befehl die Instanz und veranlassen ggf. Korrekturen mit "SANITIZE=True":
gitlab-rake gitlab:check SANITIZE=true
Folgendes Ergebnis sollte auch bei euch herauskommen (seid geduldig, selbst bei meiner Rs1619xs+ braucht der Befehl kurz, bis er die ersten Meldungen bringt).
Berechtigungsprobleme / Permission denied
Falls es wider Erwarten zu Problemen bei den Berechtigungen kommt (ggf. als Meldung beim Einchecken von Änderungen in Repositories oder schon grundsätzlich beim Start des Gitlab-Containers -> siehe Logs im Ordner "Logs"), dann loggt euch wieder in den Container ein und gebt folgenden Befehl ein:
gitlab update-permissions
Damit sollte Gitlab automatisch alle Berechtigungen wieder so setzen, wie es sein soll. Falls es dann immer noch nicht klappt, könnt ihr versuchen einzeln alle Berechtigungen mittels "chmod" oder "chown" zu setzen. Bei mit hat der git user die id "998", das sollte eigentlich auch bei euch so sein (also im Container ).
Reverse Proxy in NAS (HTTPS Zugriff einrichten)
Falls ihr eure Gitlab-Instanz über eine Url erreichen wollt, dann müsst ihr in den Einstellungen des DSM noch eine Umleitung von der Url auf eure IP des Containers einrichten.
Hierzu wechselt ihr in die Systemsteuerung und dort unter den Punkt Anwendungsportal:
In der Registerkarte Reverse Proxy erstellt ihr nun einen neuen Eintrag:
Wenn ihr nun noch euren Router so konfiguriert, dass er den Port "80" und "443" an eurer NAS schickt, dann habt ihr auch von "außen" Zugriff auf eure Gitlab - Instanz (ein entsprechendes https - Zertifikat gibt es von Let's Encrypt kostenlos -> hierzu gibt es tausende Beiträge und Videos im Netz, wie man das unter DSM einrichtet).
Ich hoffe die Anleitung war verständlich und enthielt nicht zu viel "bla bla".
Gruß Christian
Anhänge
Zuletzt bearbeitet: