[[software:gitlab]]

GitLab

GitLab ist eine Webanwendung zur Versionsverwaltung für Softwareprojekte auf Basis von git. Sie bietet diverse Management und Bug-Tracking-Funktionalitäten sowie mit GitLab CI ein System zur kontinuierlichen Integration. Quelle Wikipedia

Die Systemvorraussetzungen sind (abhängig von der laufenden Komponenten) moderat, unter 4GB Arbeitsspeicher wird es aber nicht gut laufen.

GitLab Installation

Im Falle von Debian ist das relativ simpel:

sudo apt install -y curl openssh-server ca-certificates
sudo apt install -y postfix
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
sudo EXTERNAL_URL="http://gitlab.myDOMAIN.tld" apt-get install gitlab-ee

Nach Änderungen der Konfigurationsdatei /etc/gitlab/gitlab.rb wird intern Chef aufgerufen um die entsprechende Config zu erzeugen:

gitlab-ctl reconfigure
gitlab-ctl restart

Debugging: /var/log/gitlab/gitlab-rails/production.log

SMTP-Settings

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "RELAY-Server.domain.tld"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "BENUTZNAME"
gitlab_rails['smtp_password'] = "PASSWORT"
gitlab_rails['smtp_domain'] = "ABSENDERDOMAIN.tld"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false

gitlab_rails['gitlab_email_from'] = 'gitlab@ABSENDERDOMAIN.tld'
gitlab_rails['gitlab_email_display_name'] = 'NAME DER Gitlab-INSTANZ'
gitlab_rails['gitlab_email_reply_to'] = 'reply-to@ABSENDERDOMAIN.tld'

debugging smtp

gitlab-rails console production
Notify.test_email('ICH@DOMAIN.TLD', 'Hello World', 'This is a test message').deliver_now

Es muss ein gültiges Zertifikat auf die external_url vorhanden sein, alternativ mit letsencrypt besorgen.

external_url 'https://gitlab.myDOMAIN.tld'

nginx['redirect_http_to_https'] = true
nginx['redirect_http_to_https_port'] = 80

nginx['ssl_certificate'] = "/etc/gitlab/ssl/ZERTIFIKAT.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/PRIVATEKEY.key"
nginx['ssl_ciphers'] = "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256"
# nginx['ssl_ciphers'] = "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA:EECDH:EDH+AESGCM:EDH:ECDH+AESGCM:ECDH+AES:ECDH:HIGH:MEDIUM:!RC4:!3DES:!CAMELLIA:!SEED:!aNULL:!MD5:!eNULL:!LOW:!EXP:!DSS:!PSK:!SRP"
nginx['ssl_prefer_server_ciphers'] = "on"

:!: Das Zertifikat und Zwischenzertifikate müssen in die Datei bei ssl_certificate hinein.

Automatische Verlängerung mit letsencrypt

/etc/gitlab/ssl/update-cert.sh

#!/bin/sh
 
dest="/etc/gitlab/ssl"
user="gitlab-www"
domain="my.domain.tld"
 
cp /etc/letsencrypt/live/$domain/privkey.pem $dest/gitlab.key
chmod 600 $dest/gitlab.key
chown $user $dest/gitlab.key
cat /etc/letsencrypt/live/$domain/cert.pem /etc/letsencrypt/live/$domain/chain.pem > $dest/gitlab.fullchain
chgrp $user $dest/gitlab.fullchain

in der crontab:

/root/letsencrypt/letsencrypt-auto renew --pre-hook "gitlab-ctl stopr" --post-hook "/etc/gitlab/ssl/update-cert.sh ; gitlab-ctl start"

via cron-job:

gitlab-rake gitlab:backup:create

Die Archive landen in /var/opt/gitlab/backups/.

Gitlab bietet die Möglichkeit andere Repositories zu spiegeln (mirroring). Es zwei Richtungen

  • Pull: Entferntes Repository nach gitlab (nur mit der enterprise-Edition)
  • Push: gitlab zu einem entferntem Repository.

Die Einstellungen dazu finden sich in Projekt → Settings → Repository → Mirror a repository.

Alternativ (allerdings manuell) kann ein entferntes Repo als upstream definiert werden und/oder als Submodul eingesetzt werden.