Gitlab - удобный инструмент для управления кодом, задачами и процессами CI/CD. Его можно быстро развернуть в Docker и это достаточно хороший и долговременный способ. С нагрузкой ниже 15и пользователей он вполне быстр и не требует дополнительных манипуляций. При росте команды свыше 15и человек, желательно вынести базу PostgreSQL на отдельный сервер без docker - это придаст ему производительности и надежности вплоть до границы 45-50 пользователей.

Системные требования

Минимально Gitlab для стабильной работы требуется:

  • 2-4 ядра CPU
  • 8 GB RAM
  • 45 GB SSD

Если у вас активная разработка, которая написала много кода и постоянно его дописывает, смело выделяйте в 2 раза больше:

  • 4-8 ядер CPU
  • 16-32 GB RAM
  • 45 GB SSD + [размер ваших имеющихся репозиториев]

Подготовка и установка

Gitlab хранит свои данные на диске (конфигурации, данные git, базу postgresql, логи). Нужно выделить ему место под их хранение:

mkdir -p /srv/gitlab/config
mkdir -p /srv/gitlab/data
mkdir -p /var/log/gitlab

При запуске gitlab в docker практически все настройки можно передать ему прям в команде запуска:

docker run --hostname git.example.com \
 --publish 80:80 \
 --publish 22:22 \
 --name gitlab \
 --rm \
 --env GITLAB_OMNIBUS_CONFIG="external_url 'http://git.example.com'; gitlab_rails['lfs_enabled'] = true; " \
 --volume /srv/gitlab/config:/etc/gitlab \
 --volume /var/log/gitlab:/var/log/gitlab \
 --volume /srv/gitlab/data:/var/opt/gitlab \
 gitlab/gitlab-ce:13.12.12-ce.0

Для демонстрационно запуска этого достаточно. Но конечно использовать "просто запуск докера руками" в корпоративном сервисе не следует. Давайте настроим наш сервер под Gitlab полноценно.

Настройка sshd на хосте

Поскольку порт 22 будет занят нашим Gitlab под нужны ssh+git - нам нужно переместить ssh самого хоста с порта по умолчанию 22 на другой порт, например 2022. Для этого откроем файл /etc/ssh/sshd_config и сменим порт:

...
#Port 22
Port 2022
...

после чего перезапустим ssh:

systemctl restart sshd

Правила хорошего тона

Для корпоративого сервиса, как и для любого другого важен порядок и единая точка входа во все Ваши сервисы. В современных системах этой точкой входа является systemd и его утилита управления systemctl. Вы можете запустить команду systemctl status без параметров и увидеть все Ваши сервисы в системе:

Systemd отвечает за запуск, остановку и поддержание состояния сервисов. Было бы хорошо и gitlab запускать через него. В общем это делатеся путем создания одного файла. Создаем файл /lib/systemd/system/gitlab.service и сохраняем в него содержимое с командой запуска и командой остановки gitlab:

[Unit]
Description=Gitlab
After=network.target docker.service

[Service]
ExecStart=/usr/bin/docker run  --hostname git.example.com --publish 80:80 --publish 22:22  --name gitlab  --rm  --env GITLAB_OMNIBUS_CONFIG="external_url 'http://git.example.com'; gitlab_rails['lfs_enabled'] = true; "   --volume /srv/gitlab/config:/etc/gitlab  --volume /var/log/gitlab:/var/log/gitlab  --volume /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:13.12.12-ce.0
ExecStop=/bin/bash -c "/usr/bin/docker ps | /bin/grep 'gitlab-ce' | /usr/bin/awk '{print $1}' | /usr/bin/xargs docker stop"
Restart=always
RestartSec=90s

[Install]
WantedBy=multi-user.target

Теперь мы можем запустить его и включить его автоматический запуск при старте системы:

systemctl start gitlab
systemctl enable gitlab

Теперь это полноценный сервис, который мы можем мониторить, включать, выключать, который штатно завершиться при завершении работы системы и так же штатно запуститься при старте системы. Можем видеть его статус с помощью команды systemctl status gitlab:

Рекомендации

  • Всегда указывайте конкретную версию которую вы запускаете: docker run ... gitlab/gitlab-ce:13.12.12-ce.0 и не используйте latest. Вы ведь не хотите чтобы оно само без предупреждения обновилось и создало вам внезапные проблемы?
  • Всегда выделяйте ресурсы по месту на диске с некоторым запасом. Внутри работает БД PostgreSQL, которая может поломаться из за закончившегося на диске места.

Итог

На порту 22 у нас работает ssh+git. На порту 2022 ssh от нашего gitlab. Web-интерфейс gitlab-а доступен в браузере по http://ip-адрес-вашего-сервера/ для дальнейшей настройки.