· 18 мин чтения

Self-hosted GitLab CE: установка корпоративного git-сервера под ключ

Я Семёнов Евгений Сергеевич, руковожу АйТи Фреш. За 15 лет я поднял около двадцати GitLab-инсталляций: от маленьких «на 6 разработчиков» до корпоративных на 300+ пользователей с LDAP и HA. У нас на практике GitLab у клиентов живёт либо на виртуалках в их офисе, либо на наших серверах Dell Xeon Platinum 8280 в дата-центре МТС Москва. Разберём установку с нуля на Ubuntu 22.04.

Железо и ОС

Размер командыCPURAMДиск
до 20 пользователей4 vCPU8 ГБ100 ГБ SSD
до 508 vCPU16 ГБ500 ГБ SSD
до 20016 vCPU32 ГБ1 ТБ SSD
200+разносна 2–3 нодывыделенный PG+Redis

Ubuntu 22.04 LTS или Rocky/RHEL 9. Swap — держите 4–8 ГБ, пригодится на пиковых бэкапах.

Установка Omnibus на Ubuntu 22.04

sudo apt update
sudo apt install -y curl openssh-server ca-certificates tzdata perl postfix

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

sudo EXTERNAL_URL="https://git.company.ru" apt install -y gitlab-ce

Первая инициализация занимает 5–10 минут. В /etc/gitlab/initial_root_password лежит временный пароль для root.

Базовый gitlab.rb

# /etc/gitlab/gitlab.rb

external_url 'https://git.company.ru'
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['admin@company.ru']

# SMTP для нотификаций
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "mail.company.ru"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "gitlab@company.ru"
gitlab_rails['smtp_password'] = "secret"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true

gitlab_rails['gitlab_email_from'] = 'gitlab@company.ru'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@company.ru'

# Таймзона
gitlab_rails['time_zone'] = 'Europe/Moscow'

# Производительность
puma['worker_processes'] = 4
postgresql['shared_buffers'] = "4GB"
sidekiq['max_concurrency'] = 20
sudo gitlab-ctl reconfigure

LDAP интеграция с AD

gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = {
  'main' => {
    'label' => 'Active Directory',
    'host' => 'dc.corp.company.ru',
    'port' => 636,
    'uid' => 'sAMAccountName',
    'encryption' => 'simple_tls',
    'verify_certificates' => true,
    'bind_dn' => 'CN=gitlab_bind,OU=Services,DC=corp,DC=company,DC=ru',
    'password' => 'BindPassword',
    'active_directory' => true,
    'base' => 'OU=Users,DC=corp,DC=company,DC=ru',
    'user_filter' => '(memberOf=CN=Developers,OU=Groups,DC=corp,DC=company,DC=ru)',
    'group_base' => 'OU=Groups,DC=corp,DC=company,DC=ru'
  }
}

TLS: Let's Encrypt или свой PKI

Omnibus умеет сам выписывать Let's Encrypt — letsencrypt['enable'] = true. Для внутренней сети без доступа к интернету — используйте свой AD CS:

letsencrypt['enable'] = false
nginx['ssl_certificate'] = "/etc/gitlab/ssl/git.company.ru.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/git.company.ru.key"

Регистрация раннеров

Для CI/CD нужен минимум один раннер. Быстрый вариант — docker-executor на отдельной виртуалке:

curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
sudo apt install -y gitlab-runner

sudo gitlab-runner register \
  --non-interactive \
  --url "https://git.company.ru/" \
  --token "glrt-xxxx" \
  --executor "docker" \
  --docker-image "alpine:latest" \
  --docker-privileged \
  --description "main-docker-runner"

Бэкапы

Главное правило: бэкап состоит из двух частей — дамп данных и конфиг. Без конфига дамп не восстановить.

# Бэкап данных (БД, repos, uploads, artifacts)
sudo gitlab-backup create STRATEGY=copy GZIP_RSYNCABLE="true"

# Бэкап конфига и секретов
sudo tar czf /var/opt/gitlab/backups/etc-gitlab-$(date +%F).tgz /etc/gitlab

В cron:

0 2 * * * /usr/bin/gitlab-backup create CRON=1 >> /var/log/gitlab-backup.log 2>&1
30 2 * * * tar czf /var/opt/gitlab/backups/etc-$(date +\%F).tgz /etc/gitlab

Храните бэкапы на отдельном сервере (rsync/borg/restic). Тестируйте восстановление раз в квартал.

Производительность

Мониторинг

Omnibus включает Prometheus и Grafana внутри. Достаточно открыть https://git.company.ru/-/grafana/ — там готовые дашборды по Puma, Sidekiq, PostgreSQL. Для внешнего мониторинга экспортируйте :9090/metrics в корпоративный Prometheus.

Реальный кейс: миграция с Bitbucket Server

Однажды в 2024 году к нам пришёл клиент — крупное региональное медиа, 64 разработчика на Bitbucket Server 7.x. Лицензия подорожала в 3 раза, плюс санкционные риски по Atlassian. Задача: мигрировать проекты и пайплайны на self-hosted GitLab CE.

За 6 рабочих дней мы развернули GitLab на виртуалке 16 vCPU / 32 ГБ (наш сервер Dell Xeon Platinum 8280, дата-центр МТС Москва), интегрировали с AD по LDAP, мигрировали 148 репозиториев через bbcloud → git bundle → gitlab. Переписали 32 пайплайна с Bitbucket Pipelines на GitLab CI. Стоимость — 240 000 руб. Экономия лицензий — около 1,8 млн руб./год.

Грабли

Развернём GitLab под вашу команду

15+ лет опыта администрирования. Мы ставим, обновляем, мигрируем GitLab: CE, EE, SaaS → self-hosted, Bitbucket/Gitea → GitLab. 8 серверов Dell Xeon Platinum 8280 в дата-центре МТС Москва — для клиентов, кто не хочет держать железо на своей стороне.

Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш

FAQ — Self-hosted GitLab

Сколько ресурсов нужно на GitLab для 50 разработчиков?
Минимум 8 vCPU, 16 ГБ ОЗУ, 500 ГБ SSD. Комфортно 16 vCPU / 32 ГБ. Для 200+ пользователей разносите на два сервера: application + отдельный PostgreSQL/Redis.
Omnibus или Docker?
Для single-сервера — Omnibus-пакет (один deb/rpm). Проще обновлять и обслуживать. Docker и Helm нужны для HA-развёртывания на нескольких нодах или в Kubernetes.
GitLab CE или EE?
CE бесплатен и покрывает 95% потребностей: репозитории, CI, issue, wiki, LDAP. EE нужен для corporate audit, epic management, advanced security сканирования. Для большинства МСП хватит CE.
Как делать бэкап GitLab?
gitlab-backup create для данных (БД, repos, uploads, artifacts). Отдельно копируйте /etc/gitlab (секреты, конфиг). Без секретов из /etc/gitlab бэкап не восстановится.
Можно ли интегрировать с Active Directory?
Да, через LDAP. В gitlab.rb настраиваются gitlab_rails['ldap_servers'] с bind_dn, user_filter, group_base. Пользователи логинятся доменной учёткой, группы AD маппятся в GitLab.

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.