GitLab CE

Das Dokument geht auf die GitLab Community Edition (CE, gitlab-ce) ein.

Links

GitLab funktioniert besser mit PostgreSQL als mit MariaDB. PostgreSQL ab Version 9.6 verwenden. Wenn GitLab hinter einem Reverse Proxy läuft: kein Problem, es muss nichts angepasst werden, einfach „http://“ verwenden. Das Rekonfigurationstool für GitLab verwendet Chef.

Omnibus GitLab ist ein Weg, um verschiedene Dienste und Tools zu packen, die für die Ausführung von GitLab nötig sind.

Voraussetzungen:

  • mind. 2x CPU und 6 GB RAM

Installation

Für die Installation die Omnibus-Variante verwenden. Siehe auch:

echo 'vm.swappiness = 10' >> /etc/sysctl.conf
sysctl -p

dnf -y install policycoreutils-python

Nachfolgend auf gitlab-ce vs. gitlab-ee achten - die erste Variante installiert die Community Edition, letzteres die Enterprise Edition. Installiert wird die fiktive Domain git.example.com:

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
EXTERNAL_URL="http://git.example.com" dnf install -y gitlab-ce

Anschliessend

Die Installation landet in /opt.

Konfiguration

Timezone anpassen: https://docs.gitlab.com/ce/workflow/timezone.html

/etc/gitlab/gitlab.rb
gitlab_rails['time_zone'] = 'Europe/Zurich'

Passwort Length anpassen: https://docs.gitlab.com/ce/security/password_length_limits.html

cd /opt/gitlab/embedded/service/gitlab-rails/config/initializers
cp devise_password_length.rb.example devise_password_length.rb
devise_password_length.rb
Devise.setup do |config|
  # The following line changes the password length limits for new users. In the
  # example below the minimum length is 12 characters, and the maximum length
  # is 128 characters.
  config.password_length = 12..128
end

Rack Attack: https://docs.gitlab.com/ce/security/rack_attack.html

/etc/gitlab/gitlab.rb
gitlab_rails['rack_attack_git_basic_auth'] = {
  'enabled' => true,
  'ip_whitelist' => ["127.0.0.1"],
  'maxretry' => 10, # Limit the number of Git HTTP authentication attempts per IP
  'findtime' => 60, # Reset the auth attempt counter per IP after 60 seconds
  'bantime' => 3600 # Ban an IP for one hour (3600s) after too many auth attempts
}

Am Ende jeder Konfigurationsanpassung:

# might take some minutes:
gitlab-ctl reconfigure

gitlab-ctl restart

In der Weboberfläche unter Admin Area > Settings > General > Sign-up restrictions > Sign-up enabled: abschalten.

Git-Repo ohne User pullen

Ein System soll ein Git-Repo pullen, man möchte dafür aber keinen GitLab-Benutzer anlegen? Einfach im Repo unter „Settings“ einen „Access Token“ mit Berechtigung auf „read-repo“ anlegen. Das Repo wird dann auf dem Zielsystem wie folgt geklont:

http://oauth2:myaccesstoken@git.example.com/path/to/my/repo.git newfoldername

# later on:
git pull --all

Matomo (Piwik)

/etc/gitlab/gitlab.rb
gitlab_rails['extra_matomo_url'] = "matomo.example.com"
gitlab_rails['extra_matomo_site_id'] = "4711"
gitlab-ctl reconfigure

Anpassung des Layouts

Bemerkung

Die nachfolgenden Änderungen werden bei jedem GitLab-Update überschrieben.

Im Beispiel Dateien aus /opt/gitlab/embedded/service/gitlab-rails/app/views/layouts und darunter anpassen (Ruby/Slim-Syntax, siehe http://slim-lang.com/). Anschliessend gitlab-ctl restart ausführen.

Meist genügt die Anpassung der _head.html.haml und der _default.html.haml.

CSS einfügen:

/opt/gitlab/embedded/service/gitlab-rails/app/views/layouts/_head.html.haml
  :css
    .linuxfabrik-header {
        background-color: #ff6600;
        display: block;
        font-family: "Roboto", Arial, Sans-Serif;
        font-weight: bold;
        margin: 0px 0px;
        overflow: hidden;
        padding: 9px 10px;
    }
    ...

Javascript einfügen:

/opt/gitlab/embedded/service/gitlab-rails/app/views/layouts/_head.html.haml
:javascript
  alert('Slim supports embedded javascript!')
  ...

= javascript_include_tag "https://use.fontawesome.com/1d4a5ec9f4.js"

HTML einfügen - Wenn Slim auf die linke spitze Klammer trifft, weiss es, dass HTML eingefügt werden muss:

/opt/gitlab/embedded/service/gitlab-rails/app/views/layouts/application.html.haml
%body{ class: "#{user_application_theme} #{user_tab_width} #{@body_class} #{client_class_list}", data: body_data }

  <div id="linuxfabrik-navi-desktop" class="linuxfabrik-header">
    <img src="https://test-www.linuxfabrik.ch/wp-content/uploads/2021/05/linuxfabrik_logo_schwarz-01.png" alt="Logo Linuxfabrik"/>
    <div class="linuxfabrik-header-right">
      ...

  = render "layouts/init_auto_complete" if @gfm_form

Inline CSS zu einem Tag hinzufügen (im Beispiel bei „<header>“):

/opt/gitlab/embedded/service/gitlab-rails/app/views/layouts/header/_default.html.haml
%header.navbar.navbar-gitlab.navbar-expand-sm.js-navbar{ style: 'margin-top: 70px;', data: { qa_selector: 'navbar' } }

Anschliessend ein gitlab-ctl restart durchführen.

Troubleshooting

GitLabs Komponenten schreiben ihre Aktivitäten in zig Log-Dateien. Hier ein vollständiger Aufruf:
cd /var/log/gitlab
tail -f  alertmanager/current gitaly/current gitlab-exporter/current gitlab-workhorse/current grafana/current logrotate/current nginx/current node-exporter/current postgres-exporter/current postgresql/current prometheus/current puma/current redis-exporter/current redis/current registry/current sidekiq/current unicorn/current
Redo database migration (die Dateien liegen in /opt/gitlab/embedded/service/gitlab-rails/db):
cd /opt/gitlab/embedded/bin
bundle exec rake db:migrate:redo VERSION=20200722202318 RAILS_ENV=production

GitLab Runner

Sollte aus Performancegründen nicht auf der gleichen Maschine wie GitLab installiert werden.

# https://docs.gitlab.com/runner/install/linux-repository.html
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash
yum -y install gitlab-runner

Anschliessend ist der gitlab-runner.service bereits enabled und started.

Runner registrieren.

Built on 2022-06-03