A GitLab Community Edition (CE) önállóan üzemeltethető Git-alapú verziókezelő és CI/CD platform. Az alábbiakban a telepítés, a meglévő Apache szerver mögé illesztés és a leggyakoribb hibák megoldása szerepel.

Telepítés / frissítés adott verzióra

Csomaglista: https://packages.gitlab.com/app/gitlab/gitlab-ce

sudo apt-get install gitlab-ce=[kivant_verzio]-ce.0

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

nano /etc/apt/sources.list
# hozzáadandó:
deb https://packages.gitlab.com/gitlab/gitlab-ce/ubuntu/ xenial main
deb-src https://packages.gitlab.com/gitlab/gitlab-ce/ubuntu/ xenial main

apt-get update
apt-get install gitlab-ce
gitlab-ctl reconfigure

Megjegyzés: Cseréld az 'xenial'-t a saját Ubuntu/Debian verziódnak megfelelő kódnévre.

Alap konfiguráció (/etc/gitlab/gitlab.rb)

Forrás a portütközés megoldásához: http://stackoverflow.com/questions/33698346/gitlab-apache-ubuntu-14-04

external_url 'http://gitlab.[sajat-domain]'
nginx['listen_port'] = [egyedi_belso_port]   # pl. 8929, ütközésmentes port

git_data_dirs({
  "default" => {
    "path" => "/mnt/[gyors_tarhely]/Gitlab",
    'gitaly_address' => 'unix:/var/opt/gitlab/gitaly/gitaly.socket'
  }
})

### Advanced settings
unicorn['listen'] = '127.0.0.1'
unicorn['port'] = [egyedi_belso_port_2]
gitlab-ctl reconfigure
gitlab-ctl restart

# Élő logok követése hibakereséshez
sudo gitlab-ctl tail

Apache reverse proxy a GitLab elé

sudo a2enmod proxy_http
nano /etc/apache2/sites-available/gitlab.conf
<VirtualHost *:80>
    ServerName gitlab.[sajat-domain]
    # GitLab passthrough
    ProxyPass         / http://localhost:[egyedi_belso_port]/
    ProxyPassReverse  / http://localhost:[egyedi_belso_port]/
</VirtualHost>
a2ensite gitlab.conf
nano /etc/hosts
# tartalmazza:
127.0.0.1       localhost
127.0.1.1       localhost

reboot

Megjegyzés: Indítási szolgáltatás eltávolítása autostart-ból, ha nem szükséges: sudo systemctl disable gitlab-runsvdir.service

Alternatíva: GitLab Nginx mögé téve (Apache helyett)

Ha a szerveren Nginx fut webszerverként Apache helyett, a GitLab ugyanúgy reverse proxy mögé tehető. A GitLab beépített, csomagolt Nginx-ét ilyenkor érdemes kikapcsolni, és a rendszer saját Nginx-ét használni a proxyzáshoz — így egy helyen kezelhető az összes virtual host és az SSL is.

# /etc/gitlab/gitlab.rb — a beépített Nginx kikapcsolása,
# mert a rendszer saját Nginx-e fogja kiszolgálni a forgalmat
nginx['enable'] = false
gitlab_rails['gitlab_shell_ssh_port'] = 22

gitlab-ctl reconfigure
sudo nano /etc/nginx/sites-available/gitlab.<sajat-domain>.conf
server {
    listen 80;
    server_name gitlab.[sajat-domain];

    location / {
        proxy_pass http://localhost:[gitlab_belso_port];
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        client_max_body_size 250m;   # nagyobb git push-okhoz / fájlfeltöltésekhez
    }
}
sudo ln -s /etc/nginx/sites-available/gitlab.[sajat-domain].conf /etc/nginx/sites-enabled/
sudo nginx -t            # konfiguráció szintaktikai ellenőrzése
sudo systemctl reload nginx

Megjegyzés: A 'client_max_body_size' beállítás kulcsfontosságú GitLabnál: enélkül nagyobb git push-ok vagy fájl-feltöltések 413-as hibával elszállhatnak, mert az Nginx alapértelmezetten kis méretre korlátozza a kérés törzsét.

GitLab e-mail (SMTP) beállítása

# /etc/gitlab/gitlab.rb
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.gmail.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "[sajat_email_cim]"
gitlab_rails['smtp_password'] = "[email_jelszo_vagy_app_jelszo]"
gitlab_rails['smtp_domain'] = "smtp.gmail.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'

Megjegyzés: Gmail SMTP-hez ma már alkalmazás-jelszó (App Password) szükséges, sima fiókjelszóval nem fog működni, ha kétlépcsős azonosítás van bekapcsolva.

Rate limiting és brute-force védelem

gitlab_rails['rack_attack_git_basic_auth'] = {
  'enabled' => true,
  'ip_whitelist' => ["127.0.0.1", "[sajat_publikus_ip]"],
  'maxretry' => 10,
  'findtime' => 60,
  'bantime' => 3600
}

gitlab_rails['rack_attack_protected_paths'] = [
  '/users/password',
  '/users/sign_in',
  '/api/#{API::API.version}/session.json',
  '/api/#{API::API.version}/session',
  '/users',
  '/users/confirmation',
  '/unsubscribes/',
  '/import/github/personal_access_token'
]

gitlab_rails['rate_limit_requests_per_period'] = 60
gitlab_rails['rate_limit_period'] = 60

gitlab-ctl reconfigure

Teszt e-mail küldése konzolból

sudo gitlab-rails console
Notify.test_email('[cel_email_cim]', 'Message Subject', 'Message Body').deliver_now

Hiba: GitLab 'Forbidden' válasz

# 1. megoldás: Redis cache törlése
/opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/redis.socket
FLUSHALL

# VAGY 2. megoldás:
/opt/gitlab/bin/gitlab-rake cache:clear

Hiba: frissítés után reconfigure hibát dob (audit_events timestamp bug)

gitlab-rails dbconsole
SELECT * FROM audit_events WHERE created_at > current_timestamp;
DELETE FROM audit_events WHERE created_at > current_timestamp;
exit

GitLab Runner telepítése

Útmutató: https://docs.gitlab.com/runner/install/linux-manually.html

sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

mv /usr/local/bin/gitlab-runner /usr/bin
sudo chmod +x /usr/bin/gitlab-runner
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner install --user=gitlab-runner --working-directory=/mnt/[gyors_tarhely]/gitlab-runner
sudo gitlab-runner start
gitlab-runner register

GitLab Runner frissítése

wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
sudo chmod +x /usr/local/bin/gitlab-runner
gitlab-runner start

← Vissza: Linux