Как установить 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, эта статья для Вас.
- Минимальные системные требования
- Обновите системные пакеты
- Установите зависимости
- Добавьте репозиторий Apt GitLab
- Установите Gitlab на Ubuntu 22.04
- Доступ к веб-интерфейсу GitLab
- Оптимизация памяти. Запускаем GitLab на минималках
- Безопасный веб-интерфейс GitLab
Минимальные системные требования
- Виртуальный или выделенный сервер под управлением Ubuntu 22.04 с доступом по SSH.
- Статическое имя хоста (gitlab.yoursite.com)
- Пользователь Sudo с правами администратора
- 2 ГБ ОЗУ или больше
- 2 виртуальных ЦП или более
- Подключение к Интернету
1) Обновите системные пакеты
Начнем с обновления списков пакетов и обновления всех существующих пакетов до последних версий.
$ sudo apt update
$ sudo apt upgrade -y
Перезагрузите систему после применения обновлений
$ sudo reboot
2) Установите зависимости
GitLab требует наличия некоторых зависимостей для корректной работы. Установите их с помощью следующих команд:
$ sudo apt install -y curl openssh-server ca-certificates postfix
В процессе установки postfix появится окно конфигурации. Выберите «Интернет-сайт» и введите имя хоста вашего сервера в качестве имени почтового сервера. Это позволит GitLab отправлять уведомления по электронной почте.
Для этого выбираете Internet Site и в поле System mail name: вводите адрес вашего сайта gitlab. Например: gitlab.yoursite.com и нажимаете ОК.
3) Добавьте репозиторий Apt GitLab
Теперь мы добавим репозиторий 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.
4) Установите Gitlab на Ubuntu 22.04
Запустите приведенную ниже команду, чтобы автоматически установить и настроить 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
5) Доступ к веб-интерфейсу GitLab
Установив и настроив GitLab, откройте веб-браузер и введите IP-адрес или имя хоста вашего сервера.
http://
Имя пользователя: root
Пароль: <<Получить пароль из /etc/gitlab/initial_root_password>>
Если ресурсов достаточно, то вы увидите следующее:
Вводим логин root и пароль и входим в GitLab
6) Оптимизация памяти. Запускаем 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:
- На левой боковой панели внизу выберите «Область администратора» .
- Выберите «Настройки» > «Метрики и профилирование» .
- Разверните Метрики — Прометей .
- Снимите галку Включить метрики Prometheus .
- Выберите Сохранить изменения.