Main /

Gitlab

Gitlab

Gitlab

Eine Möglichkeit Gitlab in einem Docker-Container zum laufen zu bringen soll hier mal gezeigt werden.

Ich Lars habe mir gedacht, ich installiere mir mal selbst ein GitRepo, was liegt da näher als gleich Gitlab zu nutzen, es bringt schließlich alles was das Herz begehrt mit und da man heute mit der Zeit geht gleich im Docker Container. Also kurz bei hub.docker.com vorbei geschaut und das freie Gitlab CE genommen und der Anleitung gefolgt.

Gitlab holen und starten

Erst mal die Directories anlegen

 mkdir -p /var/gitlab/config
 mkdir -p /var/gitlab/logs
 mkdir -p /var/gitlab/data

Jetzt den Docker-Container runterladen und gleich starten.

 docker run --detach 
--hostname gitlab.example.com
--publish 2443:443 --publish 2080:80 --publish 2022:22
--name gitlab
--restart always
--volume /var/gitlab/config:/etc/gitlab
--volume /var/gitlab/logs:/var/log/gitlab
--volume /var/gitlab/data:/var/opt/gitlab
gitlab/gitlab-ce:latest

Gitlab konfigurieren

Folgende Werte habe ich in der /var/gitlab/config/gitlab.rb gesetzt.

 external_url 'http://gitlab.moonserver.homeplex.org'

Einen extra Port habe ich nicht gesetzt, da diese URL innerhalb des Docker-Containers so gilt. Da ich aber selbst noch einen Apachen auf Port 80 habe, habe ich den Docker-Container auf einen anderen Port (2080) gesetzt. Zusätzlich habe ich im Router eine Weiterleitung für Port 2080 eingetragen.

Ich habe den Port für gitlab nochmal explizit gesetzt, auch hier gilt das es im Docker-Container der Standard ist, außerhalb ist es ein anderer Port.

 gitlab_rails['gitlab_shell_ssh_port'] = 22

Damit Mail funktioniert, sucht man sich seinen Mail-Server und trägt die Werte in die gitlab.rb ein z.B. GMX dort sind viele Werte hinterlegt und man muß nur seinen Nutzer und dessen Kennwort hinterlegen.

Der nginx soll gestartet werden.

 nginx['enable'] = true

Rekonfigurieren

Da der Docker schon läuft aber Änderungen an der Konfiguration vorgenommen wurden, müssen diese dem Gitlab-Docker bekannt gemacht werden. Dazu kann man sich in den Docker-Container einloggen.

 # docker exec -it gitlab /bin/bash

Zum rekonfigurieren folgendes im Docker-Container ausführen

 # gitlab-ctl reconfigure

Aufrufen und der Gitlab übernimmt sämtliche Änderungen.

 #  exit

Um die Dockerumgebung wieder zu verlassen.

Das geht auch in einer Zeile

 docker exec -it gitlab gitlab-ctl reconfigure

Update Gitlab

Gibt es ein Update, also eine neuere Version, wird der Docker-Container gestoppt und der gerade laufende Docker gelöscht, danach einfach den obigen docker run erneut ausführen.

 docker stop

 docker rm gitlab

löscht nur das gitlab Docker, aber nicht das Image, das wollen wir von der Platte putzen.

 docker images -a | grep 'gitlab'
 REPOSITORY         TAG      IMAGE ID     CREATED   SIZE
 gitlab/gitlab-ce   latest   e412c1b2d4   gestern   1.10GB

 docker rmi gitlab/gitlab-ce

löscht das Image von der Platte, jetzt sind wir in der Lage den langen "docker run..." erneut zu starten, dabei werden sämliche Images neu geholt und das System damit aktualisiert.

 docker run --detach... (siehe oben)

Gitlab von außen erreichbar machen

Über afraid.org gibt es die Möglichkeit sich kostenlos eine DNS-Subdomain zu erstellen. Per Url läßt sich die DNS-Subdomain aktualisieren, das läßt sich in besseren Routern eintragen und beim täglichen Wechsel der eigenen IP wird dann gleich die DNS-Subdomain mit aktualisiert, so ist man über einen Namen im Internet erreichbar, obwohl der Netzanbieter alle 24h die IP ändert.

Dann noch die Portweiterleitung im Router eintragen und ein Zugriff von außen wird an den richtigen Server weitergeleitet.

Dabei habe ich dann festgestellt, das mein Let's encrypt Zertifikat nur für meine Hauptdomain gilt, deshalb gibt es aktuell kein https, kommt aber bald.

HTTPS

Wenn man weiß wie es geht ist es einfach.

Https-einrichten

Im Verzeichnis der gitlab Konfiguration /var/gitlab/config ein neues Verzeichnis ssl anlegen und dort 2 Dateien vom eigenen let's encrypt hineinkopieren. Nämlich fullchain.pem und privkey.pem, die privkey.kem mittels chmod 400 bearbeiten.

Desweiteren wird von letsencrypt die Datei cert.pem als gitlab.moonserver.homeplex.org.crt hier abgelegt und die privkey.pem nochmal als gitlab.moonserver.homeplex.org.key. Die *.key Datei mittels chmod 400 sichern.

In der gitlab.rb zeigt die external_url auf https statt http

 nginx['redirect_http_to_https'] = true
 nginx['ssl_certificate'] = "/etc/gitlab/ssl/fullchain.pem"
 nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/privkey.pem"
 # Damit ruby nicht trotzdem beigeht und versucht selbst ein Zertifikat zu ziehen
 # klemmen wir letsencrypt explizit ab. Ich will es alleine machen!
 letsencrypt['enable'] = false

Jetzt nocheinmal den gitlab rekonfigurieren und schon sollte gitlab per https erreichbar sein.

Verständnis: Innerhalb des Docker-Containers läuft der Gitlab und der kennt /etc/gitlab/ssl/... . Außerhalb vom Docker also im Gentoo-Linux mappen wir per --volume Parameter das Verzeichnis /var/gitlab/config in das Docker-Verzeichnis /etc/gitlab. Damit hat man über /var/gitlab/config Zugriff auf die Konfiguration im Docker, aber nur wenn der Docker auch läuft. Halt nur mal so zum Verständnis.

Rückbau der anderen Ports

Ich habe einen Apachen, der erntet sämtliche Anfragen von Port 80 und Port 443. Der Gitlab-Server steht außen vor, da er mittels Docker in das System eingezogen wurde. Was also liegt näher dem Apachen ein Rewrite zu verpassen, so dass der Gitlab angesprochen wird, wenn man über https ohne extra Port kommt.

 RewriteEngine on
 RewriteRule ^.*$ https://gitlab.moonserver.homeplex.org:2443%{REQUEST_URI} [L,R]

Voilà, der Gitlab Server läßt sich ohne Port ansprechen.

Für Port 80 ist es mit egal, damit soll kein Zugriff erlaubt werden. Punkt. Aus. Basta. Arme verschränk! /Lars

Frische Änderungen | Menü editieren
zuletzt geändert am 22.02.2020 11:35 Uhr von Lars
Edit Page | Page History