GitLab konfigurieren

Für die Konfiguration des GitLab mit dem Omnibus-Package ist nur eine Datei notwendig, diese ist die “/etc/gitlab/gitlab.rb”.

Ein Beispiel:

# URL die im Browser eingegeben wird. (Es scheint so, das am Ende kein / stehen darf)
external_url "https://gitlab.example.com"

# Einstellungen für nginx
nginx['listen_address'] = '127.0.0.1'
nginx['listen_https'] = false
nginx['listen_port'] = 880
nginx['redirect_http_to_https'] = true
# Ist notwendig, damit die richtige URL bei den Projekten steht. Gerade bei Sub-Sub-Domains, z.B: gitlab.mydomain.example.com.
gitlab_rails["gitlab_host"] = 'gitlab.example.com'
# EMail-Adresse die als Absender eingetragen wird
gitlab_railse["gitlab_email_from"] = 'gitlab@example.com'
# Für neuere Version, wird mehr Arbeitsspeicher benötigt (recommended 4 GB), um diese etwas zu umgehen kann die
#   Unicorn-Arbeitsthread verringer, die typischerweise auf Anzahl Cores + 1 eingestellt sind:
#   Weitere Info: https://docs.gitlab.com/ce/install/requirements.html#unicorn-workers
unicorn['worker_processes'] = 2
unicorn['worker_timeout'] = 60

Nach jeder Änderung in der Konfiguration muss gitlab rekonfiguriert werden, das macht man mit folgenden Befehl:

gitlab-ctl reconfigure

Wenn nginx nicht starten kann, weil ein anderer Webserver schon läuft, dann kann man das wie folgt lösen. Zuerst muss man nginx umkonfigurieren, damit dieser auf einen anderen Port lauscht. In der Datei “/etc/gitlab/gitlab.rb” die nachfolgenden Einträge hinzufügen:

# Einstellungen für nginx
nginx['listen_address'] = '127.0.0.1'
nginx['listen_https'] = false
nginx['listen_port'] = 880
nginx['redirect_http_to_https'] = true

Da hier ein interne Verbindung benutzt wird, um von dem einen Webserver auf den anderen zu kommen, reicht hier http völlig aus. Das “:880” definiert den Port an dem nginx lauschen soll. Sollte nach dem Re-konfigurieren von gitlab, nginx noch nicht am angegeben Port lauschen, was mit nachfolgenden Befehl nachgeprüft werden kann:

netstat -pant

Dann sollte man nginx per Hand stoppen und starten:

gitlab-ctl stop nginx
gitlab-ctl start nginx

Nun muss der andere Webserver noch als Proxy eingerichtet werden. Beim Apache (ab Version 2.0) müssen zuerst die Proxy-Module aktiviert werden:

a2enmod proxy
a2enmod proxy_http

In der VHost-Konfiguration zum Gitlab-Server sollte dann ungefähr so ausschauen:

# unverschlüsselte Verbindung
<VirtualHost w.x.y.z:80>
  ServerName gitlab.example.com
  ServerAdmin hostmaster@example.com
  # Umleiten auf HTTPS
  <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^/(.*) https://gitlab.example.com/$1
  </IfModule>
  Redirect / https://gitlab.exmaple.com/
</VirtualHost>
# SSL Konfiguration
<VirtualHost w.x.y.z:443>
  ServerName gitlab.example.com
  ServerAdmin hostmaster@example.com
  SSLEngine On
  SSLHonorChipherOrder On
  SSLCipherSuite ...
  SSLVerifyDepth 10
  SSLCertificateFile /../...pem
  SSLCertificateKeyFile /../...key
  SSLCertificateKeyFile /../...crt
  SSLCertificateKeyFile /../...csr
  ...

  # Internes weiterleiten an den nginx
  <IfModule mod_proxy.c>
    ProxyVia On
    ProxyRequests Off
    ProxyPass / http://127.0.0.1:880/
    ProxyPassReverse / http://127.0.0.1:880/
    ProxyPreserveHost On
    <Proxy *>
      Options FollowSymLinks MultiViews
      AllowOverride All
      Order allow,deny
      allow from all
    </Proxy>
    # Notwendig, damit die https-Verbindung auf http weitergeleitet werden kann
    RequestHeader set Host "gitlab.example.com"
    RequestHeader add X-Forwarded-Ssl on
    RequestHeader set X-Forwarded-For %{REMOTE_IP}%
    RequestHeader set X-Forwarded-Proto "https"
  </IfModule>
</VirtualHost>

Und dann noch den Apache die Konfiguration erneut einlesen lassen, mit nachfolgenden Befehl:

service apache2 reload #oder restart wenn man möchte

Nun sollte man über den Zugriff “https://gitlab.example.com” auf die GitLab anmelde Webseite kommen. Und bei den Projekten, sollten auch die richtigen URLs erscheinen.

Weitere Informationen zu Einstellungen von GitLab findet man hier.