пятница, 25 сентября 2020 г.

Установка и настройка GitLab Community Edition с авторизацией пользователей в ActiveDirectory

В данной заметке будет описан процесс установки GitLab Community Edition на CentOS 8 и настройки его для авторизации пользователей в Active Directory. Мануалов по установке и настройке GitLab множество, просто запишу все необходимые этапы в одном месте.

Добавим репозиторий Gitlab и установим его.
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash
yum install -y gitlab-ce
Для того, чтобы корректно создавались и работали ссылки, нужно указать FQDN-адрес сервера в файле /etc/gitlab/gitlab.rb
external_url 'http://gitlab.oldfag.ru'
Для применения параметров нужно выполнить команду
gitlab-ctl reconfigure
Чтобы разрешить доступ к сервису снаружи нужно добавить правила для firewalld
firewall-cmd --permanent --add-service={http,https}
firewall-cmd --reload
Переходим к настройке авторизации.

Для начала отключим самостоятельную регистрацию пользователей. Для этого нужно открыть веб-интерфейс и перейти во вкладку Admin Area (гаечный ключ) > Settings > General, нажать на кнопку Expand рядом c пунктом Sign-up restrictions и убрать галку Sign-up enabled, после чего сохранить изменения.

Теперь добавим авторизацию пользователей в Active Directory. Доступ к нашему серверу будут иметь только члены группы Пользователи GitLab.
Приведём соостветствующую секцию файла /etc/gitlab/gitlab.rb к следующему виду:
### LDAP Settings
###! Docs: https://docs.gitlab.com/omnibus/settings/ldap.html
###! **Be careful not to break the indentation in the ldap_servers block. It is
###!   in yaml format and the spaces must be retained. Using tabs will not work.**

gitlab_rails['ldap_enabled'] = true
gitlab_rails['prevent_ldap_sign_in'] = false

###! **remember to close this block with 'EOS' below**
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
  main: # 'main' is the GitLab 'provider ID' of this LDAP server
    label: 'LDAP'
    host: 'oldfag.ru'
    port: 389
    uid: 'sAMAccountName'
    bind_dn: 'CN=ldap_sync,CN=Users,DC=oldfag,DC=ru'
    password: 'userpassword'
    encryption: 'plain'
    verify_certificates: true
    smartcard_auth: false
    active_directory: true
    allow_username_or_email_login: false
    lowercase_usernames: false
    block_auto_created_users: false
    base: 'DC=oldfag,DC=ru'
    user_filter: '(memberof=CN=Пользователи GitLab,CN=Users,DC=oldfag,DC=ru)'
EOS
Применим настройки, выполнив команду
gitlab-ctl reconfigure
Для проверки корректности работы механизма аутентификации можно выполнить команду
gitlab-rake gitlab:ldap:check
Если все параметры указаны верно, то овтет будет следующим:
Checking LDAP ...

LDAP: ... Server: ldapmain
LDAP authentication... Success
LDAP users with access to your GitLab server (only showing the first 100 results)

Checking LDAP ... Finished
Для того, чтобы избежать сообщений браузера о том, что соединение не защищено, добавим использование SSL-сертификатов.
Создадим папку, в которой будет храниться сертификат и его закрытый ключ
mkdir /etc/gitlab/ssl
в которую и поместим соответствующие файлы. Выпустить сертификаты можно с помощью certbot и Let's Encrypt. И опять вернёмся к редактированию файла /etc/gitlab/gitlab.rb, приведя соответствующую его секцию к следующему виду:
################################################################################
## GitLab NGINX
##! Docs: https://docs.gitlab.com/omnibus/settings/nginx.html
################################################################################
nginx['enable'] = true
nginx['client_max_body_size'] = '250m'
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/cert.pem"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/privkey.pem"
nginx['ssl_protocols'] = "TLSv1.2 TLSv1.3"
Так же в этом файле нужно изменить строку
external_url 'http://gitlab.oldfag.ru'
на
external_url 'https://gitlab.oldfag.ru'
Применим настройки
gitlab-ctl reconfigure
Для отправки уведомлений пользователям по электронной почте нужно опять вернуться к редактированию файла /etc/gitlab/gitlab.rb и привести его соответствующую секцию к виду:
**********
SMTP
**********
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "mail.oldfag.ru"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "gituser"
gitlab_rails['smtp_password'] = "gituserpassword"
gitlab_rails['smtp_domain'] = "oldfag.ru"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_reply_to'] = 'gituser@oldfag.ru'
gitlab_rails['gitlab_email_from'] = 'gituser@oldfag.ru'
После завершения редактирования не забываем применить настройки
gitlab-ctl reconfigure
Проверить исправность работы сервиса отправки сообщений можно из консоли GitLab. Запустить консоль можно командой
gitlab-rails console
отправить тестовое письмо можно командой
Notify.test_email('youremail@yourdomain.ru', 'Message Subject', 'Message Body').deliver_now
Последнее, что хочется добавить, это то, что для обновления с одной мажорной версии на другую необходимо сначала установить последнюю доступную минорную версию предыдущего релиза, а потом уже установить актуальную версию. Т.е. если установлена версия 12.9.0-ce.0.el8, то для обновления до версии 13.0.3-ce.0.el8 нужно сначала установить версию 12.10.8-ce.0.el8, а после этого уже установить 13.0.3-ce.0.el8. Список всех досутпных версий пакета можно командой
yum --showduplicates list 'gitlab-ce'
Очень подробная справка по GitLab находится на странице проекта.

1 комментарий: