Облачное хранилище

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

Рассмотрим процесс установки и настройки веб-инструмента жизненного цикла 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

* при получении других запросов во время установки 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_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!

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

Мы должны войти в систему.

Настройка GitLab

Приведем некоторые примеры настроек, которые могут оказаться полезными.

Русский интерфейс

По умолчанию, портал устанавливается с интерфейсом на английском. Для смены языка, кликаем по иконке в правом верхнем углу и выбираем Settings:

Переходим к настройкам в GitLab

В меню слева нажимаем по Preferences:

Кликаем по пункту меню Preferences

В подразделе Localization выбираем нужный нам язык и первый день недели:

Выбираем языковые настройки для интерфейса GitLab

Сохранияем настройки и перезапускаем страницу для применения нового языка.

Создание репозитория и подключение к нему

Попробуем создать проект и подключиться к нему из Linux. Также для теста мы создадим файл и закинем его в наш репозиторий.

В веб-интерфейсе GitLab создаем новый проект:

Кликаем по кнопке Новый проект

Задаем имя проекта, оставляем или редактируем URL, выбираем уровень доступа. После кликаем по кнопке Создать проект:

Заполняем поля для создания нового проекта в GitLab

* в данном примере мы создаем проект с названием 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

Переходим на веб-страницу нашего проекта — мы должны увидеть наш файл:

В проекте на нашем GitLab появился файл, который мы закинули в репозиторий с Linux

Настройка 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!

Готово.

Спасибо Дмитрию Моск