Немного заметок по 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»

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

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

GlusterFS — это масштабируемая, распределённая файловая система с открытым исходным кодом, которая объединяет хранилища нескольких серверов в единое пространство имён. Она идеально подходит для создания отказоустойчивых и высокопроизводительных хранилищ, особенно…

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Запихать Mysql в Kubernetes оказалось не очень хорошей идеей и я решил основательно пересмотреть инфраструктуру своего pet-проекта и за основу будет принят кластер из трех серверов. На каждом узле кластера…

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

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

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

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS