Рассмотрим процесс установки и настройки веб-инструмента жизненного цикла DevOps на Linux Ubuntu Server на примере версий 18.04 и 20.04. За основу взята официальная инструкция с сайта GitLab. В нашей инструкции приведен пример установки как платной. так и бесплатной версий программы.
Подготовка сервера
В качестве предварительный настроек, мы обновим список пакетов в репозиториях, настроим правильное время и откроем порты в брандмауэре.
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. Необходимые компоненты
apt install curl openssh-server ca-certificates
Для отправки уведомлений, установим также postfix:
apt install postfix
При запросе типа конфигурации, выбираем Internet Site (если уведомления должны отправляться наружу) или Local only (уведомления в пределах сервера):
* при получении других запросов во время установки postfix можно ответить по умолчанию, нажимая Enter.
2. Установка 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
Если установка выполняется на неподдерживаемую скриптом систему, например, Ubuntu новой версии (на момент обновления инструкции 22) или 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_versionFor 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!
3. Конфигурируем веб-адрес
Для запуска и корректной работы портала мы должны задать 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
* данная команда нам не нужна, если мы прописали путь до своего сертификата.
Сброс пароля root
Если мы забыли пароль для пользователя root, можно его сбросить через командную строку.
Подключаемся к консоли управления gitlab с помощью команды:
gitlab-rails console -e production
Создаем переменную, которая будет вести на ссылку с учетной записью root (идентификатор 1):
user = User.where(id: 1).first
Задаем пароль для пользователя root дважды:
user.password = ‘password123’
user.password_confirmation = ‘password123’
где password123 — созданный для пользователя root новый пароль.
Созраняем изменения для пользователя:
user.save!
Готово.
Спасибо Дмитрию Моск