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

Обновлено Обновлено: Опубликовано Опубликовано:

Используемые термины: GitLabUbuntu.

Рассмотрим процесс установки и настройки веб-инструмента жизненного цикла DevOps на Linux Ubuntu Server на примере версий 20.04, 22.04 и 24.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. Установка 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

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

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

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

Отправка почты

Для Gitlab очень важно иметь возможность корректно отправлять почту, так как посредством почтовых рассылок отправляются приглашения новым пользователям.

Мы рассмотрим 2 варианта — использование локального транспортного агента (MTA) на базе Postfix и отправку через сторонний сервер почты.

1. Используем локальный Postfix

Устанавливаем MTA командой:

apt install postfix

При запросе типа конфигурации, выбираем Internet Site (если уведомления должны отправляться наружу) или Local only (уведомления в пределах сервера):

Выбираем тип конфигурации для Postfix

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

# DevOps # Ubuntu # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет