Instalace GitLab na Ubuntu a Apache přes HTTPS

GitLab je skvělý nástroj pro webovou správu Git repositáře. V tomto krátkém článku si ukážeme, jak ho dostat na server, připravit Apache a nakonfigurovat.

Instalace GitLab

1) Začneme instalací potřebných balíčků:
sudo apt-get install -y curl openssh-server ca-certificates

2) Přidáme si repositář balíčku s GitLabem:
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

3) Nainstalujeme GitLab. Už při instalaci je možné nastavit URL, na které chceme mít GitLab přístupný. K tomu slouží parametr EXTERNAL_URL. V příkladu použijeme vzorovou URL: https://gitlab.example.com

sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ce

Konfigurace Apache:

1) Založíme vhost pro Apache:
sudo nano /etc/apache2/sites-available/gitlab.example.com

2) Nezapomeňte nahradit https://gitlab.example.com za existující URL a nastavit správnou (existující) cestu pro logy a ssl certifikát.

Obsah souboru bude vypadat např. takto:

<VirtualHost *:80>
ServerName gitlab.example.com
ServerSignature Off

RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [NE,R,L]
</VirtualHost>

<VirtualHost *:443>
SSLEngine on
SSLProtocol all -SSLv2
SSLHonorCipherOrder on
SSLCipherSuite „ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS“
Header add Strict-Transport-Security: „max-age=15768000;includeSubdomains“
SSLCompression Off

SSLCertificateFile /etc/httpd/ssl.crt/gitlab.example.com.crt
SSLCertificateKeyFile /etc/httpd/ssl.key/gitlab.example.com.key
SSLCACertificateFile /etc/httpd/ssl.crt/muj-ca.crt

ServerName gitlab.example.com
ServerSignature Off

ProxyPreserveHost On
AllowEncodedSlashes NoDecode

<Location />
Require all granted
ProxyPassReverse http://127.0.0.1:8081
ProxyPassReverse http://gitlab.example.com/
</Location>

RewriteEngine on

#Forward all requests to gitlab-workhorse except existing files like error documents
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_URI} ^/uploads/.*
RewriteRule .* http://127.0.0.1:8081%{REQUEST_URI} [P,QSA,NE]

RequestHeader set X_FORWARDED_PROTO ‚https‘
RequestHeader set X-Forwarded-Ssl on

# needed for downloading attachments
DocumentRoot /opt/gitlab/embedded/service/gitlab-rails/public

ErrorDocument 404 /404.html
ErrorDocument 422 /422.html
ErrorDocument 500 /500.html
ErrorDocument 502 /502.html
ErrorDocument 503 /503.html

LogFormat „%{X-Forwarded-For}i %l %u %t \“%r\“ %>s %b“ common_forwarded
ErrorLog /var/log/httpd/logs/gitlab.example.com_error.log
CustomLog /var/log/httpd/logs/gitlab.example.com_forwarded.log common_forwarded
CustomLog /var/log/httpd/logs/gitlab.example.com_access.log combined env=!dontlog
CustomLog /var/log/httpd/logs/gitlab.example.com.log combined

</VirtualHost>

Nastavení pro různé verze nebo nginx můžete najít ZDE.

3) Ujistíme se, že na Apache jsou zapnuté moduly pro proxy, ssl a mod_rewrite:
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod mod_rewrite
sudo a2enmod mod_ssl
sudo a2enmod mod_headers

4) Zapneme vytvořený vhost:
sudo a2ensite gitlab.example.com

Konfigurace GitLab

1) Nastavíme konfigurační soubor:
sudo nano /etc/gitlab/gitlab.rb

2) Parametr external_url zkontrolujeme:

external_url ‚https://gitlab.example.com‘

3) Upravíme následující konfiguraci. Tím vypneme nginx a nastavíme práva pro Apache:
nginx[‚enable‘] = false
unicorn[‚port‘] = 8081
web_server[‚external_users‘] = [‚www-data‘]

4) Reloadneme Apache a spustíme rekonfiguraci GitLabu. Tím se nastaví vhost pro Apache a pro GitLab se zapne upravená konfigurace.
sudo service apache2 reload
gitlab-ctl reconfigure

6) Hotovo. Pod naší URL by měl být GitLab na HTTPS.

Gitlab přihlášení
Gitlab přihlášení