Сначала инстанс запускается по HTTP, затем на нём включается TLS. Перед началом убедитесь, что сервер отвечает требованиям.
В командах и файлах конфигурации замените <HOSTNAME> на FQDN инстанса, а <VERSION> — на версию полученного пакета, например 1.0.0-0.
CLI-утилиты (gitlab-ctl, gitlab-backup), файл конфигурации (/etc/gitlab/gitlab.rb) и служебные каталоги (/opt/gitlab, /var/opt/gitlab) сохраняют префикс gitlab-: Deckhouse Code работает на движке GitLab, и системные имена оставлены без изменений.
Подготовка
Имя инстанса <HOSTNAME> используется в адресе веб-интерфейса, в адресах репозиториев для Git, в параметре external_url и в полях CN и SAN сертификата — везде одно и то же имя.
Проверьте, что имя разрешается в IP-адрес машины:
getent hosts <HOSTNAME>Если DNS-записи A или AAAA нет, добавьте имя в файл
/etc/hostsна сервере:echo "<IP_ADDRESS> <HOSTNAME>" | sudo tee -a /etc/hosts<IP_ADDRESS>— IP-адрес машины инстанса. Ту же строку добавьте на каждой машине, с которой будут открывать веб-интерфейс и работать с Git, включая вашу рабочую станцию.
Установка пакета
Установка сама запускает первичную настройку (gitlab-ctl reconfigure), она занимает несколько минут. Адрес инстанса берётся из переменной EXTERNAL_URL при первой установке; TLS включается на следующем шаге.
- РЕД ОС 8
- Ubuntu 24.04
Установите системные зависимости:
sudo dnf install -y libxcrypt-compat policycoreutils-python-utilsПакет libxcrypt-compat даёт библиотеку libcrypt.so.1, без которой приложение не запускается: в минимальной поставке РЕД ОС этой библиотеки нет. Пакет policycoreutils-python-utils даёт утилиту semanage, которая выставляет контексты SELinux при первичной настройке.
Установите пакет Deckhouse Code:
sudo EXTERNAL_URL="http://<HOSTNAME>" \
rpm -i ./deckhouse-code-<VERSION>.el8.x86_64.rpmРежим SELinux enforcing поддерживается: модуль политики устанавливается при первичной настройке, ручные действия не нужны.
Отдельно устанавливать системные зависимости не нужно: они объявлены в пакете, и apt возьмёт их из репозиториев ОС.
Установите пакет Deckhouse Code:
sudo EXTERNAL_URL="http://<HOSTNAME>" \
apt install -y ./deckhouse-code_<VERSION>_amd64.debПрефикс ./ в пути к файлу обязателен: без него apt ищет пакет с таким именем в репозиториях.
Что получилось
На http://<HOSTNAME> работает инстанс: веб-интерфейс, Git поверх HTTP, база данных и фоновые задачи. Проверьте состояние — команды выполняются на самой машине инстанса:
# Все сервисы в состоянии run.
sudo gitlab-ctl status
# Ожидается код 200.
curl -s -o /dev/null -w "%{http_code}\n" http://localhost/-/health
# Первый пароль администратора.
sudo cat /etc/gitlab/initial_root_passwordОткройте http://<HOSTNAME> в браузере и войдите под пользователем root с паролем из файла /etc/gitlab/initial_root_password.
Сохраните пароль: файл initial_root_password хранится 24 часа, и любой следующий запуск gitlab-ctl reconfigure удалит его, если с установки прошло больше суток. Само значение пароля при этом не меняется.
TLS
По HTTP пароли и содержимое репозиториев передаются в открытом виде, поэтому сразу после первого входа включите TLS.
Подготовьте каталог для сертификатов:
sudo mkdir -p /etc/gitlab/ssl && sudo chmod 755 /etc/gitlab/sslРазместите в нём сертификат и ключ под именами <HOSTNAME>.crt и <HOSTNAME>.key.
- Свой сертификат
- Самоподписанный сертификат
Выпустите в вашем центре сертификации сертификат на имя <HOSTNAME> и скопируйте файлы на сервер:
sudo install -m 600 <KEY_FILE> /etc/gitlab/ssl/<HOSTNAME>.key
# Сертификат вместе с цепочкой.
sudo install -m 644 <CERT_FILE> /etc/gitlab/ssl/<HOSTNAME>.crt<KEY_FILE> и <CERT_FILE> — пути к полученным файлам ключа и сертификата.
На тестовом стенде выпустите сертификат на месте. Имя инстанса в поле SAN обязательно, иначе клиенты отклонят сертификат:
sudo openssl req -x509 -nodes -newkey rsa:2048 -days 825 \
-keyout /etc/gitlab/ssl/<HOSTNAME>.key \
-out /etc/gitlab/ssl/<HOSTNAME>.crt \
-subj "/CN=<HOSTNAME>/O=Deckhouse Code/C=RU" \
-addext "subjectAltName=DNS:<HOSTNAME>"
sudo chmod 600 /etc/gitlab/ssl/<HOSTNAME>.keyВключите HTTPS в файле /etc/gitlab/gitlab.rb:
external_url 'https://<HOSTNAME>'
letsencrypt['enable'] = false
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/<HOSTNAME>.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/<HOSTNAME>.key"Без строки letsencrypt['enable'] = false настройка с адресом https:// запускает получение сертификата через Let’s Encrypt по HTTP-01 и в закрытом контуре завершается ошибкой.
Примените конфигурацию:
sudo gitlab-ctl reconfigureПроверка
Проверьте состояние сервисов, ответ по HTTPS и перенаправление с HTTP:
# Все сервисы в состоянии run.
sudo gitlab-ctl status
# Параметр --resolve направляет запрос на loopback: адрес /-/health отвечает
# только с самой машины, проверка имени в сертификате при этом сохраняется.
# Ожидается health=200 tls=0.
curl --cacert /etc/gitlab/ssl/<HOSTNAME>.crt \
--resolve '<HOSTNAME>:443:127.0.0.1' \
-o /dev/null -w "health=%{http_code} tls=%{ssl_verify_result}\n" \
https://<HOSTNAME>/-/health
# Перенаправление с HTTP на HTTPS, ожидается https://<HOSTNAME>/.
curl -sI http://<HOSTNAME>/ | grep -i locationСамоподписанный сертификат браузер и Git не примут, пока центр сертификации не добавлен в доверенные. Для Git укажите путь к файлу сертификата на машине клиента:
git config --global http.https://<HOSTNAME>.sslCAInfo <CERT_FILE>Смените пароль пользователя root в веб-интерфейсе и удалите файл первоначального пароля:
sudo rm -f /etc/gitlab/initial_root_password