Как установить GitLab CE с Docker на Debian 12
Gitlab Server — это версия облачного контроля версий Gitlab с открытым исходным кодом. Преимущество самостоятельного размещения ваших репозиториев перед облачным хостингом заключается в том, что вы получаете полный контроль над своим кодом.
В этом руководстве показано, как установить Gitlab Server с помощью Docker в Debian 12. Сервер Gitlab предлагает две версии — бесплатную версию Community и платную версию Enterprise. Мы будем устанавливать версию Community. Вы можете легко обновить его до версии Enterprise, если вам нужны дополнительные функции.
Это руководство изначально было написано Навджотом Сингхом для Ubuntu 22.04 и было изменено и обновлено для Debian 12.
Предварительные условия
- Вы вошли в систему как пользователь root.
- Все обновляется.
Сервер под управлением Debian 12.
Полное доменное имя (FQDN), указывающее на сервер, например gitlab.example.com
.
apt update && apt upgrade
Шаг 1 — Установите зависимости
Перед установкой Gitlab мы должны установить определенные пакеты, необходимые в ходе нашего руководства.
apt install ca-certificates curl openssh-server apt-transport-https gnupg lsb-release -y
Некоторые из этих пакетов могут быть предварительно установлены в вашей системе.
Шаг 2. Измените порт SSH системы.
Gitlab использует порт SSH по умолчанию, который будет конфликтовать с портом SSH системы. Для достижения наилучших результатов лучше изменить порт системы по умолчанию.
Для этого откройте файл /etc/ssh/sshd_config
для редактирования.
nano /etc/ssh/sshd_config
Найдите следующую строку, удалите решетку (#) перед ней и измените значение с 22 на любое другое по вашему выбору. Для нашего урока мы выбрали 2425, изменив
#Port 22
к
Port 2222
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Перезапустите службу SSH.
systemctl restart sshd
Закройте текущий сеанс SSH и повторно войдите в систему, используя новый порт.
ssh username@<serverIP> -p 2222
Шаг 3. Установите Docker и Docker Compose.
Добавьте официальный ключ GPG Docker.
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
Выполните следующую команду, чтобы добавить репозиторий Docker.
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Обновите систему, включив в нее репозиторий Docker.
apt update
Установите Докер.
apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
В этом руководстве будет использоваться плагин Docker Compose v2 вместо устаревшего двоичного файла. Поэтому команда для его запуска изменилась с docker-compose
на docker compose
и это отражено здесь.
Docker запускается с повышенными привилегиями, поэтому вам придется часто использовать sudo
для запуска команд. Лучше добавить свою учетную запись пользователя Linux в группу пользователей.
usermod -aG docker ${USER}
Переменная $ {USER}
выбирает текущую системную учетную запись, с которой выполнен вход. Если вы не вошли в систему под пользователем, которому хотите предоставить права, замените $ {USER}
на имя пользователя.
Чтобы подать заявку на членство в новой группе, выйдите из сервера и снова войдите в него или используйте следующую команду. Вам будет предложено ввести пароль пользователя.
su - $(USER)
Шаг 4. Настройка томов Docker
Перед установкой мы должны указать местоположение данных и конфигурации Gitlab, к которым можно будет получить доступ через тома Docker.
Создайте каталог тома Docker.
mkdir -p /opt/gitlab/vol
Перейдите в каталог /opt/gitlab.
cd /opt/gitlab
Создайте файл переменной среды и откройте его для редактирования.
nano .env
Вставьте следующий код, чтобы определить переменную $GITLAB_HOME
.
GITLAB_HOME=/opt/gitlab/vol
Контейнер Gitlab использует смонтированные на хосте тома для хранения постоянных данных. В следующей таблице показано сопоставление локального расположения каталогов Gitlab с расположением контейнеров и их соответствующим использованием.
Local Location | Container Location | Usage |
---|---|---|
$GITLAB_HOME/data | /var/opt/gitlab | For storing application data. |
$GITLAB_HOME/logs | /var/log/gitlab | For storing logs. |
$GITLAB_HOME/config | /etc/gitlab | For storing Gitlab configuration. |
Шаг 5. Установите Gitlab с помощью Docker Compose
Убедитесь, что вы находитесь в каталоге создания Docker в Gitlab.
Создайте и откройте файл конфигурации Docker Compose для редактирования.
nano docker-compose.yml
Вставьте в него следующий код.
version: '3.6'
services:
web:
image: 'gitlab/gitlab-ee:latest'
container_name: 'gitlab-howtoforge'
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'] = "email-smtp.us-west-2.amazonaws.com"
gitlab_rails['smtp_user_name'] = "SESUsername"
gitlab_rails['smtp_password'] = "SESKey"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['gitlab_email_from'] = '[email '
gitlab_rails['gitlab_email_reply_to'] = '[email '
# Add any other gitlab.rb configuration here, each on its own line
ports:
- '80:80'
- '443:443'
- '22:22'
- '587:587'
volumes:
- '$GITLAB_HOME/config:/etc/gitlab'
- '$GITLAB_HOME/logs:/var/log/gitlab'
- '$GITLAB_HOME/data:/var/opt/gitlab'
shm_size: '256m'
Давайте посмотрим на все параметры, определенные в файле.
- image относится к местоположению Docker-образа Gitlab на Dockerhub.
- container_name позволяет вам применить метку к вашему контейнеру Docker для использования при ссылке на контейнер в сети Docker.
- restart определяет политику перезапуска контейнера. Установка значения всегда означает, что при выходе из контейнера он автоматически перезапускается.
- hostname определяет внутреннее имя хоста контейнера или, в данном случае, URL-адрес, по которому будет установлен ваш Gitlab.
- environment предоставляет переменную GITLAB_OMNIBUS_CONFIG, которая позволяет вам вводить любые параметры конфигурации Gitlab.
- external_url относится к домену, на котором будет установлен ваш Gitlab. Использование протокола
https
обеспечивает автоматическую установку SSL-сертификата Let's Encrypt. - Сведения о SMTP — мы включили сведения о SMTP, чтобы экземпляр Gitlab мог отправлять важные электронные письма и уведомления. В нашем уроке мы используем сервис Amazon SES. Однако вы можете воспользоваться любой услугой по вашему выбору. Ознакомьтесь с документацией Gitlab по почтовым программам SMTP, чтобы узнать, как их настроить.
- ports указывает контейнеру опубликовать порты или диапазон портов на хосте. Поскольку Gitlab нужны порты 22 (SSH), 80 (HTTP), 443 (HTTPS) и 587 (SMTP), они доступны системе. Если вы хотите, чтобы Gitlab использовал нестандартный порт на вашем сервере (вероятно, потому, что он недоступен), вам следует сначала указать порт хоста, а затем порт контейнера. Например, поскольку ваш сервер уже использует порт SSH(22), вы можете указать Gitlab использовать SSH через другой порт, скажем, 3333. Затем вы должны изменить 22:22 в приведенном выше файле на < Strong>3333:22. Вам также потребуется добавить строку
gitlab_rails['gitlab_shell_ssh_port']=3333
в GITLAB_OMNIBUS_CONFIG выше. - volume определяет каталоги на сервере для хранения постоянных данных. Как определено на шаге 5,
$GITLAB_HOME
теперь можно использовать в файле компоновки для монтирования соответствующих каталогов в контейнере. - shm_size относится к общей памяти, используемой контейнером. По умолчанию Docker выделяет 64 МБ в каталог общей памяти (монтируется в
/dev/shm
). Этого может оказаться недостаточно для метрик Prometheus, которые генерирует контейнер Gitlab. Таким образом, минимум 256 МБ общей памяти обеспечивает бесперебойную работу докера. Вы можете увеличить его значение в зависимости от оперативной памяти вашей системы. Кроме того, вы можете отключить метрики Prometheus из административной области после установки. Мы рассмотрим это на следующем этапе.
Запустите контейнер Gitlab Docker.
docker compose up -d
Для завершения процесса потребуется несколько минут. Вы можете следить за прогрессом, используя журналы Docker.
docker logs gitlab-howtoforge -f
Нажмите Ctrl + C, чтобы выйти из мониторинга журнала.
Вы можете проверить статус контейнера Gitlab, используя следующую команду.
docker ps
Gitlab автоматически генерирует пароль root и сохраняет его в файле initiall_root_password
. Этот файл можно найти в каталоге /srv/gitlab/config
. Выполните следующую команду, чтобы просмотреть пароль root.
cat /opt/gitlab/vol/config/initial_root_password
Вы получите аналогичный результат.
# WARNING: This value is valid only in the following conditions
# 1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).
# 2. Password hasn't been changed manually, either via UI or via command line.
#
# If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.
Password: Hz3t7Etn18wB6VAfBWyDlYbN2VQdMCO0xIIENfDHcFo=
# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.
Скопируйте пароль и сохраните его для дальнейшего использования. Теперь, когда все настроено, можно приступить к настройке.
Шаг 6 — Настройка Gitlab
Доступ к Gitlab
Откройте URL-адрес https://gitlab.example.com
в своем браузере, и вы увидите следующий экран входа в систему.
Введите root
в качестве имени пользователя и пароля, которые вы получили на предыдущем шаге, чтобы войти в свою панель управления Gitlab. При входе в систему вы попадете на следующий экран панели управления.
Как видите, Gitlab уже создал проект для мониторинга экземпляра.
Ограничить публичную регистрацию
По умолчанию любой может создать учетную запись и получить доступ. Если вам это не нужно, вы можете отключить его. К счастью, его настройка отображается в виде всплывающего экрана на приборной панели. Нажмите кнопку Отключить, чтобы ограничить публичную регистрацию в вашем экземпляре Gitlab. Вы будете перенаправлены на следующую страницу настроек.
Снимите флажок с параметра Регистрация включена, чтобы ограничить их. Нажмите кнопку Сохранить изменения, чтобы применить настройки.
Если вы не видите всплывающее окно на своей панели управления, вы можете получить доступ к странице настроек, нажав кнопку Меню и открыв оттуда панель администратора.
Зайдя в панель администратора, наведите указатель мыши на параметр Настройки на левой боковой панели и выберите подменю Общие. Отсюда вы можете перейти на панель Ограничения регистрации.
Настроить профиль Gitlab
Ваш профиль по умолчанию пуст, и в нем ничего не отображается. Чтобы изменить это, щелкните значок пользователя в верхнем левом углу, чтобы открыть раскрывающееся меню, и выберите параметр Редактировать профиль.
Вы попадете на страницу настроек профиля, где сможете добавить свое имя, адрес электронной почты и другую информацию о себе. Когда закончите, нажмите Обновить настройки профиля. Не возвращайтесь на домашнюю страницу, так как здесь нам нужно настроить еще кое-что.
Изменить корневой пароль
Это один из самых важных шагов. Вам следует немедленно изменить пароль root по умолчанию. В более ранних версиях Gitlab требовал, чтобы вы изменили его во время установки, но теперь он сделал это необязательным. Чтобы изменить пароль, нажмите меню Пароль на левой боковой панели.
Введите данные своего пароля и нажмите Сохранить пароль, чтобы внести изменения. Вы выйдете из своего экземпляра, и вам придется войти снова.
Изменение имени пользователя
Вы можете изменить имя пользователя Gitlab по умолчанию с root
на любое по вашему выбору. Для этого нажмите меню Аккаунт на левой боковой панели.
На странице введите новое имя пользователя и нажмите кнопку Обновить имя пользователя, чтобы внести изменения. Вам снова будет предложено подтвердить. Нажмите кнопку Обновить имя пользователя еще раз, чтобы подтвердить изменение.
Вам также следует включить здесь двухфакторную аутентификацию, чтобы повысить безопасность вашей учетной записи.
Отключите метрики Prometheus и улучшите конфиденциальность
На предыдущем шаге мы обсуждали увеличение размера общей памяти для капли и сохранение его на уровне минимум 256 МБ. В основном это требуется для хранения данных, связанных с метриками Prometheus, на диске. Если вы не используете эту функцию, вам следует отключить ее. Сделать это можно только после установки. Чтобы отключить его, откройте Панель администратора в строке меню.
Зайдя в панель администратора, откройте пункт меню Настройки >> Метрики и профилирование.
Разверните раздел «Метрики — Prometheus» на странице «Метрики» и снимите флажок Включить конечную точку показателей работоспособности и производительности. Нажмите кнопку Сохранить изменения, чтобы применить изменения.
Gitlab также собирает информацию об использовании при каждой установке. Если вы цените конфиденциальность и не хотите, чтобы это происходило, разверните параметр Статистика использования на той же странице и снимите флажок Включить сервисный пинг. Нажмите кнопку Сохранить изменения, чтобы применить изменения.
Шаг 7 — Создание вашего первого проекта
Давайте попробуем создать наш первый проект и отправить коммит.
Добавление вашего SSH-ключа
Прежде чем продолжить, нам следует добавить наш SSH-ключ. Это позволяет нам взаимодействовать с нашей установкой без использования каких-либо паролей. Если у вас есть ключ SSH, вы можете пропустить следующую команду. Если у вас его нет, вы можете создать его с помощью следующей команды.
$ ssh-keygen -t ed25519 -C "gitlab.example.com"
Эта команда является общей для macOS, Linux и Git Bash/WSL в Windows. Примите значения по умолчанию и введите надежную парольную фразу. Мы создаем ключи SSH в терминале Windows Powershell.
Generating public/private rsa key pair.
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\<username>/.ssh/id_ed25519):
Enter same passphrase again:
Your identification has been saved in C:\Users\<username>/.ssh/id_ed25519.
Your public key has been saved in C:\Users\<username>/.ssh/id_ed25519.pub.
SHA256:CI3Ja1LSTN+j4LQnDYkAoP+DvZB8SWrD26zDyUBRbUY gitlab.example.com
+--[ED25519 256]--+
|* ..+E |
|. + / o o |
| o = B o . |
|. o B = S |
|.o X + |
| +X.* |
| .=B o |
+----[SHA256]-----+
Добавьте идентификатор закрытого ключа в агент аутентификации SSH. Убедитесь, что служба Агент аутентификации OpenSSH запущена, если вы используете Windows. Если вы используете Linux или macOS, выполните следующую команду.
$ eval $(ssh-agent -s)
Добавьте ключ.
$ ssh-add C:\Users\<username>/.ssh/id_ed25519
В Linux и macOS команда изменится на
$ ssh-add ~/.ssh/id_ed25519
Вам будет предложено ввести парольную фразу. Введите его и ключ будет добавлен.
Далее нам нужно сохранить эти настройки в файл ~/.ssh/config
. В Windows это будет каталог C:\Users\
. Вставьте следующий код в конец файла.
Host gitlab.example.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_ed25519
В этом файле путь будет одинаковым во всех операционных системах. Сохраните файл.
Далее нам нужно скопировать открытый ключ в нашу учетную запись Gitlab. Вы можете отобразить свой открытый ключ с помощью следующей команды. Здесь путь снова будет работать во всех операционных системах.
$ cat ~/.ssh/id_ed25519.pub
Вы получите аналогичный результат.
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAml2KPhmGkdMWv7jksLKO13u3g1zI9CumKDQSpv7lYh gitlab.example.com
Откройте настройки своего профиля в Gitlab и выберите меню Ключи SSH на левой боковой панели.
Вставьте ключ SSH в соответствующее поле и нажмите Добавить ключ, чтобы продолжить.
Далее нам нужно проверить, успешно ли работает наше SSH-соединение. Запустите следующую команду на терминале вашего ПК.
$ ssh -T [email
Вы получите аналогичный результат. Сначала вам будет предложено добавить ключ SSH в список известных хостов вашей системы. Введите да, чтобы продолжить. Вы также получите предупреждение о том, что ключ SSH для экземпляра Gitlab и IP-адрес вашего сервера не совпадают, и вам снова будет задан вопрос, хотите ли вы продолжить. Введите да еще раз. Наконец, вы получите сообщение об успешном подключении к вашему экземпляру Gitlab.
The authenticity of host 'gitlab.example.com (192.0.2.0)' can't be established.
ECDSA key fingerprint is SHA256:g5mOqAY2A3lhXW0flnLGdSU7RrDnbRFKVJCquAhLXqk.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitlab.example.com' (ECDSA) to the list of known hosts.
Warning: the ECDSA host key for 'gitlab.example.com' differs from the key for the IP address '192.0.2.0'
Are you sure you want to continue connecting (yes/no)? yes
Offending key for IP in C:\Users\navjo/.ssh/known_hosts:7
Welcome to GitLab, @navjot!
Теперь мы можем перейти к созданию нашего первого репозитория и сделать несколько коммитов.
Создание проекта
Каждый репозиторий в Gitlab принадлежит проекту. Проект включает в себя репозиторий, систему отслеживания ошибок, запросы на слияние, вики, конвейеры непрерывной интеграции и непрерывной доставки (CI/CD) и множество других функций.
Чтобы создать свой первый репозиторий, нажмите кнопку Новый проект на главной странице.
Вы попадете на страницу «Новый проект», где вам будет предложено несколько вариантов создания нового проекта.
Чтобы продолжить, выберите параметр Создать пустой проект. На следующей странице введите название проекта. Выберите свое имя пользователя в раскрывающемся меню параметра URL-адрес проекта. Установите пул проекта. Введите описание проекта, если хотите, и измените видимость проекта в соответствии с вашими потребностями. Вы можете инициализировать свой репозиторий с помощью файла README
.
Закончив, нажмите Создать проект. Вы попадете на страницу своего репозитория с одним пустым файлом README.md
.
Теперь, когда наш репозиторий запущен, давайте попробуем добавить журнал изменений из командной строки. Введите следующие команды на своем компьютере, чтобы создать файл CHANGELOG
и отправить его обратно в репозиторий. Убедитесь, что на вашем компьютере установлен Git.
Первым шагом является клонирование репозитория. Вы можете клонировать либо с помощью SSH, либо HTTPS. Клонируйте с помощью SSH. Вам будет предложено ввести парольную фразу.
$ git clone [email :user/howtoforge-test.git
Введите оставшиеся команды для создания и отправки файла CHANGELOG
.
$ cd howtoforge-test
$ touch CHANGELOG # Or create the file in your editor and enter a project description
$ git add CHANGELOG
$ git commit -m "add Changelog"
$ git push -u origin main
Во время команды push вам снова будет предложено ввести парольную фразу.
Вернитесь на страницу своего проекта Gitlab, и вы увидите там файл CHANGELOG
. Поздравляем! Вы успешно создали свой первый проект и зафиксировали в нем файл.
Шаг 8. Управление контейнером Gitlab
Давайте посмотрим, как можно управлять контейнером Gitlab с помощью простых команд.
Если в какой-то момент вы захотите остановить контейнер, введите следующую команду из каталога создания Docker.
$ docker compose down
Чтобы запустить их снова, введите следующую команду.
$ docker compose up -d
Если вы хотите изменить какой-либо параметр или добавить параметр в свой экземпляр Gitlab, вы можете сделать это, отредактировав файл docker-compose.yml
в переменной GITLAB_OMNIBUS_CONFIG. После внесения изменений вам потребуется перезапустить контейнер, чтобы изменения вступили в силу. Выполните следующие команды, чтобы обновить контейнер новой конфигурацией.
$ docker compose down --remove-orphans
$ docker compose up -d
Чтобы перезапустить контейнер, введите следующую команду. Однако следующая команда перезапуска не фиксирует никаких изменений, внесенных в файл компоновки Docker.
$ docker compose restart
Доступ к оболочке контейнера.
$ docker exec -it <container name> bash
Шаг 9 — Резервное копирование Gitlab
Резервное копирование Gitlab можно выполнить с помощью одной команды.
$ docker exec -t gitlab-howtoforge gitlab-backup create
Файл резервной копии сохраняется в каталоге /srv/gitlab/data/backups
. Эта резервная копия не содержит файл конфигурации gitlab-secrets.json
. Этот файл находится в каталоге /srv/gitlab/config
. Поэтому вам необходимо сделать резервную копию этого файла отдельно. Существует еще один файл конфигурации, gitlab.rb
, который содержит все настройки экземпляра Gitlab. Но в нашем случае мы использовали переменную GITLAB_OMNIBUS_CONFIG в нашем файле компоновки, поэтому Gitlab не использует этот файл. Чтобы внести какие-либо изменения в Gitlab, вам нужно будет определить их через переменную. Следовательно, вам также необходимо будет сделать резервную копию файла компоновки.
Вы можете создать запись cron для регулярного резервного копирования вашей установки Gitlab.
Шаг 10 — Восстановление Gitlab
Чтобы восстановить Gitlab, у вас должна быть работающая установка Gitlab в другой системе. Вам также потребуется скопировать каталог конфигурации и перезаписать существующую конфигурацию установки.
Для восстановления Gitlab требуется выполнить несколько команд. Во-первых, вам нужно остановить процессы, подключенные к базе данных.
$ docker exec -it <name of container> gitlab-ctl stop puma
$ docker exec -it <name of container> gitlab-ctl stop sidekiq
Замените <имя контейнера>
именем контейнера на вашем новом сервере.
Прежде чем продолжить, убедитесь, что процессы не работают.
$ docker exec -it <name of container> gitlab-ctl status
Скопируйте файл резервной копии в каталог /srv/gitlab/data/backups
. Создайте каталог, если он не существует.
Запустите команду восстановления. Вам необходимо удалить часть имени файла _gitlab_backup.tar
из команды.
$ docker exec -it <name of container> gitlab-backup restore BACKUP=11493107454_2018_04_25_10.6.4-ce
Скопируйте файл gitlab-secrets.json
и перезапишите существующую копию в каталоге /srv/gitlab/config
нового сервера. Кроме того, скопируйте все настройки Gitlab из резервной копии файла компоновки в файл в новом контейнере.
Перезапустите контейнер Gitlab. Мы не можем использовать команду docker compose restart
напрямую, так как она не будет отображать какие-либо изменения, внесенные в файл компоновки, которые нам нужны.
$ docker compose down --remove-orphans
$ docker compose up -d
Проверьте Гитлаб.
$ docker exec -it <name of container> gitlab-rake gitlab:check SANITIZE=true
Шаг 11 — Обновление Gitlab
Чтобы обновить Gitlab, первым делом нужно сделать резервную копию, как показано в предыдущем пункте.
Затем переключитесь в каталог создания Docker Gitlab.
$ cd ~/gitlab-docker
Затем остановитесь и удалите существующий контейнер. Однако ваши данные будут сохранены.
$ docker compose down --remove-orphans
Загрузите последнюю версию образа докера Gitlab.
$ docker compose pull
Запустите контейнеры снова.
$ docker compose up -d
Этот процесс подходит для обновления между второстепенными версиями Gitlab, но при обновлении до основной версии вам необходимо выполнить дополнительные шаги и принять меры предосторожности. Перед выполнением обновления вам следует обратиться к документации Gitlab.
Заключение
На этом завершается наше руководство, в котором вы узнали, как установить Gitlab с помощью Docker на сервер Debian 12. Вы также создали свой первый проект и отправили файл со своего компьютера. Если у вас есть вопросы, задавайте их в комментариях ниже.