Как установить GitLab на Ubuntu 22.04, шаг за шагом

Gitlab существует в версии Enterprise (Gitlab EE) и версии Community Edition (Gitlab CE). Сегодня я покажу, как шаг за шагом установить GitLab CE в Ubuntu 22.04 и произвести оптимизацию использования памяти при установке на сервера с ограниченными ресурсами CPU и памяти.

GitLab, платформа с открытым исходным кодом, предоставляет собой надежное и многофункциональное решение для управления GIT репозиториями, задачами, конвейерами CI/CD и многим другим. Если вы у вас на сервере установлена Ubuntu 22.04 и хотите настроить собственный GitLab для оптимизации рабочего процесса DevOps, эта статья для Вас.

Оглавление

  • Виртуальный или выделенный сервер под управлением Ubuntu 22.04 с доступом по SSH.
  • Статическое имя хоста (gitlab.yoursite.com)
  • Пользователь Sudo с правами администратора
  • 2 ГБ ОЗУ или больше
  • 2 виртуальных ЦП или более
  • Подключение к Интернету

Начнем с обновления списков пакетов и обновления всех существующих пакетов до последних версий.

$ sudo apt update
$ sudo apt upgrade -y

Перезагрузите систему после применения обновлений

$ sudo reboot

GitLab требует наличия некоторых зависимостей для корректной работы. Установите их с помощью следующих команд:

$ sudo apt install -y curl openssh-server ca-certificates postfix

В процессе установки postfix появится окно конфигурации. Выберите «Интернет-сайт» и введите имя хоста вашего сервера в качестве имени почтового сервера. Это позволит GitLab отправлять уведомления по электронной почте.

Для этого выбираете Internet Site и в поле System mail name: вводите адрес вашего сайта gitlab. Например: gitlab.yoursite.com и нажимаете ОК.

Теперь мы добавим репозиторий GitLab и запустим следующую команду Curl. Он автоматически определит вашу версию Ubuntu и соответствующим образом настроит репозиторий.

$ curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

Вы увидите примерно следующее:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
ca-certificates is already the newest version (20230311ubuntu0.22.04.1).
curl is already the newest version (7.81.0-1ubuntu1.15).
openssh-server is already the newest version (1:8.9p1-3ubuntu0.6).
postfix is already the newest version (3.6.4-1ubuntu1.3).
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
root@vps1707175812:~# curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
Detected operating system as Ubuntu/jammy.
Checking for curl...
Detected curl...
Checking for gpg...
Detected gpg...
Running apt-get update... done.
Installing apt-transport-https... done.
Installing /etc/apt/sources.list.d/gitlab_gitlab-ce.list...done.
Importing packagecloud gpg key... done.
Running apt-get update... done.

The repository is setup! You can now install packages.

Запустите приведенную ниже команду, чтобы автоматически установить и настроить gitlab-ce в вашей системе Ubuntu, замените имя хоста сервера в качестве настройки

$ sudo EXTERNAL_URL="http://gitlab.linuxtechi.net" apt install gitlab-ce

Как только приведенная выше команда будет выполнена успешно, мы получим вывод, подобный приведенному ниже:

Running handlers:
[2024-02-09T15:05:58+03:00] INFO: Running report handlers
Running handlers complete
[2024-02-09T15:05:58+03:00] INFO: Report handlers complete
Infra Phase complete, 3/816 resources updated in 27 seconds
gitlab Reconfigured!
Restarting previously running GitLab services
ok: run: alertmanager: (pid 25454) 1s
ok: run: gitaly: (pid 24889) 54s
ok: run: gitlab-exporter: (pid 25466) 0s
ok: run: gitlab-kas: (pid 25468) 1s
ok: run: gitlab-workhorse: (pid 25476) 0s
ok: run: logrotate: (pid 25484) 0s
ok: run: nginx: (pid 25490) 1s
ok: run: node-exporter: (pid 25496) 0s
ok: run: postgres-exporter: (pid 25501) 1s
ok: run: postgresql: (pid 24878) 57s
ok: run: prometheus: (pid 25508) 0s
ok: run: puma: (pid 25517) 1s
ok: run: redis: (pid 24893) 58s
ok: run: redis-exporter: (pid 25526) 0s
ok: run: sidekiq: (pid 25532) 0s

     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ `/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/


Upgrade complete! If your GitLab server is misbehaving try running
  sudo gitlab-ctl restart
before anything else.
If you need to roll back to the previous version you can use the database
backup made during the upgrade (scroll up for the filename).

Перезагрузим GitLab сервер

$ sudo gitlab-ctl restart

Видим, что все ок

ok: run: alertmanager: (pid 25701) 1s
ok: run: gitaly: (pid 25726) 1s
ok: run: gitlab-exporter: (pid 25789) 0s
ok: run: gitlab-kas: (pid 25803) 0s
ok: run: gitlab-workhorse: (pid 25812) 1s
ok: run: logrotate: (pid 25822) 0s
ok: run: nginx: (pid 25828) 1s
ok: run: node-exporter: (pid 25834) 0s
ok: run: postgres-exporter: (pid 25840) 0s
ok: run: postgresql: (pid 25849) 0s
ok: run: prometheus: (pid 25858) 0s
ok: run: puma: (pid 25869) 1s
ok: run: redis: (pid 25874) 0s
ok: run: redis-exporter: (pid 25881) 1s
ok: run: sidekiq: (pid 25888) 0s

GitLab был успешно установлен.

Имя пользователя для веб-интерфейса gitlab — root , а пароль хранится в « /etc/gitlab/initial_root_password » .

Если в вашей системе Ubuntu включен брандмауэр ОС, разрешите порты 80 и 443.

$ sudo ufw allow http
$ sudo ufw allow https

Установив и настроив GitLab, откройте веб-браузер и введите IP-адрес или имя хоста вашего сервера.

http://

Имя пользователя: root
Пароль: <<Получить пароль из /etc/gitlab/initial_root_password>>

Если ресурсов достаточно, то вы увидите следующее:

Вводим логин root и пароль и входим в GitLab

Если после попытки открытия GitLab вы получили такой экран, то скорее всего проблема с недостатком памяти для запуска.

В минимальных требованиях по установке GitLab написано:

CPU

CPU requirements are dependent on the number of users and expected workload. Your exact needs may be more, depending on your workload. Your workload is influenced by factors such as — but not limited to — how active your users are, how much automation you use, mirroring, and repository/change size.

The following is the recommended minimum CPU hardware guidance for a handful of example GitLab user base sizes.

  • 4 cores is the recommended minimum number of cores and supports up to 500 users

Memory

Memory requirements are dependent on the number of users and expected workload. Your exact needs may be more, depending on your workload. Your workload is influenced by factors such as — but not limited to — how active your users are, how much automation you use, mirroring, and repository/change size.

The following is the recommended minimum Memory hardware guidance for a handful of example GitLab user base sizes.

  • 4 GB RAM is the required minimum memory size and supports up to 500 users

GitLab может запуститься и при 2 CPU и 2 Gb Memory, но нужно будет произвести ряд манипуляций. Данный формат настройки для минимального количества пользователей или ознакомления с принципами настройки и работы GitLab.

Во первых виртуально увеличим память системы за счет создания swap файла «подкачки».

Перед тем как начать:

Swap не следует рассматривать как замену физической памяти. Поскольку пространство swap представляет собой раздел жесткого диска, время доступа к нему медленнее, чем к физической памяти. Если в вашей системе постоянно не хватает памяти, вам следует добавить больше оперативной памяти.

Как правило, размер swap файла подкачки зависит от объема оперативной памяти вашей системы, следуем правилу:

  • Системы с объемом оперативной памяти менее 2 ГБ — в 2 раза больше объема оперативной памяти.
  • Системы с оперативной памятью от 2 до 8 ГБ — размер соответствует объему оперативной памяти.
  • Системы с оперативной памятью более 8 ГБ — не менее 4 ГБ подкачки.

Итак, приступим:

Сначала создайте файл, который будет использоваться в качестве подкачки:

Можно использовать утилиту fallocate, если она установлена в системе:

$ sudo fallocate -l 2G /swapfile

Можно действовать вручную:

$ sudo dd if=/dev/zero of=/swapfile bs=1024 count=2097152

Установите права доступа к файлу «600«, чтобы обычные пользователи не могли писать и читать файл:

$ sudo chmod 600 /swapfile

Создайте в файле область подкачки Linux:

$ sudo mkswap /swapfile

Удачный результат выглядит примерно так:

Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=fde7d2c8-06ea-400a-9027-fd731d8ab4c8

Активируйте файл подкачки:

$ sudo swapon /swapfile

Чтобы сделать изменение постоянным, откройте файл «/etc/fstab«

$ sudo nano /etc/fstab


и вставьте следующую строку:

/swapfile swap swap defaults 0 0

Убедитесь, что обмен активен, используя команду swapon или free , как показано ниже:

$ sudo swapon --show

РЕЗУЛЬТАТ:
NAME      TYPE      SIZE  USED PRIO
/swapfile file        2G    0B   -1
$ sudo free -h

РЕЗУЛЬТАТ:
              total        used        free      shared  buff/cache   available
Mem:          981Mi        97Mi        68Mi       0.0Ki       814Mi       735Mi
Swap:         2.0Gi        10Mi       1.9Gi

Swap файл подкачки создан и активирован для использования системой.

Можно регулировать, как часто система будет использовать файл подкачки, настроив: 

/proc/sys/vm/swappiness

Обмен колеблется между 0 и 100. Значение по умолчанию 60. Меньшее значение уменьшает предпочтение Linux освобождать анонимные страницы памяти и записывать их в подкачку, но увеличивает предпочтение делать то же самое со страницами с файловой поддержкой:

Настройте его в текущем сеансе так:

$ sudo sysctl vm.swappiness=10

Измените файл «/etc/sysctl.conf«, чтобы сделать значение постоянным:

vm.swappiness=10

При необходимости swap можно удалить (демонтировать) или очистить и перемонтировать:

# Unmount swapfile.
$ swapoff /swapfile

# Memory clear and re-mount.
$ swapoff -a && swapon -a

Далее проделаем тюнинг конфигурации GitLab.

Он будет состоять из конфигурации сервисов GilLab таких как: Puma (это веб-сервер, который используется для обслуживания приложения GitLab, для связи с Rails-приложениями, многозадачности, кластеризации), Sidekiq (это фоновая обработка (background processing) для Ruby-приложений), Gitaly (сервис для работы с репозиториями Git). Все настройки производятся в единственно конфигурационном файле в соответствующих секциях:

/etc/gitlab/gitlab.rb

Оптимизация Puma

GitLab по умолчанию работает с конфигурацией, предназначенной для обработки множества одновременных подключений. Для небольших установок, не требующих высокой пропускной способности, отключите режим Puma Clustered . В результате приложение будет обслуживаться только одним процессом Puma.

puma['worker_processes'] = 0

При такой настройке Puma наблюдается снижение использования памяти на 100–400 МБ.

Оптимизация Sidekiq

Sidekiq — это демон фоновой обработки. При настройке с помощью GitLab по умолчанию он работает в режиме высокой параллельности 50. Это влияет на то, сколько памяти он может выделить в данный момент. Рекомендуется настроить его на использование значительно меньшего значения 5 или 10 (предпочтительно).

sidekiq['max_concurrency'] = 10

Оптимизация Gitaly

Gitaly — это служба хранения, которая обеспечивает эффективный доступ к репозиториям на базе Git. Рекомендуется настроить низкое значение максимальной параллельности и ограничения памяти, установленные в Gitaly.

gitaly['configuration'] = {
    concurrency: [
      {
        'rpc' => "/gitaly.SmartHTTPService/PostReceivePack",
        'max_per_repo' => 3,
      }, {
        'rpc' => "/gitaly.SSHService/SSHUploadPack",
        'max_per_repo' => 3,
      },
    ],
    cgroups: {
        repositories: {
            count: 2,
        },
        mountpoint: '/sys/fs/cgroup',
        hierarchy_root: 'gitaly',
        memory_bytes: 500000,
        cpu_shares: 512,
    },
}

gitaly['env'] = {
  'GITALY_COMMAND_SPAWN_MAX_PARALLEL' => '2'
}

Отключение мониторинга Prometheus

Prometheus — это система мониторинга и алертинга с открытым исходным кодом, которая разработана для сбора и анализа метрик в распределенных системах. Он предоставляет инструменты для сбора данных с различных компонентов системы, хранения этих данных и предоставления гибких средств запроса и визуализации метрик.

В контексте GitLab, Prometheus используется для сбора и мониторинга метрик, связанных с производительностью и состоянием системы. Он может отслеживать множество параметров, таких как использование ресурсов, количество запросов, состояние сервисов и многое другое.

prometheus_monitoring['enable'] = false

Настроим, как GitLab обрабатывает память

GitLab состоит из множества компонентов (написанных на Ruby и Go), причем GitLab Rails является самым большим и потребляет большую часть памяти.

GitLab Rails использует jemalloc в качестве распределителя памяти. Jemalloc предварительно выделяет память большими частями, которые также удерживаются в течение более длительных периодов времени, чтобы повысить производительность. Ценой некоторой потери производительности вы можете настроить GitLab так, чтобы она освобождала память сразу после того, как она больше не нужна, вместо того, чтобы удерживать ее длительное время.

gitlab_rails['env'] = {
  'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000'
}

gitaly['env'] = {
  'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000'
}

Рекомендую оставлять дефолтные значения закомментироваными и добавлять кастомные отдельным строками.

Итак, все суммарно все правки вносимые в /etc/gitlab/gitlab.rb выглядят так:

puma['worker_processes'] = 0

sidekiq['max_concurrency'] = 10

prometheus_monitoring['enable'] = false

gitlab_rails['env'] = {
  'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000'
}

gitaly['configuration'] = {
  concurrency: [
    {
      'rpc' => "/gitaly.SmartHTTPService/PostReceivePack",
      'max_per_repo' => 3,
    }, {
      'rpc' => "/gitaly.SSHService/SSHUploadPack",
      'max_per_repo' => 3,
    },
  ],
  cgroups: {
    repositories: {
      count: 2,
    },
    mountpoint: '/sys/fs/cgroup',
    hierarchy_root: 'gitaly',
    memory_bytes: 500000,
    cpu_shares: 512,
  },
}
gitaly['env'] = {
  'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000',
  'GITALY_COMMAND_SPAWN_MAX_PARALLEL' => '2'
}

После внесения всех этих изменений перенастройте GitLab с новыми настройками:

$ sudo gitlab-ctl reconfigure

Посмотрим на результат оптимизации использования памяти:

              total        used        free      shared  buff/cache   available
Mem:          1.9Gi       1.7Gi       151Mi        31Mi       132Mi       102Mi
Swap:         1.0Gi       153Mi       870Mi

После перезагрузки GitLab подождите еще пару минут и все процессы оптимизируются.

Теперь 502 ошибка при запуске GitLab на конфигурации 2 CPU и 2Gb RAM должна уйти и вы можете использовать GitLab.

Так же информацию о использовании ресурсов можно увидеть в Мониторинге и Информации о системе:

Дополнительная оптимизация мониторинга

GitLab использует внутренние структуры данных для измерения различных аспектов себя. Эти функции больше не нужны, если мониторинг отключен.

Чтобы отключить эти функции, вам нужно перейти в область администрирования GitLab и отключить функцию Prometheus Metrics:

  1. На левой боковой панели внизу выберите «Область администратора» .
  2. Выберите «Настройки» > «Метрики и профилирование» .
  3. Разверните Метрики — Прометей .
  4. Снимите галку Включить метрики Prometheus .
  5. Выберите Сохранить изменения.

Похожие записи