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

Установка GitLab в Docker и Docker Compose на Ubuntu 20.04

• 8 min read • DevOps • Обновлено 19 Nov 2025
GitLab в Docker на Ubuntu 20.04
GitLab в Docker на Ubuntu 20.04

Важно: перед началом убедитесь, что у вас есть доступ к корневому пользователю или права sudo и выделено не менее 4 ГБ ОЗУ для комфортной работы GitLab.

Введение

GitLab — это веб‑приложение для хранения Git‑репозиториев с встроенными возможностями CI/CD, отслеживания задач, вики и ревью кода. В этом руководстве мы создадим GitLab CE (Community Edition) внутри Docker‑контейнера и запустим сервис через docker‑compose на Ubuntu 20.04.

Определения одним предложением:

  • Docker — механизм контейнеризации приложений;
  • Docker Compose — инструмент для запуска нескольких контейнеров как одного проекта;
  • GitLab CE — бесплатная версия GitLab с основными функциями.

Кому полезно: системным администраторам, DevOps‑инженерам и тимлидам, которые хотят быстро развернуть GitLab в изолированной среде.

Что мы сделаем

  • Установим Docker и Docker Compose на Ubuntu 20.04.
  • Настроим структуру директорий и переменные окружения для проекта.
  • Подготовим docker‑compose.yml для GitLab.
  • Сгенерируем SSL‑сертификаты LetsEncrypt и dhparam.
  • Запустим контейнер и выполним пост‑установку.
  • Добавим базовую эксплуатационную конфигурацию, резервное копирование и рекомендации по безопасности.

Требования

  • Ubuntu Server 20.04 (Focal Fossa).
  • Минимум 4 ГБ оперативной памяти.
  • Права root или sudo.
  • Доменное имя, указывающее на сервер (например, gitlab.example.com).

Шаг 1 — Установка Docker и Docker Compose

Сначала обновите пакеты и установите docker и docker-compose из репозиториев Ubuntu:

sudo apt update
sudo apt install docker.io containerd docker-compose

После установки включите и запустите systemd‑сервис Docker:

sudo systemctl start docker
sudo systemctl enable docker

Проверьте статус сервиса:

systemctl status docker

Для быстрых тестов выполните контейнер hello‑world:

docker run hello-world

Изображение ниже показывает пример успешного запуска Docker.

Экран с результатом установки Docker на Ubuntu 20.04

Вывод docker run hello-world

Примечание: если у вас ограниченный доступ к репозиториям, можно установить Docker официальным скриптом с сайта docker.com, но в этой инструкции мы используем пакет Ubuntu для простоты и совместимости с Ubuntu 20.04.

Шаг 2 — Настройка директорий проекта GitLab

Создайте директорию проекта и перейдите в неё:

mkdir -p gitlab; cd gitlab/

Создайте директорию данных GitLab и поддиректории для конфигураций, логов и данных:

sudo mkdir -p /srv/gitlab/{config/ssl,logs,data}

В каталоге проекта создайте файл .env, который будет содержать переменную окружения GITLAB_HOME:

vim .env

Содержимое .env (одна строка):

GITLAB_HOME=/srv/gitlab

Файл .env позволит docker‑compose подставлять путь к хранилищу данных при монтировании томов.

docker-compose.yml

Создайте docker-compose.yml в каталоге проекта:

vim docker-compose.yml

Ниже — минимальная и рабочая конфигурация службы web для GitLab CE. Замените gitlab.hakase-labs.io на ваш домен и при необходимости поменяйте SSH‑порт.

version: '3.6'
services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'gitlab.hakase-labs.io'

    environment:
      GITLAB_OMNIBUS_CONFIG: |
        # Add any other gitlab.rb configuration here, each on its own line
        external_url 'https://gitlab.hakase-labs.io'
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
        nginx['redirect_http_to_https'] = true
        nginx['ssl_certificate'] = "/etc/gitlab/ssl/fullchain.pem"
        nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/privkey.pem"
        nginx['ssl_dhparam'] = "/etc/gitlab/ssl/dhparams.pem"

    ports:
      - '80:80'
      - '443:443'
      - '2224:22'

    volumes:
      - '${GITLAB_HOME}/config:/etc/gitlab'
      - '${GITLAB_HOME}/logs:/var/log/gitlab'
      - '${GITLAB_HOME}/data:/var/opt/gitlab'
      - '${GITLAB_HOME}/config/ssl:/etc/gitlab/ssl'

Сохраните файл. Разбор секций:

  • image: образ gitlab/gitlab-ce:latest — свежая CE‑сборка;
  • hostname и external_url должны соответствовать домену, для корректной генерации ссылок в GitLab;
  • gitlab_shell_ssh_port — порт внутри контейнера, переадресованный на внешний порт (2224 в примере);
  • volumes — монтирование конфигураций/логов/данных на хост, чтобы сохранить состояние при обновлениях контейнера.

Генерация SSL‑сертификатов и dhparam

Мы рекомендуем использовать LetsEncrypt для публичных доменов. Установите certbot:

sudo apt install certbot

Затем получите сертификат в режиме standalone (осторожно: этот режим временно запускает собственный HTTP‑сервер на порту 80):

certbot certonly --rsa-key-size 2048 --standalone --agree-tos --no-eff-email --email you@example.com -d gitlab.hakase-labs.io

После успешного получения сертификатов скопируйте их в каталог /srv/gitlab/config/ssl:

sudo cp /etc/letsencrypt/live/gitlab.hakase-labs.io/fullchain.pem /srv/gitlab/config/ssl/
sudo cp /etc/letsencrypt/live/gitlab.hakase-labs.io/privkey.pem /srv/gitlab/config/ssl/

Сгенерируйте dhparams (может занять время):

sudo openssl dhparam -out /srv/gitlab/config/ssl/dhparams.pem 2048

Иллюстрация настройки SSL для GitLab

Совет: на продакшн‑серверах храните резервные копии сертификатов и приватных ключей с ограниченным доступом.

Шаг 3 — Сборка и запуск контейнера GitLab

Проверьте содержимое каталога проекта и структуру /srv/gitlab:

ls -lah ~/gitlab/
tree /srv/gitlab

Пример вывода приведён на скриншоте ниже.

Структура файлов проекта GitLab и директории данных

Запустите docker-compose в фоновом режиме:

cd ~/gitlab
docker-compose up -d

Мониторьте запуск и просматривайте лог запуска командой:

docker-compose ps
docker-compose logs -f

Для просмотра портов используйте ss:

ss -plnt

Если всё корректно, контейнер будет отображён как запущенный, а порты 80, 443 и внешний SSH‑порт (2224 в примере) будут слушаться.

Вывод при создании Docker контейнера для GitLab

Проверка запущенного контейнера GitLab и прослушиваемых портов

Если контейнер не запускается, см. раздел «Устранение неисправностей» ниже.

Шаг 4 — Пост‑установка в веб‑интерфейсе

Откройте браузер и перейдите по адресу вашего GitLab (https://gitlab.hakase-labs.io/ в примере). При первом запуске вам будет предложено сменить пароль пользователя root.

Страница смены пароля GitLab

Установите надёжный пароль и войдите под пользователем root.

Страница входа GitLab

После входа вы попадёте в дашборд GitLab.

Дашборд GitLab

Поздравляем — базовая установка завершена.

Шаг 5 — Базовая эксплуатация контейнера GitLab

Перейдите в каталог проекта и проверьте состояние контейнера:

cd ~/gitlab
docker-compose ps

Проверка статуса сервисов внутри контейнера

Чтобы посмотреть статус внутренних сервисов GitLab используйте:

sudo docker exec -it gitlab_web_1 gitlab-ctl status

Проверка статусов сервисов внутри контейнера

Вход в контейнер

Для выполнения диагностических команд войдите в контейнер:

sudo docker exec -it gitlab_web_1 /bin/bash

Проверьте версию ОС внутри контейнера:

cat /etc/lsb-release

В приведённом примере контейнер основан на Ubuntu 16.04.

Выйдите из контейнера командой exit.

Редактирование конфигурации gitlab.rb

Если нужно внести изменения в /etc/gitlab/gitlab.rb, сделайте это из контейнера (или отредактируйте файл на хосте в ${GITLAB_HOME}/config):

sudo docker exec -it gitlab_web_1 editor /etc/gitlab/gitlab.rb

После изменения примените конфигурацию перезапуском контейнера:

sudo docker restart gitlab_web_1

Проверьте состояние служб и доступность.

Настройка GitLab внутри контейнера

Эксплуатационные рекомендации и безопасность

  1. Фаервол (UFW): откройте нужные порты и закройте остальное:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 2224/tcp
sudo ufw enable
sudo ufw status
  1. Логи и мониторинг: собирайте логи из ${GITLAB_HOME}/logs и настраивайте централизованный лог‑агрегатор (ELK/EFK/Graylog).

  2. Резервное копирование: используйте встроенную команду для создания backup внутри контейнера или копируйте томы данных.

Создание бэкапа:

sudo docker exec -t gitlab_web_1 gitlab-rake gitlab:backup:create

Копирование конфигураций и данных на хост:

sudo tar -czf gitlab-config-$(date +%F).tgz -C /srv/gitlab config
sudo tar -czf gitlab-data-$(date +%F).tgz -C /srv/gitlab data
  1. Обновления: обновляйте образ gitlab/gitlab-ce аккуратно. Сначала тестируйте обновления на копии данных, затем выполняйте обновление в окно обслуживания.

  2. Доступ по SSH: если вы используете альтернативный SSH‑порт, не забудьте открыть его в фаерволе и предоставить инструкцию разработчикам по подключениям (ssh -p 2224 git@gitlab.example.com).

  3. Минимизация прав доступа: держите приватные ключи и сертификаты с ограниченным доступом; используйте менеджеры секретов для CI при необходимости.

Резервный план и откат

  • Перед обновлением создайте полный бэкап данных и конфигурации.
  • Если обновление привело к ошибкам, остановите контейнер, восстановите файлы из бэкапа и запустите предыдущую версию образа.

Пример восстановления из резервной копии (в зависимости от типа бэкапа):

# Пример восстановления конфигурации /srv/gitlab из архива
sudo tar -xzf gitlab-config-2022-01-01.tgz -C /srv/gitlab
sudo docker restart gitlab_web_1

Устранение неисправностей — основные случаи

  1. Контейнер не запускается:
    • Посмотрите логи: docker-compose logs -f
    • Проверьте права на /srv/gitlab (контейнер должен иметь доступ к монтируемым директориям).
  2. Невозможно получить SSL — порт 80 занят:
    • Остановите сервисы, использующие 80, или получите сертификат с помощью DNS‑challenge.
  3. Проблемы с памятью — GitLab потребляет ресурсы:
    • Убедитесь, что выделено >= 4 ГБ ОЗУ; для больших инсталляций требуется больше.
  4. SSH‑подключение не проходит:
    • Проверьте перенаправление портов в docker‑compose и правила фаервола.

Роль‑ориентированные чек‑листы

Администратор (развёртывание):

  • Настроил DNS на домен gitlab.example.com.
  • Установил Docker и docker‑compose.
  • Создал /srv/gitlab и установил правильные права.
  • Получил SSL‑сертификат и dhparam.
  • Запустил docker‑compose и проверил работу сервисов.

DevOps (эксплуатация):

  • Настроил бэкапы и проверил восстановление.
  • Внедрил мониторинг и алерты.
  • Спланировал процесс обновления/отката.

Разработчик (первый вход):

  • Получил инструкцию по SSH‑подключению (порт и ключи).
  • Создал первый проект и выполнил push.

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

  • Контейнер gitlab_web_1 в состоянии Up.
  • HTTPS доступ к веб‑интерфейсу по указанному домену.
  • Возможность смены пароля root и входа в систему.
  • Успешный git push по HTTPS и/или SSH (в соответствии с вашей конфигурацией).
  • Наличие резервной копии конфигурации и данных.

Тесты и проверочные сценарии

  1. Запрос страницы логина — ожидаемый результат: статус 200 и форма входа.
  2. Смена пароля root — ожидаемый результат: успешное обновление и вход в систему.
  3. Создание проекта, клонирование, коммит и push — ожидаемый результат: репозиторий доступен, коммиты видны.
  4. Откат обновления: симулировать неудачное обновление и восстановить данные из бэкапа.

Модель принятия решений: Docker vs Omnibus

Используйте Docker когда:

  • Вы хотите изолированную инсталляцию и быстрый деплой;
  • Вы планируете контейнеризировать инфраструктуру и использовать orchestrator.

Используйте Omnibus‑пакет когда:

  • Вы хотите минимизировать уровень абстракции и запускать GitLab как системную службу;
  • Требуется простая инсталляция на «сырой» сервер без контейнеризации.
flowchart TD
  A[Нужен GitLab] --> B{Контейнеризация?}
  B -- Да --> C[Docker + Docker Compose]
  B -- Нет --> D[Omnibus пакет]
  C --> E{Требуется масштабирование}
  E -- Да --> F[Orchestrator 'K8s/Swarm']
  E -- Нет --> G[Локальный Docker Compose]

Быстрый чеит‑шит команд

  • Старт: docker-compose up -d
  • Останов: docker-compose down
  • Логи: docker-compose logs -f
  • Состояние: docker-compose ps
  • Внутри контейнера: docker exec -it gitlab_web_1 /bin/bash
  • Статус сервисов: docker exec -it gitlab_web_1 gitlab-ctl status
  • Создать бэкап: docker exec -t gitlab_web_1 gitlab-rake gitlab:backup:create

Безопасность и соответствие требованиям приватности

  • Храните приватные ключи сертификатов в защищённой директории и ограничьте доступ.
  • Используйте HTTPS для всех внешних подключений.
  • Отключите неиспользуемые сервисы и ограничьте доступ по IP при необходимости.
  • Для соответствия GDPR: документируйте, какие данные пользователей сохраняются, и настройте процессы удаления/экспорта данных по запросам.

Частые ошибки и советы по их устранению

  • Проблемы с правами на /srv/gitlab: убедитесь, что владелец и права позволяют записи от UID контейнера.
  • Certbot не может занять порт 80: временно остановите сервисы на 80 или используйте DNS‑challenge.
  • Недостаточно RAM: увеличьте ресурсы VM или используйте более лёгкие компоненты для CI.

Итог и дальнейшие шаги

Вы успешно развернули GitLab CE в Docker на Ubuntu 20.04. Дальше рекомендуем:

  • Настроить интеграцию CI/CD и runners;
  • Внедрить мониторинг и оповещения;
  • Настроить регламент обновлений и тестирование на стенде;
  • Организовать регулярные бэкапы и их автоматическую проверку.

В конце — контрольный список для быстрой проверки установки:

  • Docker запущен и работает.
  • Контейнер gitlab_web_1 в состоянии Up.
  • Веб‑интерфейс доступен по HTTPS.
  • SSH для Git работает на назначенном порту.
  • Резервное копирование протестировано.

Спасибо за внимание. При возникновении ошибок присылайте логи docker-compose для быстрого анализа.

Поделиться: 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 быстро