Установка и базовая настройка GitLab в CentOS, Debian и Ubuntu Linux

GitLab CE (Community Edition) — это система управления репозиториями Git и совместной разработки проектов с открытым исходным кодом. В статье мы рассмотрим как установить Gitlab на сервер с ОС Debian, Ubuntu или CentOS.

Системные требования

Рекомендуется использовать не менее 8 ГБ оперативной памяти и процессор не менее 2-ух ядер. Более подробно о системных требованиях можно прочитать в документации GitLab.

GitLab может быть установлен в следующих дистрибутивах Linux:

  • Ubuntu;
  • Debian;
  • CentOS;
  • openSUSE;
  • Red Hat Enterprise Linux (CentOS);
  • Scientific Linux (CentOS);
  • Oracle Linux (CentOS).

После установки операционной системы подключитесь к ней по SSH для выполнения действий на сервере, где будет работать GitLab CE.

Установка сервера Nginx с сертификатом Let’s Encrypt

Мы будем использовать установку GitLab CE, которая работает за сервером Nginx, который будет выполнять обратное проксирование и осуществлять обработку SSL-трафика. Для настройки базового сервера воспользуйтесь руководством из списка ниже, подходящим для вашей операционной системы.

Настройка балансирующего прокси Nginx с сертификатом Let’s Encrypt в CentOS 7.

Настройка балансирующего прокси Nginx с сертификатом Let’s Encrypt в Debian 9 Stretch.

Настройка балансирующего прокси Nginx с сертификатом Let’s Encrypt в Ubuntu 18.04 Bionic

На данный момент у вас должен быть развернут сервер с Nginx и сертификатом Let’s Encrypt. Теперь установим GitLab CE.

Подготовка к установке GitLab

Обновите индекс пакетов командой:

Debian/Ubuntu

apt-get update

CentOS

yum update

Выполните установку дополнительных компонентов:

Debian/Ubuntu

apt-get install ca-certificates curl postfix 

CentOS

yum install curl policycoreutils postfix

Во время установки будет открыто диалоговое окно для настройки MTA Postfix (почтового сервера). Выберите пункт «Интернет-сайт».

В следующем окне введите реально существующее доменное имя. Доменное имя будет использоваться для отправки с него писем.

Вы можете ввести IP адрес сервера вместо доменного имени, но в таком случае доставка писем на внешние почтовые серверы не гарантируется.

Установка GitLab CE

Процесс установки занимает не так много времени. Воспользуйтесь скриптом для подготовки рабочей среды под GitLab. Будут установлены дополнительные программы и настроено подключение к репозиторию GitLab CE.

Выполните следующую команду для скачивания и выполнения скрипта:

Debian/Ubuntu

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

CentOS

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

Ознакомиться с кодом скрипта можно по ссылке https://packages.gitlab.com/gitlab/gitlab-ce/install

Для установки самого GitLab CE введите команду:

Debian/Ubuntu

apt-get install gitlab-ce

Centos

yum install gitlab-ce

Через некоторое время вы должны получить сообщение о том, что установка завершена:

Перед началом работы с веб-интерфейсом GitLab CE требуется отредактировать конфигурационный файл GitLab. Откройте конфигурационный файл в текстовом редакторе:

nano /etc/gitlab/gitlab.rb

Найдите строку, которая содержит указание на используемое доменное имя:

external_url 'http://example.com'

Укажите своё доменное имя и протокол:

# (пример)
external_url 'http://website.com'

Измените следующие строки:

nginx['enable'] = false # выключение встроенного nginx
web_server['external_users'] = ['www-data'] # пользователь, от имени которого работает веб-сервер
gitlab_rails['trusted_proxies'] = [ '127.0.0.1', '<внешний IP адрес сервера>' ] # параметр для определения IP адресов проксируемого сервера

gitlab_workhorse['listen_network'] = "unix" # протокол для работы с веб-сервером
gitlab_workhorse['listen_addr'] = "/var/opt/gitlab/gitlab-workhorse/socket" # интерфейс и порт для прослушивания

В CentOS в строке web_server['external_users'] = ['www-data'] вместо значения www-data используйте nginx

Сохраните и закройте файл. Примените изменения командой реконфигурации GitLab:

gitlab-ctl reconfigure

Мы столкнулись с проблемой в Debian 10, во время выполнения данной команды. В процессе исполнения сборки должна работать команда sysctl , но она не работала. В директории /bin/ не было sysctl . Решение оказалось простым, нужно создать симлинк командой:

ln -s /usr/sbin/sysctl /bin/sysctl 

После этого запустите команду сборки GitLab повторно.

Настройка Nginx

Откройте ваш конфигурационный файл

CentOS
nano /etc/nginx/conf.d/${WEBSITE_NAME}.conf

Debian/Ubuntu
nano /etc/nginx/sites-available/$WEBSITE_NAME

Вместо WEBSITE_NAME напишите ваше доменное имя, если ранее вы не задавали команду export WEBSITE_NAME=mycooldomain.com или export WEBSITE_NAME=$(hostname —fqdn)

Код вашего файла должен соответствовать следующему:

# переадресация с HTTP на HTTPS
#
server {
    if ($host = website.com) {
        return 301 https://$host$request_uri;
    }
    
    listen 80;
    listen [::]:80;
    server_name website.com;
}
# upstream-серверы для балансировки
#
upstream dirlist {
        ip_hash; # липкая балансировка по IP-клиента
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
}
# обработка SSL и соединение с upstream-серверами
#
server {
  listen 443 ssl;
  listen [::]:443 ssl;
  server_name website.com;
  ssl_certificate /etc/letsencrypt/live/website.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/website.com/privkey.pem;
  access_log /var/log/nginx/website_access.log;
  error_log /var/log/nginx/website_error.log;
 
  # все запросы отправляем на upstream
  location / {
    proxy_pass http://dirlist/;
  }
}

Вместо домена website.com должно быть указано ваше настоящее доменное имя. В инструкциях про установку LEMP была указана команда для осуществления замены website.com на ваше доменное имя

Добавьте в конфигурационный файл следующие строки:

upstream gitlab-workhorse {
   server unix:/var/opt/gitlab/gitlab-workhorse/socket fail_timeout=0;
}

вместо

upstream dirlist {
        ip_hash; # липкая балансировка по IP-клиента
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
}

Измените блок location /, чтобы он выглядел как указано ниже:

location / {
     client_max_body_size 0;
     gzip off;

     proxy_read_timeout      300;
     proxy_connect_timeout   300;
     proxy_redirect          off;

     proxy_http_version 1.1;

     proxy_set_header    Host                $http_host;
     proxy_set_header    X-Real-IP           $remote_addr;
     proxy_set_header    X-Forwarded-Ssl     on;
     proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
     proxy_set_header    X-Forwarded-Proto   $scheme;
     proxy_pass http://gitlab-workhorse;
}

Добавьте строку в двух блоках (с 80-ым портом и с 443-им)

server_tokens off;

После

server_name website.com;

Замените строку

root /var/www/website.com;

На следующую

root /opt/gitlab/embedded/service/gitlab-rails/public;

Добавьте следующие строки:

ssl on;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;

Перед строками

ssl_certificate /etc/letsencrypt/live/website.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/website.com/privkey.pem; # managed by Certbot

В итоге код в конфигурационном файле должен быть таким:

server {
    if ($host = website.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
    listen 80;
    listen [::]:80;
    server_name website.com;
    server_tokens off;
}

upstream gitlab-workhorse {
    server unix:/var/opt/gitlab/gitlab-workhorse/socket fail_timeout=0;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name website.com;
    server_tokens off;
    root /opt/gitlab/embedded/service/gitlab-rails/public;

    ssl on;
    ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;

    ssl_certificate /etc/letsencrypt/live/website.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/website.com/privkey.pem; # managed by Certbot


    location / {
       client_max_body_size 0;
       gzip off;

       proxy_read_timeout      300;
       proxy_connect_timeout   300;
       proxy_redirect          off;

       proxy_http_version 1.1;

       proxy_set_header    Host                $http_host;
       proxy_set_header    X-Real-IP           $remote_addr;
       proxy_set_header    X-Forwarded-Ssl     on;
       proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
       proxy_set_header    X-Forwarded-Proto   $scheme;
       proxy_pass http://gitlab-workhorse;
  }

}

Сохраните файл и перезагрузите nginx командой service nginx restart или systemctl restart nginx.service.

Настройка GitLab через веб-интерфейс

Введите в адресной строке браузера свой адрес:

https://website.com

На главной странице введите пароль для учетной записи администратора в поля «New Password» , «Confirm new password» и нажмите на кнопку «Change your password».

Введите логин root, свой пароль и нажмите на кнопку «Sign in»

Настройка профиля

После авторизации нажмите на профиль левой кнопкой мыши в правом верхнем углу и нажмите на пункт «Profile».

Нажмите на кнопку «Edit profile» справа вверху.

Введите ваши данные (email, контакты, имя пользователя, аватар) и нажмите на кнопку «Update profile settings» , чтобы сохранить данные.

Изменение логина

Нажмите слева на ссылку «Account» .

Измените имя вашего аккаунта (логин) на любое другое (по желанию) и нажмите на кнопку «Update username».

Ограничение или блокировка открытой регистрации

На данный момент любой человек может зарегистрироваться в вашем проекте и участвовать в разработке. Вы можете ограничить доступ к проекту или отключить регистрацию совсем.

Нажмите на значок гаечного ключа сверху.

В разделе администратора нажмите на ссылку «Settings» слева

Вас могут заинтересовать следующие категории

В разделе «Sign-up restrictions» уберите отметку с пункта «Sign-up enabled» и сохраните изменения, чтобы убрать возможность регистрации.

Ограничение регистрации по домену

GitLab поддерживает ограничение по домену почты. Установите отметку в пункте » Send confirmation email on sign-up», введите доверенный домен в поле «Whitelisted domains for sign-ups» и нажмите на кнопку «Save changes», чтобы сохранить изменения.

Можно указать один домен или домен вместе с алиасами (субдоменами) : *.domain.ru (как на картинке)

Лимиты по созданию проектов (ограничение)

По умолчанию в GitLab любой пользователь может создать 100000 проектов. Откройте раздел «Account and limit» и измените значение в строке «Default projects limit» на 0 , нажмите на кнопку «Save changes». Значение «0» необходимо, когда нужно запретить пользователям создание проектов.

Добавление SSH ключа

Для работы с Git и GitLab можно указать публичный SSH ключ, чтобы не приходилось каждый раз вводить пароль вашей учетной записи.

Введите команду (если у вас уже существует ключ):

cat ~/.ssh/id_rsa.pub

Команда вернет следующий результат:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5onOVtATUjVkqk91lq+v0g5TzOZTMBp4avWLEZO/97jQa1PL7y4zx4iOmUDOdlux/gC+QSW0knti/yJrtzPJibDOedRJ9KkPPGpyD1JPqRGiy3eEY2gs755McfopX6U99aYjUVBgtcfX5AXp1+5Dd9jJEFhhEDDD/WEVfYERP1ZjybaRWy6vykkPa5W2YloXRIJq/kJk9ubtd5iGnRJfDZrkza2Q97ruNGWbeEty4rgDVNwb/Znz84qt9DzzI9rvlZTfB/9EApmB0Y7eu6vR3AG5T3gBZIAYGdurdqbIj/dI8nUduE9AImzlGxeACKs0iOi/037u5gvB gitlab@netpoint-dc.ml

Это пример ключа. У вас будут свои данные

Скопируйте публичный ключ полностью, перейдите в настройки профиля и нажмите на ссылку «SSH Keys» слева. Вставьте ключ в большое поле и напишите его название в поле Title. Для сохранения (добавления) ключа нажмите на кнопку «Add key».

Если публичного ключа у вас нет, вы получите примерно следующий ответ от команды:

 cat: /home/gitlab/.ssh/id_rsa.pub:  No such file or directory 

Для генерации связки приватного и публичного ключа введите команду:

ssh-keygen -t rsa

У вас должно получиться примерно следующее:

На все вопросы в процессе генерации можно нажимать клавишу «Enter» или ввести подходящую вам директорию.

Снова введите команду для просмотра содержимого публичного ключа

cat ~/.ssh/id_rsa.pub

Скопируйте ключ и введите его в свойствах профиля.