Установка веб-инструмента GitLab на Linux Ubuntu Server
Используемые термины: GitLab, Ubuntu.
Рассмотрим процесс установки и настройки веб-инструмента жизненного цикла DevOps на Linux Ubuntu Server на примере версий 20.04, 22.04 и 24.04. За основу взята официальная инструкция с сайта GitLab. В нашей инструкции приведен пример установки как платной. так и бесплатной версий программы.
Подготовка системы
Обновление пакетов
Настройка времени
Порты в брандмауэре
Установка
GitLab
Настройка
Вход на портал
Настройка GitLab
Создание проекта и отправка на него файла из Linux
Использование https
Настройка отправки электронной почты
Сброс пароля для пользователя root
Подготовка сервера
В качестве предварительный настроек, мы обновим список пакетов в репозиториях, настроим правильное время и откроем порты в брандмауэре.
1. Обновление списков пакетов
Выполняем команду:
apt update
При желании обновить установленные пакеты, также можно выполнить:
apt upgrade
2. Время
Установим часовой пояс:
timedatectl set-timezone Europe/Moscow
* данная команда задаст настройки для московского времени. Все файлы с временными зонами находятся в каталоге /usr/share/zoneinfo.
Для автоматической синхронизации времени ставим пакет:
apt install chrony
И разрешаем автозапуск сервиса:
systemctl enable chrony
3. Настройка брандмауэра
По умолчанию, в Ubuntu брандмауэр настроен на то, чтобы принимать любые пакеты. Но если у нас он настроен на блокировку, нужно добавить порты 80 и 443.
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
И чтобы сохранить правила, устанавливаем iptables-persistent:
apt install iptables-persistent
... и выполняем команду:
netfilter-persistent save
Установка GitLab
Установку выполним в два шага — установка необходимых компонентов и GitLab, второй — настройка гита.
1. Установка GitLab
Устанавливаем пакеты:
apt install curl openssh-server ca-certificates
Перед установкой GitLab, необходимо настроить репозиторий.
а) для платной версии:
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
б) для бесплатной:
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
Если установка выполняется на неподдерживаемую скриптом систему, например, Astra Linux, мы увидим сообщение об ошибке:
Unfortunately, your operating system distribution and version are not supported by this script.
You can override the OS detection by setting os= and dist= prior to running this script.
You can find a list of supported OSes and distributions on our website: https://packages.gitlab.com/docs#os_distro_version
For example, to force Ubuntu Trusty: os=ubuntu dist=trusty ./script.sh
Please email support@packagecloud.io and let us know if you run into any issues.Тогда скачиваем скрипт настройки репозитория:
wget https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh
* платная.
wget https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
* бесплатная.
После открываем скачанный файл:
vi script.deb.sh
Находим строки:
# remove whitespace from OS and dist name
os="${os// /}"
dist="${dist// /}"И задаем значения для os и dist:
os="ubuntu"
dist="focal"* в нашем примере предполагается, что наша система подобна системе Ubuntu 20.04 (Focal Fossa).
Запускаем скрипт:
bash ./script.deb.sh
После установки репозитория, переходим к установке GitLab.
а) платную версию:
apt install gitlab-ee
б) бесплатную:
apt install gitlab-ce
Если установка прошла успешно, мы должны увидеть:
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 и пароль, который посмотрели в файле:
Мы должны войти в систему.
Настройка 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 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
Также задаем:
nginx['redirect_http_to_https'] = true
* опция нужна, чтобы автоматически перебрасывать запросы с http на https.
И задаем опции для автоматического обновления сертификата:
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 дней.
Если же у нас есть купленный сертификат, то мы не трогаем опции letsencrypt.
Нам нужно раскомментировать данные опции:
nginx['ssl_certificate'] = "/etc/gitlab/ssl/#{node['fqdn']}.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/#{node['fqdn']}.key"* обратите внимание, что подразумевается наличие файла с доменом+расширение в каталоге /etc/gitlab/ssl. Можно оставить как есть или прописать свой путь.
Указанного каталога нет — создаем его командой:
mkdir -p /etc/gitlab/ssl/
Применяем новую конфигурацию:
gitlab-ctl reconfigure
В процессе переконфигурирования мы можем получить ошибку получения сертификата. Пробуем запустить команду:
gitlab-ctl renew-le-certs
* данная команда нам не нужна, если мы прописали путь до своего сертификата.
Отправка почты
Для Gitlab очень важно иметь возможность корректно отправлять почту, так как посредством почтовых рассылок отправляются приглашения новым пользователям.
Мы рассмотрим 2 варианта — использование локального транспортного агента (MTA) на базе Postfix и отправку через сторонний сервер почты.
1. Используем локальный Postfix
Устанавливаем MTA командой:
apt install postfix
При запросе типа конфигурации, выбираем Internet Site (если уведомления должны отправляться наружу) или Local only (уведомления в пределах сервера):
* при получении других запросов во время установки postfix можно ответить по умолчанию, нажимая Enter.
2. Сторонний почтовый сервер
Мы можем использовать выделенный почтовый сервер для отправки почты. Для настройки открываем конфигурационный файл:
vi /etc/gitlab/gitlab.rb
Находим группу настроек, начинающихся на smtp_ и задаем из нужные значения, например:
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "relay.dmosk.localnet"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "gitlab@dmosk.ru"
gitlab_rails['smtp_password'] = "gitlab_dmosk_password"
gitlab_rails['smtp_authentication'] = "login"
* где:
- smtp_enable — разрешить или запретить использование внешнего SMTP-сервера.
- smtp_address — адреса почтового сервера для переслки сообщений.
- smtp_port — порт, на котором слушает служба smtp.
- smtp_user_name — учетная запись пользователя для авторизации.
- smtp_password — пароль для учетной записи.
- smtp_authentication — метод аутентификации.
Чуть ниже настраиваем параметры обратного адреса и строки отправителя:
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!
Готово. Для выхода из командной консоли вводим:
> quit