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.
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
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
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 -
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
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
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
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.
/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
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.