Установка веб-инструмента GitLab на Rocky


Используемые термины: GitLab, CentOS, Rocky Linux.
Рассмотрим процесс установки и настройки веб-инструмента жизненного цикла DevOps на Linux CentOS/Rocky на примере версий 8 и 9. За основу взята официальная инструкция с сайта GitLab. В нашей инструкции приведен пример установки как платной. так и бесплатной версий программы.
Подготовка системы
Настройка времени
Порты в брандмауэре
Зависимые компоненты
Установка
GitLab
Настройка
Вход на портал
Настройка GitLab
Создание проекта и отправка на него файла из Linux
Использование https
Отправка уведомлений по почте
Сброс пароля для пользователя root
Подготовка сервера
В качестве предварительный настроек, мы обновим список пакетов в репозиториях, настроим правильное время и откроем порты в брандмауэре.
1. Время
Установим часовой пояс:
timedatectl set-timezone Europe/Moscow
* данная команда задаст настройки для московского времени. Все файлы с временными зонами находятся в каталоге /usr/share/zoneinfo.
Для автоматической синхронизации времени ставим пакет:
yum install chrony
Разрешаем автозапуск сервиса и стартуем его:
systemctl enable chronyd --now
2. Настройка брандмауэра
Нам нужно добавить порты 80 и 443.
firewall-cmd --permanent --add-service=http{,s}
Применяем настройки:
firewall-cmd --reload
3. Необходимые компоненты
Для работы
dnf install curl policycoreutils
* где:
- curl — утилита для отправки запросов по http. В нашем случае нужна для загрузки файлов.
- policycoreutils — набор утилит для работы с подситемами безопасности, в частности, SELinux.
Для отправки уведомлений, установим также postfix:
dnf install postfix
Установка GitLab
1. Установка и настройка сервиса
Установим репозиторий.
а) для бесплатной:
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
б) для платной версии:
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
После установки репозитория, устанавливаем сам GitLab.
а) бесплатную:
dnf install gitlab-ce
б) платную версию:
dnf install gitlab-ee
Если установка прошла успешно, мы должны увидеть:
It looks like GitLab has not been configured yet; skipping the upgrade script.
*. *.
*** ***
***** *****
.****** *******
******** ********
,,,,,,,,,***********,,,,,,,,,
,,,,,,,,,,,*********,,,,,,,,,,,
.,,,,,,,,,,,*******,,,,,,,,,,,,
,,,,,,,,,*****,,,,,,,,,.
,,,,,,,****,,,,,,
.,,,***,,,,
,*,.
_______ __ __ __
/ ____(_) /_/ / ____ _/ /_
/ / __/ / __/ / / __ `/ __ \
/ /_/ / / /_/ /___/ /_/ / /_/ /
\____/_/\__/_____/\__,_/_.___/
Thank you for installing GitLab!
2. Конфигурируем веб-адрес
Для запуска и корректной работы портала мы должны задать external_url. Для этого открываем файл:
vi /etc/gitlab/gitlab.rb
Нам нужно только изменить параметр external_url:
external_url 'http://gitlab.dmosk.ru'
* данная настройка говорит, что наш веб-инструмент будет отвечать на запросы, которые пришли на узел gitlab.dmosk.ru — это значит, что данное имя должно быть зарегистрирована в DNS или прописано в локальный файл hosts.
Выполняем конфигурирование:
gitlab-ctl reconfigure
Данная операция займет какое-то время.
Вход в веб-интерфейс
Открываем браузер и вводим наш адрес, который мы указали в настройках в опции external_url — в данном примере, http://gitlab.dmosk.ru. Мы должны увидеть страницу авторизации, на которой нас запросят пароль для администратора.
Посмотреть пароль, который был назначен пользователю после установки можно в файле /etc/gitlab/initial_root_password:
cat /etc/gitlab/initial_root_password | grep Password:
Вводим в качестве пользователя root и пароль, который посмотрели в файле:
После система попросит ввести логин и пароль — вводим логин root и пароль, который только-что придумали.
Настройка GitLab
Приведем некоторые примеры настроек, которые могут оказаться полезными.
Русский интерфейс
По умолчанию, портал устанавливается с интерфейсом на английском. Для смены языка, кликаем по иконке в правом верхнем углу и выбираем Settings:
В меню слева нажимаем по Preferences:
В подразделе Localization выбираем нужный нам язык и первый день недели:
Сохранияем настройки и перезапускаем страницу для применения нового языка.
Создание репозитория и подключение к нему
Попробуем создать проект и подключиться к нему из Linux. Также для теста мы создадим файл и закинем его в наш репозиторий.
В веб-интерфейсе GitLab создаем новый проект:
Задаем имя проекта, оставляем или редактируем URL, выбираем уровень доступа. После кликаем по кнопке Создать проект:
* в данном примере мы создаем проект с названием Test, url до него будет http://gitlab.dmosk.ru/root/test. Уровень доступа мы задаем «Приватный» — доступ к репозиторию будет только у авторизованного пользователя.
Для примера попробуем подключиться с компьютера Linux к нашему репозиторию и закинуть на него тестовый файл.
Для начала установим git на компьютер с Linux:
а) Если используем CentOS / Red Hat:
yum install git-core
б) Если используем Ubuntu / Debian:
apt-get install git
Создаем папку для тестового проекта:
mkdir -p /projects/test
Переходим в нее:
cd /projects/test
Создаем репозиторий:
git init
Создаем файл:
vi testfile.txt
Добавляем в него все файлы (то есть, наш единственный файл):
git add .
Делаем коммит:
git commit -m "Очередное изменение проекта" -a
Подключаемся к созданному репозиторию:
git remote add origin http://gitlab.dmosk.ru/root/test.git
Заливаем в него закоммиченный файл:
git push origin master
Переходим на веб-страницу нашего проекта — мы должны увидеть наш файл:
Настройка SSL
В данном примере мы сконфигурируем наш сервер для возможности работы по https и получения сертификата от Let's Encrypt. Все настройки выполняются в конфигурационном файле:
vi /etc/gitlab/gitlab.rb
Меняем настройку:
external_url 'http://gitlab.dmosk.ru'
* где gitlab.dmosk.ru — url для нашего портала, который мы задали при первом конфигурировании.
на:
external_url 'https://gitlab.dmosk.ru'
* мы просто добавили s к http.
Также настраиваем получение сертификата от Let's Encrypt:
letsencrypt['enable'] = true
И задаем опции для автоматического обновления сертификата:
letsencrypt['auto_renew'] = true
letsencrypt['auto_renew_hour'] = "22"
letsencrypt['auto_renew_minute'] = "50"
letsencrypt['auto_renew_day_of_month'] = "*/7"
* где:
- auto_renew — разрешает автоматическое обновление.
- auto_renew_hour — время в часах, когда нужно запускать задание на обновление сертификата.
- auto_renew_minute — время в минутах, когда нужно запускать задание на обновление сертификата.
- auto_renew_day_of_month — день месяца. В данном примере, раз в 7 дней.
Применяем новую конфигурацию:
gitlab-ctl reconfigure
В процессе переконфигурирования мы можем получить ошибку получения сертификата. Пробуем запустить команду:
gitlab-ctl renew-le-certs
Отправка почты
Для Gitlab очень важно иметь возможность корректно отправлять почту, так как посредством почтовых рассылок отправляются приглашения новым пользователям.
Мы рассмотрим 2 варианта — использование локального транспортного агента (MTA) на базе Postfix и отправку через сторонний сервер почты.
1. Используем локальный Postfix
Устанавливаем MTA командой:
dnf install postfix
Открываем конфигурационный файл нашего mta:
vi /etc/postfix/main.cf
Находим не закомментированную строку:
inet_interfaces = localhost
* значение для inet_interfaces может быть не только localhost.
... и меняем ее значение на:
inet_interfaces = all
Также находим:
inet_protocols = all
И меняем на:
inet_protocols = ipv4
* однако, если мы используем IPv6, то менять значение не нужно.
Указываем серверу передавать сообщения по зашифрованному каналу:
smtp_use_tls = yes
После внесения настроек перезапускаем postfix для их применения:
systemctl restart postfix
2. Сторонний почтовый сервер
Мы можем использовать выделенный почтовый сервер для отправки почты. Для настройки открываем конфигурационный файл:
vi /etc/gitlab/gitlab.rb
Находим группу настроек, начинающихся на smtp_ и задаем из нужные значения, например:
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "relay.dmosk.localnet"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "gitlab@dmosk.ru"
gitlab_rails['smtp_password'] = "gitlab_dmosk_password"
gitlab_rails['smtp_authentication'] = "plain"
gitlab_rails['smtp_ssl'] = true
gitlab_rails['smtp_force_ssl'] = true
* где:
- smtp_enable — разрешить или запретить использование внешнего SMTP-сервера.
- smtp_address — адреса почтового сервера для переслки сообщений.
- smtp_port — порт, на котором слушает служба smtp.
- smtp_user_name — учетная запись пользователя для авторизации.
- smtp_password — пароль для учетной записи.
- smtp_authentication — метод аутентификации.
- smtp_ssl — для подключения к почтовому релею использовать шифрованный SSL канал.
Чуть ниже настраиваем параметры обратного адреса и строки отправителя:
gitlab_rails['gitlab_email_from'] = 'gitlab@dmosk.ru'
gitlab_rails['gitlab_email_display_name'] = 'Dmosk Gitlab'
Для применения настроек вводим:
gitlab-ctl reconfigure
Сброс пароля root
Если мы забыли пароль для пользователя root, можно его сбросить через командную строку.
Подключаемся к консоли управления gitlab с помощью команды:
gitlab-rails console -e production
Создаем переменную, которая будет вести на ссылку с учетной записью root (идентификатор 1):
user = User.where(id: 1).first
Найти идентификатор для определенного пользователя можно командой:
User.find_by(username: 'dmosk')
* где dmosk — логин пользователя, для которого мы найдем идентификатор.
Задаем пароль для пользователя root дважды:
user.password = 'password123'
user.password_confirmation = 'password123'
где password123 — созданный для пользователя root новый пароль.
Созраняем изменения для пользователя:
user.save!
Готово.