Гид по технологиям

Установка GitLab CE на Ubuntu 18.04 с Docker

• 9 min read • DevOps • Обновлено 19 Nov 2025
Установка GitLab CE на Ubuntu 18.04 с Docker
Установка 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 на Ubuntu с Docker

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: Прежде чем использовать в продакшне, протестируйте всё на отдельной виртуальной машине. Создавайте резервные копии томов перед обновлением или миграциями.


Подробный план действий

Подготовка сервера

  1. Создайте VPS/VM на выбранном хостинге с Ubuntu 18.04.
  2. Войдите под пользователем с sudo (не root).
  3. Убедитесь, что сервер обновлён:
$ sudo apt update && sudo apt upgrade -y
  1. Настройте временную зону и часы, если нужно:
$ 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, подождите и проверьте логи.

Экран входа GitLab

Шаг 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.

Меню настройки профиля GitLab

Страница профиля GitLab

Нажмите 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-ключа в профиль

После добавления ключа вы сможете клонировать/пушить по SSH без ввода пароля GitLab.

Шаг 9 — Создание первого проекта

Нажмите Create a project → New project. Укажите имя проекта, slug, описание и уровень доступа. Можно инициализировать репозиторий README.

Кнопка создания проекта

Мастер создания нового проекта

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

Страница репозитория с README

Клонируйте репозиторий по 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/

Минимальная политика восстановления (пример):

  1. Остановить контейнеры.
  2. Восстановить архив томов на хосте.
  3. Запустить контейнеры и проверить логи.

Важно: полные инструкции по backup/restore зависят от версии и конфигурации GitLab; для важных систем используйте официальную документацию и делайте тестовые восстановления регулярно.


Безопасность и жёсткие рекомендации

  1. Включите HTTPS (Let’s Encrypt) или используйте собственные сертификаты. external_url ‘https://…’ позволяет Omnibus автоматически запросить сертификат.
  2. Отключите регистрацию, если система приватная.
  3. Замените root-имя и включите двухфакторную аутентификацию для админов.
  4. Ограничьте доступ к API и webhook-URL через прокси/фаервол.
  5. Обновляйте GitLab и зависимости по установленному релиз-цикла.
  6. Можете дополнительно установить fail2ban на хосте для защиты SSH.

Настройки производительности и ресурсные рекомендации

  • Для команд <100 пользователей: 2 vCPU, 8 GB RAM.
  • Для больших команд: планируйте от 4 vCPU и 16–32 GB RAM и отдельные сервисы (Postgres, Redis) или кластер.
  • Используйте SSD-диски для хранения данных репозиториев и CI-артефактов.

Частые проблемы и способы их решения

  1. 502 Bad Gateway сразу после старта — подождите, GitLab инициализируется (может занять >5 минут). Смотрите docker logs -f.
  2. Ошибки SSL — проверьте домен и external_url; если Let’s Encrypt не срабатывает, проверьте, что 80/TCP открыт и домен указывает на IP.
  3. Проблемы с SMTP — проверьте лог входа сервера и настройки (порт, TLS/STARTTLS, пароль приложения).
  4. 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

Критерии приёмки

  1. Сайт GitLab доступен по HTTPS и загружается без ошибок.
  2. Администратор может залогиниться и сменить root-пароль.
  3. Электронная почта отправляется (тестовое письмо) после настройки SMTP.
  4. Пользователь может добавить SSH-ключ и выполнить git push через SSH.
  5. Данные находятся в /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.

Ключевые выводы

  1. Контейнерный развёртывание упрощает переносимость и откат.
  2. Томовая структура (/srv/gitlab) защищает данные при удалении контейнера.
  3. Безопасность и бэкапы критичны для продуктивной эксплуатации.
  4. Для крупных установок рассмотрите Kubernetes/кластерную архитектуру.

Спасибо за внимание. Если у вас есть вопросы по конкретным шагам (сертификаты, масштабирование, резервное копирование или миграция), опишите вашу конфигурацию, и я помогу с рекомендациями.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро