Dies ist eine alte Version des Dokuments!
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
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
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.