HowTo: Gitlab hinter Apache2 + SSL (https)

Um Gitlab hinter Apache2 als Reverse Proxy zu verwenden, folge einfach diesem kleinen How-To. In unserem Beispiel haben wir Debian Jessie verwendet, es sollte aber auch mit anderen Distributionen wie Ubuntu problemlos klappen. Vergiss nicht die Platzhalter mit deinen eigenen Werten zu ersetzen!

Gitlab installieren

Als erstes benötigen wir ein installiertes Gitlab. Folge hierfür einfach der Anleitung, welche du auf der offiziellen Seite von gitlab findest.

Gitlab rekonfigurieren

Wir benötigen Gitlab als lokalen Webserver, welcher über einen freien Port lauscht (z.B. 8888). Füge einfach folgende Zeilen in die /etc/gitlab/gitlab.rb ein:

external_url 'https://{example.tld}'
nginx['listen_address'] = 'localhost'
nginx['listen_port'] = 8888
nginx['listen_https'] = false

Als nächstes führe das Rekonfigurationsskript aus:

gitlab-ctl reconfigure

Apache2 konfigurieren

Für unser HowTo benötigen wir einen vorkonfigurierten Apache2-Webserver, welcher SSL-Support und auf Port 443 (Standard https-Port) horcht. Wenn du nicht weißt, wie das geht, suche einfach im Web.

Seitenkonfigurationsdateien erstellen

Konfigurationsdatei für http

Als erstes möchten wir alle http-Anfragen auf https weiterleiten. Erstelle hierfür einfach eine Konfigurationsdatei in folgendem Verzeichnis: /etc/apache2/sites-availabe/{example.tld}.conf

<VirtualHost {yourip}:80>
ServerName {example.tld}
ServerAdmin {mail@example.tld}

ErrorLog /var/log/apache2/{example.tld}/error.log

Redirect 301 / https://{example.tld}/
</VirtualHost>

Nun aktivieren wir die Konfigurationsdatei:

a2ensite {example.tld}
Konfigurationsdatei für https

Als nächstes die Hauptdatei, welche einen Reverse Proxy zur lokalen Gitlab Instanz aufsetzt. Erstelle hierfür einfach eine Konfigurationsdatei in folgendem Verzeichnis: /etc/apache2/sites-availabe/{example.tld}_ssl.conf

<VirtualHost {yourip}:443>
ServerName {example.tld}
ServerAdmin {mail@example.tld}

ErrorLog /var/log/apache2/{example.tld}/error.log

RequestHeader set Host "{example.tld}"
RequestHeader add X-Forwarded-Ssl on
RequestHeader set X-Forwarded-For %<span class="pl-s1"><span class="pl-pse">{</span>REMOTE_ADDR<span class="pl-pse">}</span></span>e
RequestHeader set X-Forwarded-Proto "https"

ProxyPreserveHost On
ProxyPass / http://localhost:8888/
ProxyPassReverse / http://localhost:8888/

SSLEngine On
SSLCertificateFile /etc/gitlab/ssl/{example.tld}.pem
SSLCertificateChainFile /etc/gitlab/ssl/{example.tld}.pem
</VirtualHost>

Nun aktivieren wir die Konfigurationsdatei:

a2ensite {example.tld}_ssl

Und ebenso das benötigte headers Modul:

a2enmod headers
Zertifikat hinzufügen

Vergiss nicht dein Zertifikat zum oben konfigurierten Pfad zu kopieren. In unserem Beispiel müsste das Zertifikat unter: /etc/gitlab/ssl/{example.tld}.pem liegen. Das Zertifikat müsste den entschlüsselten privaten Schlüssel, öffentlichen Schlüssel und Zwischenzertifikat beinhalten. Wenn du nicht weißt, wie man eine .pem-Datei erstellt oder ein Zertifikat bekommt, stöbere einfach im Internet rum.

Zuletzt laden wir Apache2 neu (ein Neustart des Dienstes wäre ebenso möglich):

service apache2 reload

Du kannst Gitlab auch ohne SSL-Support laufen lassen. Da es nicht empfohlen ist, werde ich nicht genauer darauf eingehen. Wenn du weißt, was du tust, ist es sehr einfach einen Reverse Proxy ohne SSL (https) zu konfigurieren.