GitLab Pages mit GitLab Omnibus in Docker + nacktem Apache Reverse Proxy

GitLab Pages mit GitLab Omnibus in Docker + nacktem Apache Reverse Proxy

Ich hoste eine GitLab EE-Instanz (v11.9.0) in einem Docker-Container (Omnibus-Installation) und habe einen Apache-Reverse-Proxy (nicht in Docker) davor, um SSL zu handhaben. Nun möchte ich für einige Projekte statische Seiten mit der GitLab Pages-Funktionalität bereitstellen, was sich mit dem Docker-Setup als etwas knifflig herausstellt.

Ich folgedieser offizielle Leitfadenum zu erreichen, dass meine Seiten unter ausgeliefert werden http://namespace.customdomain.com/projectname. Ich habe die Wildcard-DNS-Einträge hinzugefügt und am herumgebastelt gitlab.rb; dies sind die relevanten Änderungen:

pages_external_url "http://customdomain.com/"
gitlab_pages['enable'] = true
gitlab_pages['external_http'] = ['0.0.0.0:81']
gitlab_pages['inplace_chroot'] = true
pages_nginx['enable'] = true
gitlab_rails['pages_path'] = "/var/opt/gitlab/gitlab-rails/shared/pages"

(Einige der oben genannten Änderungen entsprechen nicht den Anweisungen im Handbuch, ich weiß. Aber die haben auch nicht funktioniert, also habe ich weitergemacht und viel herumprobiert, dies ist nur der aktuelle Status.)

Port 81 ist dem Port 9081 des Hostcomputers zugeordnet und Apache verfügt über einen virtuellen Hosteintrag, um den Datenverkehr dorthin weiterzuleiten:

<VirtualHost *:80>
    ServerAlias *.customdomain.com

    <Location />
        ProxyPass http://localhost:9081/
        ProxyPassReverse http://localhost:9081/
    </Location>

</VirtualHost>

Ich habe die .gitlab-ci.ymlin einem Beispielprojekt verwendet, um eine einfache Website zu erstellen, die nur aus einer Datei besteht index.html. hello worldDiese Datei wird korrekt unter abgelegt /var/opt/gitlab/gitlab-rails/shared/pages/[namespace]/[project]/public/index.html.

Bei [Project]/Settings/Pagessagt mir GitLab: „Herzlichen Glückwunsch! Ihre Seiten werden bereitgestellt unter: http://namespace.customdomain.com/project“.

Wenn ich jetzt versuche, die Seite darunter aufzurufen http://namespace.customdomain.com/project, erhalte ich die 404-Fehlerseite von GitLab.

Das Gute daran ist, dass ich mir deshalb ziemlich sicher bin, dass die Weiterleitung des Datenverkehrs an den Seiten-Daemon korrekt funktioniert. Wenn ich den Seiten-Daemon mit stoppe gitlab-ctl stop gitlab-pages, verschwindet die 404-Seite und ich erhalte einen Proxy-Fehler von Apache. Das Schlechte daran ist, dass die Bereitstellung von Seiten immer noch nicht wie erwartet funktioniert.

Hat es jemand geschafft, GitLab-Seiten mit einem ähnlichen Setup bereitzustellen?

Antwort1

Ich habe endlich herausgefunden, wo das Problem lag. Einfach ProxyPreserveHost ondie Apache-Konfiguration hinzufügen und alles funktioniert einwandfrei. Ich kann keine Einzelheiten dazu liefern, warum das funktioniert hat, vielleicht kann jemand mit mehr Erfahrung mit Apache ein paar Einblicke geben.

Die vollständige vHost-Konfiguration sieht folgendermaßen aus:

<VirtualHost *:80>

    ServerAlias *.customdomain.com

    <Location />       
        ProxyPreserveHost on
        ProxyPass http://localhost:9081/
        ProxyPassReverse http://localhost:9081/
    </Location>

</VirtualHost>

verwandte Informationen