====== 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 ==== GPG-key abgelaufen ==== 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.