GitLab CE
Self-hosted DevOps-платформа: Git-репозитории, code review, CI/CD, реестр контейнеров, задачи и wiki в одном омнибус-пакете. Развернули одной кнопкой из маркетплейса Fatmetal, замерили аппетиты и по ходу нашли (и починили) баг в своей же magic-DNS, из-за которого не поднимался TLS.
Коротко: брать или нет
- Нужен весь DevOps-конвейер в одном месте: repo + review + CI/CD + registry + issues
- Уходите с per-seat SaaS (GitHub/Bitbucket) ради контроля и TCO
- Код должен оставаться у вас (152-ФЗ)
- Нужен только git + pull request малой командой - Gitea/Forgejo легче в разы
- VM меньше 4 ГБ RAM - омнибус уйдет в OOM
- Некому сопровождать: обновления, бэкапы, reconfigure
Что это и какую задачу решает
GitLab CE - не просто git-хостинг, а целая DevOps-платформа на вашем сервере. В одном омнибус-пакете (gitlab-ce) едут веб-приложение на Rails, Gitaly (git-RPC), PostgreSQL, Redis, NGINX, Sidekiq, реестр Docker-образов, Prometheus и десяток экспортеров. Итог: приватные репозитории, merge request-ы и code review, встроенный CI/CD, трекер задач, wiki и доски - без оплаты за пользователей и без облака.
Community Edition распространяется под MIT. Проприетарные фичи (advanced security, часть управленческих) живут в том же монорепо и открываются платной подпиской EE - классический open-core.
Чем отличается от Gitea, Forgejo и SaaS
На Хабре нишу self-hosted git делят по весам. Gitea и Forgejo - легкие (Go, один бинарь, ~100-300 MiB RAM): дают git, pull request-ы и базовый CI, и этого многим хватает. GitLab CE - тяжелый монолит, но взамен отдает полный DevOps из коробки, чего у легких нет в таком объеме.
Против GitHub Enterprise и Bitbucket главный аргумент - TCO: GitLab CE бесплатен и не берет плату за место (per-seat), вы платите только за сервер. Расплата - ресурсы (см. замеры ниже).
В маркетплейсе Fatmetal
Не хотите ставить руками?
Этот стек есть в маркетплейсе Fatmetal - можно не повторять установку из этого разбора вручную. Заказываете сервер, за пару минут получаете рабочий домен, валидный TLS и файл с доступами.
Рекомендуемая конфигурация:
4 vCPU · 8 ГБ RAM · 100 ГБ NVMe от 990 ₽/мес
Развертывание: одна кнопка из маркетплейса
Заказали GitLab из маркетплейса Fatmetal (marketplace-приложение на чистой Ubuntu 24.04, тариф CPU6-RAM16). Установка идет сама: cloud-init подключает репозиторий packages.gitlab.com и ставит омнибус-пакет, дальше gitlab-ctl reconfigure собирает весь стек. От заказа до рабочего входа - около 7 минут.
Версия не залочена - и это правильно. Скрипт ставит gitlab-ce без пина, то есть актуальную на момент заказа. У нас встал 19.1.2. Пользователю нужен свежий GitLab, а не законсервированный, поэтому в карточке версия указана как latest, а конкретный номер - только «на момент проверки».
Сколько реально ест
GitLab знаменит прожорливостью, и цифры это подтверждают. В простое (без нагрузки, сразу после установки) омнибус занимает ~5.5 GiB RAM и держит 14 запущенных сервисов; на диске /opt/gitlab - 3.4 ГБ. Для сравнения, легкие Gitea/Forgejo обходятся сотнями мегабайт. Официальный минимум - 4 ГБ RAM, комфортно - 8 и больше.
Проверили не только вход, но и работу: создали проект с README - репозиторий, первый коммит и клон-адрес поднялись штатно.
Как войти - и почему TLS сначала не поднялся
Адрес формируется из публичного IP через magic-DNS Fatmetal: точки на дефисы плюс .fatmetal.net (например 45-15-159-14.fatmetal.net). Логин - root, пароль - пароль вашего сервера (тот же, что для SSH, из панели). Все это отдается и в карточке маркетплейса, и в файле /root/gitlab-credentials.txt на сервере.
А вот валидный HTTPS с первого раза не встал - и это оказалась не проблема GitLab, а наш баг в magic-DNS. Встроенный Let's Encrypt при выпуске серта падал:
Причина - DNS 0x20. Резолвер Let's Encrypt (как и многие) для защиты от спуфинга шлет имя в случайном регистре (45-15-159-14.FaTmEtAl.NeT). Наша Lua-запись magic-DNS матчила fatmetal.net строго в нижнем регистре - при смешанном регистре совпадение не срабатывало, запись отдавала пусто, резолвер получал SERVFAIL. Обычный dig шлет lowercase, поэтому проблема и пряталась.
Решение - одна строка. Привели имя к нижнему регистру перед сравнением (qname:lower()) в Lua-записи на nameserver. Починка общая для всех magic-хостов сразу. После этого gitlab-ctl reconfigure выписал валидный серт Let's Encrypt, и curl без -k подтвердил доверенную цепочку.
Где может сломаться
Память и OOM
На VM меньше 4 ГБ RAM омнибус не соберется - reconfigure упадет по памяти. ~5.5 ГБ в простое означают, что 8 ГБ - это рабочий минимум с запасом под CI и всплески.
Тяжелый reconfigure
Первая установка и каждое крупное обновление гоняют gitlab-ctl reconfigure (cinc/chef) - это минуты и заметная нагрузка. Перед мажорным апгрейдом делайте бэкап: конфиг иногда ломается.
RU-доступ к зеркалам
Пакеты и Docker-образы для CI тянутся с зарубежных зеркал. С российского IP часть источников может быть недоступна - закладывайте прокси/зеркала для CI-раннеров.
Когда это НЕ ваш выбор
Если задача - «положить git и делать pull request-ы» небольшой командой, GitLab избыточен: Gitea или Forgejo дадут то же самое за доли ресурсов и поднимутся на самом тарифе CPU4-RAM8-DISK100. GitLab CE оправдан, когда реально нужен весь конвейер - CI/CD, реестр образов, pages, управление - в одном месте, и есть кому его сопровождать. Брать тяжелый омнибус только ради репозиториев - переплата ресурсами.
Итог
GitLab CE - зрелая и полная DevOps-платформа: за один клик из маркетплейса вы получаете рабочий git с CI/CD и registry, вход по magic-DNS с валидным HTTPS. Цена полноты - ресурсы (~5.5 ГБ RAM в простое, минимум 4 ГБ). Если нужен весь конвейер - отличный выбор; если только репозитории - смотрите в сторону легких Gitea/Forgejo.
Рекомендуемая конфигурация для установки:
4 vCPU · 8 ГБ RAM · 100 ГБ NVMe
Не хотите устанавливать вручную?
Запустите GitLab на этой конфигурации автоматически - от 990 ₽/мес.
Замеры сняты на Fatmetal Cloud Server (CPU6-RAM16-DISK100, Ubuntu 24.04) в июле 2026, GitLab CE 19.1.2. Реальные IP, пароли и адреса серверов в публикацию не выносятся.