Немного заметок по GitLab

Продолжаем переезжать с xWiki на WordPress и сегодня перетащу пачку старых заметок по GitLab вдруг кому пригодится.

Настройка GitLab runner с поддержкой Docker Executor в Debian 10

Настройка Docker на хосте

# apt-get remove docker docker-engine docker.io containerd runc
# apt-get install ca-certificates curl gnupg lsb-release
# curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# echo   "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
 $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# apt-get update
# apt-get install docker-ce docker-ce-cli containerd.io

Устанавливаем службу Gitlab Runner

# curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | bash
# apt-get install gitlab-runner
# systemctl enable gitlab-runner
# systemctl start gitlab-runner

Регистрируем Gitlab Runner в GitLab

# gitlab-runner register -n  --url https://git.stagono.io  --registration-token XXXXXXXXXXX --executor docker \
--description "DOCKER-BUILDER-01" --docker-image "docker:20.10.5" --docker-volumes /var/run/docker.sock:/var/run/docker.sock

Установка GitLab в Ubuntu 20.04 и Centos 8 (и немного про Gitea)

С GitLab я работаю уже не один год и у меня накопился довольно большой опыт администрирования, установки и настройки. Что можно сказать в двух словах про гитлаб. Вещь прекрасная, практически все есть сразу и из коробки и реджестри и артефакты и кодревью и собственно Git. Но как вы наверное понимаете, такой комбайн потребляет огромное количество ресурсов и на мой взгляд использование его на небольших VPS и для небольших команд смысла не имеет. 

Так-же желательно чтобы был выделенный белый IP-адрес и устанавливаться на отдельную VPS без Docker или Kubernates. Это конечно мое личное мнение не претендующее на истину в первой инстанции и для небольших команд и проектов я бы рекомендовал использовать Gitea.

Установка Gitea

Раз уж я сказал про Gitea, то давайте в двух словах расскажу про установку этого «Аналога GitLab». Это к вашему сведению относительно небольшое приложение на GO и представляет собой просто бинарный файл который можно запустить и ваш сервис будет сразу рабочим.

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

# mkdir /opt/gitea
# cd /opt/gitea/
# wget -O gitea https://dl.gitea.io/gitea/1.17.3/gitea-1.17.3-linux-amd64
# chmod +x ./gitea

Создаем пользователя от имени которого будет запускаться Gitea и тестовый запуск

# adduser --system --shell /bin/bash --gecos 'Gitea' --group --disabled-password --home /opt/gitea/ git
# chown -R git:git /opt/gitea/
# su git
$ ./gitea --port 18001

Теперь можно подключиться браузером на указанный порт (в моем случае http://185.135.80.10:18001)

Базовая настройка довольно простая.

  • Создаем базу данных и пользователя
  • В настройках web-интерфейса прописываем базу и пока больше ничего не меняем

Настройка для запуска в реальном окружении.

  • Создаем домен где все это будет крутиться
  • Получаем сертификат Let’s encrypt
  • Создаем реверс-прокси на домен
  • Меняем в настройках конфига все под созданный домен

SystemD unit для запуска Gitea:

[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
[Service]
LimitNOFILE=524288:524288
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/opt/gitea
ExecStart=/opt/gitea/gitea web --port 18001
Restart=always
Environment=USER=git HOME=/opt/gitea/ GITEA_WORK_DIR=/opt/gitea/

[Install]
WantedBy=multi-user.target

Установка GitLab в Ubuntu 20.04
Установка необходимых пакетов

# apt-get update
# apt-get upgrade
# apt-get install -y curl openssh-server ca-certificates tzdata perl mc wget aptitude
# apt-get install -y postfix

Подключаем CE-репозитарий

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

Получаем список всех доступных версий GitLab

# apt-cache madison gitlab-ce

Устанавливаем определенную версию

# sudo EXTERNAL_URL="https://git.aagt.ru" apt-get install gitlab-ce=14.8.2-ce.0

Установка GitLab в Centos 8 (Локально)
Исходная системна на которую проводится установка GitLab.

cat /etc/redhat-release

CentOS Linux release 8.3.2011

Устанавливаем необходимые для работы пакеты:

# dnf install -y curl policycoreutils openssh-server perl
# systemctl enable sshd
# systemctl start sshd
# dnf install postfix
# systemctl enable postfix
# systemctl start postfix

Подключаем репозиторий Gitlab CE:

# curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

Устанавливаем GitLab CE

sudo EXTERNAL_URL="http://37.194.5.244" dnf install -y gitlab-ce

Запускаем Gitlab CE и настраиваем автозапуск:

# systemctl enable gitlab-runsvdir.service
# systemctl enable gitlab-runsvdir.service

Запуск GitLab CE в Docker-контейнере
Конфигурация docker-compose.yml для запуска gitlab и будущего отдельного хранилища баз данных postgresql с назначением хостов расположения контейнеров


version: "3.9"
services:
    postgresql:
      image: postgres:11.2-alpine
      ports:
        - '5432:5432'
      volumes:
        - /opt/interlan/postgresql-data:/var/lib/postgresql/data
        - /etc/localtime:/etc/localtime:ro
      # swarm
      deploy:
        placement:
          constraints:
            - "node.labels.hostname == srv-prod-db-01"

    gitlab:
      image: 'gitlab/gitlab-ce:15.5.1-ce.0'
      hostname: 'git.interlan.xyz'
      ports:
        - '18080:80'
        - '2224:22'
      volumes:
        - '/opt/interlan/gitlab/config:/etc/gitlab'
        - '/opt/interlan/gitlab/logs:/var/log/gitlab'
        - '/opt/interlan/gitlab/data:/var/opt/gitlab'
        - '/opt/interlan/gitlab/backups:/var/opt/gitlab/backups'
      # swarm
      deploy:
        placement:
          constraints:
            - "node.labels.hostname == srv-prod-app-01"

Настройка параметров конфигурации gitlab.rb
Для применения параметров конфигурации используется команда

docker exec -it 86e6a7464d8a gitlab-ctl reconfigure

Где 86e6a7464d8a это идентификатор контейнера на хосте и в моем случае я внес следующие правки в конфигурацию gitlab.rb

external_url 'http://git.interlan.xyz'
gitlab_rails['gitlab_ssh_host'] = 'git.interlan.xyz'
gitlab_rails['gitlab_shell_ssh_port'] = 2224
letsencrypt['enable'] = false
Настройки резервного копирования

gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
gitlab_rails['backup_keep_time'] = 604800

Запуск резервного копирования командой:

# docker exec -it 4dbfb4cc80d9 gitlab-rake gitlab:backup:create

Переносим базу данных Postgresql на отдельный сервер
После создания дампа средствами GitLab, достаем из него дамп базы и загружаем в предварительно созданную базу.

# cat ./database.sql | psql -h 10.240.250.3 -U gitlab_user gitlab_db

Меняем настройки подключения к базе данных и вместо внутренней СУБД идем к внешней.

gitlab_rails['db_adapter'] = "postgresql"
gitlab_rails['db_encoding'] = "unicode"
gitlab_rails['db_collation'] = nil
gitlab_rails['db_database'] = "gitlab_db"
gitlab_rails['db_username'] = "gitlab_user"
gitlab_rails['db_password'] = "PASSWORD"
gitlab_rails['db_host'] = "10.240.250.3"
gitlab_rails['db_port'] = 5432
gitlab_rails['auto_migrate'] = true
gitlab_rails['rake_cache_clear'] = true

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

# docker exec -it 0917454b68eb gitlab-backup restore BACKUP=1667040952_2022_10_29_15.5.1

P.S. Внутренний Postgresql отключается

postgresql['enable'] = false

Оптимизация GitLab для слабых VPS-серверов

Как я уже многократно говорил, GitLab не подходит для запуска на слабых VPS-серверах и минимальными требованиями для комфортной работы небольшой команды является 4гб оперативной памяти и 4 процессорных ядра. Но все же есть несколько практик как настроить GitLab для пусть не совсем комфортной, но возможности полноценной работы на слабых VPS.

Отключаем опции у проектов по умолчанию (wiki, snippets) и т.п.

gitlab_rails[‘gitlab_default_projects_features_issues’] = false
gitlab_rails[‘gitlab_default_projects_features_merge_requests’] = true
gitlab_rails[‘gitlab_default_projects_features_wiki’] = false
gitlab_rails[‘gitlab_default_projects_features_snippets’] = false
gitlab_rails[‘gitlab_default_projects_features_builds’] = true
gitlab_rails[‘gitlab_default_projects_features_container_registry’] = true
gitlab_rails[‘terraform_state_enabled’] = false

Уменьшаем параметр vm.swappiness в файле /etc/sysctl.conf

vm.swappiness=10

Отключаем exporter-ы и хелфчеки

sidekiq[‘metrics_enabled’] = false
sidekiq[‘health_checks_enabled’] = false
node_exporter[‘enable’] = false
prometheus_monitoring[‘enable’] = false

Отключаем кластеризацию puma

puma[‘worker_processes’] = 0

Оптимизация различных сервисов

sidekiq[‘max_concurrency’] = 5

gitaly[‘ruby_max_rss’] = 200_000_000
gitaly[‘concurrency’] = [
  {
    ‘rpc’ => «/gitaly.SmartHTTPService/PostReceivePack»,
    ‘max_per_repo’ => 3
  }, {
    ‘rpc’ => «/gitaly.SSHService/SSHUploadPack»,
    ‘max_per_repo’ => 3
  }
]

gitaly[‘cgroups_repositories_count’] = 2
gitaly[‘cgroups_mountpoint’] = ‘/sys/fs/cgroup’
gitaly[‘cgroups_hierarchy_root’] = ‘gitaly’
gitaly[‘cgroups_memory_bytes’] = 500000
gitaly[‘cgroups_cpu_shares’] = 512

gitaly[‘env’] = {
  ‘GITALY_COMMAND_SPAWN_MAX_PARALLEL’ => ‘2’
}

Меняем модель управления памятью

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’
}

Отключаем дополнительные мониторинги

  • Go to GitLab web interface.
  • On the top bar, select Main menu > Admin.
  • On the left sidebar, select Settings > Metrics and profiling.
  • Expand Metrics — Prometheus.
  • Disable Enable Prometheus Metrics.
  • Select Save changes.

Настройка отправки электронной почты (STARTTLS на 25-ом порту)

В файле /etc/gitlab/gitlab.rb меняем параметры:

gitlab_rails[‘smtp_enable’] = true
gitlab_rails[‘smtp_address’] = «mail.bds.su»
gitlab_rails[‘smtp_port’] = 25
gitlab_rails[‘smtp_user_name’] = «git@interlan.xyz»
gitlab_rails[‘smtp_password’] = «xxxPASSWORDxxx»
gitlab_rails[‘smtp_domain’] = «interlan.xyz»
gitlab_rails[‘smtp_authentication’] = «plain»
gitlab_rails[‘smtp_tls’] = false
gitlab_rails[‘smtp_enable_starttls_auto’] = true
gitlab_rails[‘smtp_ssl’] = false
gitlab_rails[‘smtp_force_ssl’] = false
gitlab_rails[‘gitlab_email_from’] = ‘git@interlan.xyz’
gitlab_rails[‘gitlab_email_reply_to’] = ‘git@interlan.xyz’

Так-же в файле /opt/gitlab/embedded/service/gitlab-rails/config/environments/production.rb изменяем параметр

config.action_mailer.delivery_method = :sendmail

на 

config.action_mailer.delivery_method = :smtp

Задаем логин-пароль командой:

gitlab-rake gitlab:smtp:secret:edit EDITOR=vim

Изменяем параметры:

user_name: ‘smtp user’
password: ‘smtp password’

Запускаем реконфигурирование GitLab:

# gitlab-ctl reconfigure

Проверка отправки электронной почты:

# gitlab-rails console
Notify.test_email(‘chernousov@interlan.xyz’, ‘Test message’, ‘Hello!!!’).deliver_now

Конфигурация отправки электронной почты без авторизации

gitlab_rails[‘smtp_enable’] = true
gitlab_rails[‘smtp_address’] = «10.77.77.101»
gitlab_rails[‘smtp_port’] = 25
gitlab_rails[‘smtp_domain’] = «code.smsfinance.ru»

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

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Nextcloud — отличное решение для хранения файлов, но управление пользователями вручную становится головной болью при масштабировании. Keycloak позволяет централизовать аутентификацию, обеспечивая безопасность, поддержку MFA (двухфакторной аутентификации) и удобный вход через…

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Пакеты в Ubuntu по умолчанию настроены на работу с серверами, имеющими довольно много оперативной памяти. Нам нужно жёстко ограничить потребление памяти для работы на Mikro VPS. Запускать будем мой блог…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Интеграция Gitea и Keycloak: пошаговое руководство

Интеграция Gitea и Keycloak: пошаговое руководство

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах

Полное руководство по установке и настройке мониторинга с Grafana и Prometheus: от установки до первого дашборда

Полное руководство по установке и настройке мониторинга с Grafana и Prometheus: от установки до первого дашборда