====== GitLab ======
[[wpde>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.
[[wpde>gitlab|Quelle Wikipedia]]
Die [[https://about.gitlab.com/handbook/ceo/pricing/#the-likely-type-of-buyer-determines-what-features-go-in-what-tier|Pricing Strategy]] von Anfang 2021 hebt die Preise auf mind. 19$ pro Benutzer und Monat für features wie LDAP an.
===== Installation =====
Die [[https://docs.gitlab.com/ce/install/requirements.html|Systemvorraussetzungen]] sind (abhängig von der laufenden Komponenten) moderat, unter 4GB Arbeitsspeicher wird es aber nicht gut laufen.
[[https://about.gitlab.com/installation/|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
==== 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)
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 ====
[[https://docs.gitlab.com/omnibus/settings/smtp.html|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'
**[[https://docs.gitlab.com/ee/administration/troubleshooting/debug.html|debugging smtp]]**
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 [[software: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 [[https://docs.gitlab.com/ee/workflow/repository_mirroring.html|andere Repositories zu spiegeln (mirroring)]]. Es zwei Richtungen
* Pull: Entferntes Repository nach gitlab (nur mit der [[https://about.gitlab.com/pricing/gitlab-com/feature-comparison/|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 [[versionsverwaltung:git#Submodules|Submodul]] eingesetzt werden.