"Eine gute Geschichte ist wie ein Fenster in eine andere Welt. Ein guter Blog kann uns dorthin bringen."

GitLab auf Synology NAS

GitLab und Runner via Docker einrichten.

 
GitLab einrichten

Als erstes habe ich im File-Manager auf dem NAS unter docker/gitlab-ce/ die drei Verzeichnisse configlogs und data erstellt. Auf dem NAS unter Docker habe ich dann das Image "gitlab/gitlab-ce:latest" benutzt und die drei Verzeichnisse von eben als Volumes eingerichtet:

  • docker/gitlab-ce/config → /etc/gitlab
  • docker/gitlab-ce/logs → /var/log/gitlab
  • docker/gitlab-ce/data → /var/opt/gitlab

Als Umgebungsvariablen habe ich folgende definiert:

  • GITLAB_PORT: 30000
  • GITLAB_SSH_PORT: 30001

Und zu guter letzt noch diese drei Ports eingerichtet:

  • 30000 → 80:tcp
  • 30001 → 22:tcp
  • 30002 → 443:tcp

Wichtig: Für die Ports 30000, 30001 und 30002 habe ich auf meinem Router Port Forwarding Rules eingerichtet.

 

Per SSH verbindet man sich nun mit dem NAS und kann anschliessend die Config-Datei im Volume anpassen, beispielsweise mittels vim (sudo vim docker/gitlab-ce/config/gitlab.rb) und fügt diese Zeilen hinzu:

 

external_url "http://deine.domain:30000/"
nginx['listen_port'] = 80

 

Anschliessend muss GitLab rekonfiguriert werden ("gitlab-gitlab-ce" ist hier der Container-Name und kann variieren):

 

sudo docker exec -it gitlab-gitlab-ce gitlab-ct reconfigure

 

Das Rekonfigurieren braucht etwas Zeit und nach meiner Erfahrung ist GitLab auch noch nicht sofort unter deine.domain:30000 aufrufbar, nur weil die Rekonfiguration fertig ist – ein paar Minuten hat's gedauert, bis alles aufrufbar war.

Wird man beim ersten Aufruf nicht darum gebeten ein Root-Passwort zu setzen sondern bekommt nur eine Anmeldemaske muss das Root-Passwort neu gesetzt werden. Dazu geht man per SSH auf das NAS und von dort in den Container:

 

sudo docker exec -it gitlab-gitlab-ce /bin/bash

 

Im Container kann dann das Root-Passwort neu gesetzt werden mit Hilfe von:

 

gitlab-rake "gitlab:password:reset[root]"

 

Nun sollte ein Login im Browser möglich sein und als Root kann man dann weitere User anlegen.

 

GitLab Runner einrichten

Für Pipelines braucht's noch GitLab Runner. Dafür erstellt man wieder ein Verzeichnis für einen Volume-Mount:

  • docker/gitlab-runner/config

Anschliessend per SSH auf dem NAS einwählen und einen Runner starten:

 

sudo docker run -d
  --name gitlab_runner_docker
  --restart always
  --network host
  -v /run/docker.sock:/var/run/docker.sock
  -v /volume1/docker/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:latest

 

Der Pfad "/volume1/docker/gitlab-runner/config" sollte auf das eben erstellte Verzeichnis für den Mount verweisen.

Runner registrieren

Als Admin geht man jetzt im Browser einmal zu "http://deine.domain:30000/admin/runners", da man gleich Daten von dort benötigt. Anschliessend kann im Terminal auf dem NAS der Registrierungsprozess gestartet werden:

 

sudo docker exec -it gitlab_runner_docker gitlab-runner register

 

Wichtig: "gitlab_runner_docker" muss hier identisch zum "--name gitlab_runner_docker" aus dem Schritt des Runner-Startens von oben sein.

Nach dem Absetzen des Register-Befehls bekommt man ein paar Fragen gestellt:

 

Instance: git.deine.domain
Registration Token: # den gibt's auf der zuvor aufgerufenen Admin-Seite
Description for the runner: GitLabRunner1
Enter tags: # kann leer bestätigt werden, wenn der Runner nicht getaggt werden soll
Enter an executor: docker
Enter the default Docker image: alpine:latest

 

Damit ist die Registrierung abgeschlossen. Die Admin-Seite im Browser sollte nun nach einem Refresh den neuen Runner listen.

Anschliessend muss noch die Config-Datei angepasst werden:

 

vim /volume1/docker/gitlab-runner/config/config.toml

 

Unter "[[runners.docker]]" habe ich den Wert von privileged zu true geändert und die Zeile pull_policy = "if-not-present" ergänzt, sodass Container-Images nicht jedes Mal neu heruntergeladen werden. Danach den Container noch einmal neu starten und der Runner sollte fertig eingerichtet sein: 

 

sudo docker restart gitlab_runner_docker

 

 

renegisler