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 Pricing Strategy von Anfang 2021 hebt die Preise auf mind. 19$ pro Benutzer und Monat für features wie LDAP an.
Installation
Die Systemvorraussetzungen sind (abhängig von der laufenden Komponenten) moderat, unter 4GB Arbeitsspeicher wird es aber nicht gut laufen.
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
Beispiel: debian bookworm
curl -fsSL https://packages.gitlab.com/gitlab/gitlab-ee/gpgkey | gpg –dearmor > /usr/share/keyrings/gitlab_gitlab-ee-archive-keyring.gpg
Paketquelle:
curl -sSf 'https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/config_file.list?os=debian&dist=bookworm&source=script
ergibt:
deb [signed-by=/usr/share/keyrings/gitlab_gitlab-ee-archive-keyring.gpg] https://packages.gitlab.com/gitlab/gitlab-ee/debian/ bookworm main deb-src [signed-by=/usr/share/keyrings/gitlab_gitlab-ee-archive-keyring.gpg] https://packages.gitlab.com/gitlab/gitlab-ee/debian/ bookworm main
GPG-key abgelaufen (old style)
wenn nicht „signed-by“ benutzt wird (deprecated), ansonsten siehe oben.
Die folgenden Signaturen waren ungültig: EXPKEYSIG 3F01618A51312F3F GitLab B.V. (package repository signing key) <packages@gitlab.com>
curl -L https://packages.gitlab.com/gitlab/gitlab-ee/gpgkey | sudo apt-key add -
Konfiguration
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
IPv6
gitlab bringt sein eigenes nginx mit, daher muss dies auf IPv6 konfiguriert werden:
# v6: nginx['listen_addresses'] = ["0.0.0.0", "[::]"] # registry_nginx['listen_addresses'] = ['*', '[::]'] # mattermost_nginx['listen_addresses'] = ['*', '[::]'] # pages_nginx['listen_addresses'] = ['*', '[::]']
wenn es funktioniert:
netstat -avlpt|grep nginx tcp6 0 0 [::]:https [::]:* LISTEN 30331/nginx: master tcp6 0 0 [::]:http [::]:* LISTEN 30331/nginx: master
SMTP-Config
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'
gitlab-rails console Notify.test_email('ICH@DOMAIN.TLD', 'Hello World', 'This is a test message').deliver_now
SSL
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"
Backup
via cron-job:
gitlab-rake gitlab:backup:create
Die Archive landen in /var/opt/gitlab/backups/
.
Benutzung
Repository mirroring
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.