Установка GitLab CE на Ubuntu 18.04 с Docker
TL;DR
GitLab CE (Community Edition) можно быстро развернуть в Docker на Ubuntu 18.04: подготовьте сервер (минимум 2 vCPU и 8 ГБ RAM), установите Docker и Docker Compose, запустите контейнер с томами для данных и настройте SMTP, SSH и брандмауэр. В статье — полный пошаговый план, проверки, методики резервного копирования и рекомендации по безопасности.

GitLab CE (Community Edition) — это свободное ПО для хостинга Git-репозиториев с веб-интерфейсом, системой задач, CI/CD и многим другим. Самостоятельный хостинг даёт полный контроль над данными и интеграциями для команды.
В этом руководстве описано поэтапное развёртывание GitLab CE в Docker на Ubuntu 18.04. Если вам нужны корпоративные функции (Merge approvals, Roadmaps, Portfolio Management, контейнерное сканирование и др.), рассмотрите обновление до Enterprise Edition с лицензией.
Что входит в этот материал
- Подготовка сервера и системные требования
- Установка зависимостей, Docker и Docker Compose
- Конфигурация SSH, брандмауэра (ufw) и портов
- Запуск GitLab в Docker через docker-compose
- Первичная настройка GitLab: админ, SMTP, профиль, SSH-ключ
- Управление контейнером и обновления
- Резервное копирование и восстановление
- Безопасность и эксплуатационные рекомендации
- Проверки, критерии приёмки и чек-листы для ролей
Основные требования и примечания
- ОС: Ubuntu 18.04 (серверная сборка) с актуальными пакетами.
- Привилегии: не-root пользователь с sudo.
- Ресурсы: минимум 2 vCPU и 8 ГБ RAM для ~100 пользователей. Замена RAM на swap возможна, но снижает производительность.
- Сеть: честный публичный домен (external_url) и открытые порты для HTTP/HTTPS/SSH по необходимости.
Важно: в руководстве используется образ gitlab/gitlab-ee:latest — Enterprise Edition образ функционирует как Community, пока вы не активируете лицензию. Это стандартный приём для быстрого развёртывания.
Предупреждение и заметки
Important: Прежде чем использовать в продакшне, протестируйте всё на отдельной виртуальной машине. Создавайте резервные копии томов перед обновлением или миграциями.
Подробный план действий
Подготовка сервера
- Создайте VPS/VM на выбранном хостинге с Ubuntu 18.04.
- Войдите под пользователем с sudo (не root).
- Убедитесь, что сервер обновлён:
$ sudo apt update && sudo apt upgrade -y- Настройте временную зону и часы, если нужно:
$ sudo timedatectl set-timezone Europe/Moscow
$ sudo timedatectl set-ntp yes(Замените временную зону на вашу.)
Шаг 1 — Установка зависимостей
GitLab требует базовых пакетов: ca-certificates, curl, openssh-server, ufw и возможности apt-transport-https.
$ sudo apt update
$ sudo apt install ca-certificates curl openssh-server ufw apt-transport-https -yНекоторые пакеты могут быть уже установлены.
Шаг 2 — Поменять SSH-порт системы
По умолчанию GitLab внутри контейнера слушает 22/TCP для SSH-пушей. Чтобы избежать конфликта с SSH-хостом, смените SSH-порт сервера. В примере используем 6622.
$ sudo nano /etc/ssh/sshd_configНайдите строку:
# Port 22и замените на:
Port 6622Сохраните и перезапустите службу:
$ sudo systemctl restart sshdОткройте новое SSH-подключение с новым портом:
$ ssh [email protected] -p 6622Совет: не завершайте предыдущий SSH-сеанс, пока не подтвердите успешное подключение на новый порт.
Шаг 3 — Настройка брандмауэра (ufw)
Разрешите доступ по OpenSSH и новому порту, затем HTTP/HTTPS:
$ sudo ufw allow OpenSSH
$ sudo ufw allow 6622
$ sudo ufw allow http
$ sudo ufw allow https
$ sudo ufw enable
$ sudo ufw statusОжидаемый вывод — список разрешённых служб и портов.
Шаг 4 — Установка Docker
Добавьте GPG-ключ Docker и репозиторий, затем установите Docker CE.
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt update
$ sudo apt install docker-ce -y
$ sudo systemctl enable --now docker
$ sudo systemctl status dockerПроверьте, что служба активна (Active: active (running)).
Добавьте пользователя в docker-группу, чтобы можно было запускать docker без sudo:
sudo usermod -aG docker $USER
su - ${USER}Проверьте установку:
$ docker run hello-worldШаг 5 — Установка Docker Compose
Docker Compose упрощает запуск многоконтейнерных приложений и удобен для конфигурации GitLab контейнера.
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
$ docker-compose --versionПримечание: версия 1.24.1 была актуальной на момент оригинального руководства. Рекомендуется проверить релиз на GitHub и при необходимости обновить URL и номера версий.
Шаг 6 — Скачивание образа GitLab
Скачайте официальный образ GitLab (здесь используется gitlab-ee:latest):
$ docker pull gitlab/gitlab-ee:latest
$ docker imagesПример вывода: образ gitlab/gitlab-ee может иметь размер ~1.87GB.
Шаг 7 — Запуск GitLab через docker-compose
Создайте файл docker-compose.yml:
$ nano docker-compose.ymlВставьте следующую конфигурацию (переведён и оставлен аналогичный базовый пример):
web:
image: 'gitlab/gitlab-ee:latest'
container_name: 'gitlab-howtoforge-tutorial'
restart: always
hostname: 'gitlab.example.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.example.com'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.gmail.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "[email protected]"
gitlab_rails['smtp_password'] = "app-password"
gitlab_rails['smtp_domain'] = "smtp.gmail.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
# Add any other gitlab.rb configuration here, each on its own line
ports:
- '80:80'
- '443:443'
- '22:22'
- '587:587'
volumes:
- '/srv/gitlab/config:/etc/gitlab'
- '/srv/gitlab/logs:/var/log/gitlab'
- '/srv/gitlab/data:/var/opt/gitlab'Пояснения ключевых опций:
- image — имя образа на Docker Hub.
- container_name — удобный ярлык для контейнера.
- hostname и external_url — домен, по которому будет доступен GitLab; external_url влияет на генерацию сертификатов и URL в веб-интерфейсе.
- volumes — тома для конфигурации, логов и данных, чтобы при пересоздании контейнера данные сохранялись.
- ports — проброс портов хоста на контейнер. Пример 22:22 пробрасывает SSH контейнера на порт 22 хоста.
Если хост уже использует порт 22, измените проброс, например 3333:22, и добавьте в GITLAB_OMNIBUS_CONFIG строку gitlab_rails[‘gitlab_shell_ssh_port’] = 3333.
Запустите GitLab:
$ docker-compose up -d
$ docker logs -f gitlab-howtoforge-tutorialНачальная инициализация может занять несколько минут. Если при доступе с браузера появляется ошибка 502, подождите и проверьте логи.

Шаг 8 — Первичная настройка GitLab
При первом доступе вам предложат задать пароль администратора (root). Введите пароль, затем войдите как root и созданный пароль.

Настройка SMTP
SMTP необходим для отправки уведомлений и подтверждения почты. В конфигурации docker-compose приведён пример настройки Gmail (SMTP):
- smtp_address: smtp.gmail.com
- smtp_port: 587
- smtp_user_name: [email protected]
- smtp_password: “app-password”
Рекомендация: используйте отдельный аккаунт или сервисную почту, а не личную почту админа. Для Gmail потребуется создать пароль приложения (App password) и включить соответствующие настройки безопасности.
Настройка профиля GitLab
Перейдите в правый верхний угол → меню пользователя → Настройки (Settings). Укажите имя и email, подтвердите e-mail через письма, если включён SMTP.


Нажмите Update Profile Settings после изменений.
Переименование пользователя root
Для безопасности смените публичный логин root на менее очевидный пермишн. В разделе Account поменяйте username и при желании включите двухфакторную аутентификацию.

Ограничение публичной регистрации
Если вы не хотите, чтобы любой мог зарегистрироваться, отключите регистрацию: Администрирование → Настройки → Sign-up restrictions → отключите Sign-up enabled и сохраните.


Добавление SSH-ключа
Если у вас ещё нет SSH-ключа, создайте его локально:
$ ssh-keygenПримеры вывода генерации ключа приведены ниже. Затем скопируйте публичный ключ:
$ cat ~/.ssh/gitlab.pub
ssh-rsa AAAAB3NzaC1... user@hostВ GitLab: профиль → SSH Keys → вставьте ключ и нажмите Add Key.

После добавления ключа вы сможете клонировать/пушить по SSH без ввода пароля GitLab.
Шаг 9 — Создание первого проекта
Нажмите Create a project → New project. Укажите имя проекта, slug, описание и уровень доступа. Можно инициализировать репозиторий README.


После создания вы попадёте в пустой репозиторий с README.md.

Клонируйте репозиторий по SSH или HTTPS и добавьте файлы:
# SSH
$ git clone [email protected]:user/howtoforge-test.git
# HTTPS
$ git clone https://gitlab.example.com/user/howtoforge-test.git
$ cd howtoforge-test
$ touch CHANGELOG
$ git add CHANGELOG
$ git commit -m "add Changelog"
$ git push -u origin masterШаг 10 — Управление контейнером
Просмотр контейнеров:
$ docker psОстановка контейнера:
$ docker stop gitlab-howtoforge-tutorialЗапуск:
$ docker start gitlab-howtoforge-tutorialУдаление контейнера:
$ docker container rm gitlab-howtoforge-tutorialЕсли вы используете volumes, данные останутся на диске даже после удаления контейнера, пока вы не удалите сами тома.
Шаг 11 — Обновление GitLab
Алгоритм обновления при использовании docker-compose:
$ docker stop gitlab-howtoforge-tutorial
$ docker rm gitlab-howtoforge-tutorial
$ docker pull gitlab/gitlab-ee:latest
$ docker-compose up -dПоскольку тома монтированы (config, logs, data), ваши настройки и данные сохранятся.
Резервное копирование и восстановление
Резервирование данных — первостепенно.
Рекомендуемые шаги:
- Регулярно копируйте содержимое томов /srv/gitlab/config, /srv/gitlab/logs и /srv/gitlab/data на внешний диск или в облако.
- Для логической резервной копии репозиториев и настроек используйте встроенные GitLab rake- и backup-утилиты внутри контейнера (см. GitLab docs).
Пример простой архивной копии на хосте:
$ sudo tar -czvf gitlab-srv-backup-$(date +%F).tar.gz /srv/gitlab
$ sudo rsync -azP /srv/gitlab user@backup-server:/backups/gitlab/Минимальная политика восстановления (пример):
- Остановить контейнеры.
- Восстановить архив томов на хосте.
- Запустить контейнеры и проверить логи.
Важно: полные инструкции по backup/restore зависят от версии и конфигурации GitLab; для важных систем используйте официальную документацию и делайте тестовые восстановления регулярно.
Безопасность и жёсткие рекомендации
- Включите HTTPS (Let’s Encrypt) или используйте собственные сертификаты. external_url ‘https://…’ позволяет Omnibus автоматически запросить сертификат.
- Отключите регистрацию, если система приватная.
- Замените root-имя и включите двухфакторную аутентификацию для админов.
- Ограничьте доступ к API и webhook-URL через прокси/фаервол.
- Обновляйте GitLab и зависимости по установленному релиз-цикла.
- Можете дополнительно установить fail2ban на хосте для защиты SSH.
Настройки производительности и ресурсные рекомендации
- Для команд <100 пользователей: 2 vCPU, 8 GB RAM.
- Для больших команд: планируйте от 4 vCPU и 16–32 GB RAM и отдельные сервисы (Postgres, Redis) или кластер.
- Используйте SSD-диски для хранения данных репозиториев и CI-артефактов.
Частые проблемы и способы их решения
- 502 Bad Gateway сразу после старта — подождите, GitLab инициализируется (может занять >5 минут). Смотрите docker logs -f.
- Ошибки SSL — проверьте домен и external_url; если Let’s Encrypt не срабатывает, проверьте, что 80/TCP открыт и домен указывает на IP.
- Проблемы с SMTP — проверьте лог входа сервера и настройки (порт, TLS/STARTTLS, пароль приложения).
- SSH-авторизация не работает — убедитесь, что gitlab_rails[‘gitlab_shell_ssh_port’] совпадает с проброшенным портом, и что ключ добавлен в профиль пользователя.
Дополнительные подходы и альтернативы
- Omnibus-пакет на хосте: вместо Docker можно установить GitLab Omnibus напрямую на сервер. Это упростит управление системой, но усложнит изоляцию и переносимость.
- Использовать официальные Helm-чарты и Kubernetes для масштабируемых установок.
- Для CI/CD можно использовать отдельные GitLab Runner-ы на отдельных машинах.
Модель принятия решений (Mermaid)
flowchart TD
A[Нужны функции Enterprise?] -->|Да| B[Рассмотреть покупку лицензии]
A -->|Нет| C[Продолжить с Community Edition]
C --> D{Нужен масштаб и HA?}
D -->|Да| E[Разворачивать в Kubernetes/кластер]
D -->|Нет| F[Запустить в Docker-compose]Роль-ориентированные чек-листы
Администратор:
- Настроить бэкапы томов
- Настроить мониторинг и алерты
- Ограничить регистрацию и настроить 2FA
- План обновлений и отката
DevOps/Инженер:
- Настроить CI/CD runners
- Настроить firewall и мониторинг ресурсов
- Автоматизировать развёртывание через Ansible/Terraform
Разработчик:
- Добавить SSH-ключ
- Создать проект и pipeline
- Настроить protected branches и merge approvals
Критерии приёмки
- Сайт GitLab доступен по HTTPS и загружается без ошибок.
- Администратор может залогиниться и сменить root-пароль.
- Электронная почта отправляется (тестовое письмо) после настройки SMTP.
- Пользователь может добавить SSH-ключ и выполнить git push через SSH.
- Данные находятся в /srv/gitlab и остаются после пересоздания контейнера.
Тестовые случаи и проверки
- TC-01: Инициализация: docker-compose up -d запускается без ошибок, контейнер переходит в состояние Running.
- TC-02: HTTP(S): Корень сайта возвращает 200 OK.
- TC-03: Аутентификация: Вход под root с заданным паролем успешен.
- TC-04: SMTP: Отправка тестового письма подтверждает доставку.
- TC-05: SSH: git clone по SSH успешен с добавленным ключом.
Миграция и совместимость
- При переходе с Omnibus на Docker: экспортируйте бэкап (rake gitlab:backup:create), перенесите тома и восстановите через gitlab-rake внутри нового контейнера.
- Проверяйте совместимость версии данных при откате (restore) — используйте ту же или более новую версию GitLab.
Безопасность данных и GDPR (примечания)
- Храните персональные данные пользователей в соответствии с местными требованиями GDPR/локального законодательства.
- Предоставьте политику хранения логов и резервных копий: какие данные хранятся, где и как долго.
- Если используете внешние SMTP/облачное хранение бэкапов, заключите соглашения с провайдерами об обработке данных.
Короткое объявление (анонс для команды, 100–200 слов)
Мы развернули GitLab CE на Ubuntu 18.04 в Docker. GitLab доступен по защищённому HTTPS-домeну, предоставляет репозитории, трекер задач и CI/CD. Администраторы уже настроили SMTP для уведомлений и добавили политику резервного копирования. Если вам нужен доступ, сообщите администратору для добавления в систему. Рекомендуется использовать SSH-ключи для безопасной работы с репозиториями.
Краткое резюме
- GitLab CE можно надёжно развернуть в Docker на Ubuntu 18.04.
- Основные шаги: подготовка сервера → Docker → Docker Compose → docker-compose up -d → первоначальная настройка.
- Обязательные пункты: резервное копирование томов, настройка SMTP, ограничение публичной регистрации и включение 2FA.
Ключевые выводы
- Контейнерный развёртывание упрощает переносимость и откат.
- Томовая структура (/srv/gitlab) защищает данные при удалении контейнера.
- Безопасность и бэкапы критичны для продуктивной эксплуатации.
- Для крупных установок рассмотрите Kubernetes/кластерную архитектуру.
Спасибо за внимание. Если у вас есть вопросы по конкретным шагам (сертификаты, масштабирование, резервное копирование или миграция), опишите вашу конфигурацию, и я помогу с рекомендациями.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента