Продолжаем переезжать с 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”