Nach mehreren Updates von Gitlab bzw. der Linux-Distribution fiel auf. dass bei Issues/Tickets zwar weiterhin Uploads (unabhängig von Typen) möglich waren und diese auch abgelegt wurden – ein Abrufen war jedoch nicht möglich.
Schritt 1 – Überprüfung des Uploads
Aufruf von sudo gitlab-rake gitlab:uploads:check
(vergl. https://docs.gitlab.com/administration/raketasks/check/#uploaded-files-integrity)
Nach dem anschließenden Upload, sollte der Filecounter entsprechend angestiegen sein. Dies war im vorliegenden Fall gegeben.
Schritt 2 – Betrachtung der Architektur
Als Webserver kommt auf dem System apache2 zum Einsatz – primär um auch weitere Sites auszuliefern. Es handelt sich dabei um ein „Multi-Domain-Setup“. Es steht dabei nur eine IP zur Verfügung.
Apache2 ist daher als Reverse-Proxy konfiguriert und liefert entsprechend die GIT-UI aus. Der GIT-interne NGINX ist dabei deaktiviert.
Bewertung:
Zahlreiche Beiträge weisen darauf hin, dass man trotz apache2 nicht auf den zwischengeschalteten NGINX verzichten sollte.
Schritt 3 – Umsetzung der Optimierungen
Als Webserver kommt auf dem System apache2 zum Einsatz – primär um auch weitere Sites auszuliefern. Es handelt sich dabei um ein „Multi-Domain-Setup“. Es steht dabei nur eine IP zur Verfügung.
Anpassungen im Detail:
- lokaler NGINX (aus gitlab-Package) auf localhost:8081
Reaktivierung NGINX (inkl. Deaktivierung sendfile)/etc/gitlab/gitlab.rb ############################################################# Externe URL (die URL, die Benutzer aufrufen) ############################################################external_url 'https://gitlab.mydomain.org' ############################################################# GitLab interner Nginx ############################################################nginx['enable'] = true# Alle nginx-Listener (Frontend + interne Ports) nur lokal bindennginx['listen_addresses'] = ['127.0.0.1']# Frontend-Port für Apache-Proxy nginx['listen_port'] = 8081nginx['listen_https'] = false# Apache-Proxy-Kompatibilität: sendfile deaktivierengitlab_workhorse['sendfile'] = false# Optional: größere Uploads erlaubennginx['client_max_body_size'] = '250m' ############################################################# Optional: Logging############################################################nginx['log_format'] = 'combined'
Nach einem
gitlab-ctl reconfigure
gitlab-ctl restart
kann man die Umsetzung kontrollieren:
- Schützen weiterer NGINX-Ports mittels lokaler Firewall (ufw)
Wie im Screenshot zu sehen, lässt sich der Port tcp/8060 nicht einschränken. Um auf diesen den unberechtigten Zugriff zu verhindern, kommt daher UFW zu Einsatz.
Vor der Einrichtung der lokalen Firewall sollte dringend verifiziert werden, dass es noch einen weiteren Zugriffsweg (z.B. über das Web-Interface des Cloud-Server-Anbieters) gibt.
Anschließend kann UFW installiert und konfiguriert werden:
Installation und setzen der Default-Einstellungen (inkl. Erlauben des SSH-Zugriffs):demo-adm@demo2:~# sudo apt-get install ufwReading package lists... DoneBuilding dependency tree...Done Reading state information... Donedemo-adm@demo2:~# sudo ufw default allow outgoingDefault outgoing policy changed to 'allow' (be sure to update your rules accordingly)demo-adm@demo2:~# sudo ufw default allow incomingDefault incoming policy changed to 'allow' (be sure to update your rules accordingly)demo-adm@demo2:~# sudo ufw allow sshRules updatedRules updated (v6)
Blockieren des Zugriffs auf tcp/8060:demo-adm@demo2:~# sudo ufw deny 8060 Rules updated Rules updated (v6)
Aktivieren:demo-adm@demo2:~# sudo ufw enableCommand may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup@admin-phf
Kontrolle:
- Konfiguration von Apache2 als Reverse-Proxy
Als letzten Schritt gilt es nun, den Apache zu konfigurieren bzw. die Konfiguration auf das Zusammenspiel mit NGINX zu optimieren.
/etc/apache2/sites.available/gitlab.conf
<VirtualHost *:443>
ServerName gitlab.mydomain.org
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/gitlab.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/gitlab.example.com/privkey.pem
# Proxy Einstellungen
ProxyPreserveHost On
ProxyRequests Off
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Ssl "on"
# Apache-Optimierungen für GitLab
EnableSendfile Off
EnableMMAP Off
LimitRequestBody 0
# ProxyPass zum internen GitLab-nginx
ProxyPass / http://127.0.0.1:8081/ nocanon retry=0 timeout=300
ProxyPassReverse / http://127.0.0.1:8081/
# WebSocket-Unterstützung (ActionCable)
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:8081/$1 [P,L]
# Logging
ErrorLog ${APACHE_LOG_DIR}/gitlab_error.log
CustomLog ${APACHE_LOG_DIR}/gitlab_access.log combined
</VirtualHost>
Anschließend noch relevante Module aktivieren, die Site aktivieren und Apache2 neu starten.
a2enmod proxy proxy_http proxy_wstunnel ssl headers rewrite
a2ensite gitlab
systemctl restart apache2




