Allgemein
Knowledge Base
- Neue Struktur (In Arbeit)
- Computertechnisches
Community
Privat
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.
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
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
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
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)
Ü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.
Wenn man weiß wie es geht ist es einfach.
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.
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