Включить собственный сертификат HTTPS для GitLab Community Edition для установщика Ominbus

Включить собственный сертификат HTTPS для GitLab Community Edition для установщика Ominbus Сертификаты
Содержание
  1. Первоначальная настройка vps
  2. $ docker ps
  3. $ docker rm container-name
  4. $ docker run
  5. $ docker stop container-name
  6. Centos unable to load client key
  7. Docker docker compose:
  8. Git конфигурация подписанного сертификата
  9. Global .gitconfigдля самоподписанных центров сертификации
  10. Nodejs expressjs mongodb
  11. Базовые принципы:
  12. Генерация сертификатов
  13. Добавление ssh ключа
  14. Лимиты по созданию проектов (ограничение)
  15. Настройка continuous deleivery на gitlab
  16. Настройка dockerd
  17. Настройка nginx
  18. Настройка smtp-сервера
  19. Настройка профиля
  20. Ограничение или блокировка открытой регистрации
  21. Ограничение регистрации по домену
  22. Один лайнер
  23. Питон, пип и конда
  24. Подготовка к установке gitlab
  25. Порт 22
  26. Преамбула
  27. Системные требования
  28. Стандартный процес обновления gitlab-ce
  29. Тонкости в работе с gitlab/gitlab-ce
  30. Укажите config когда git clone-ing
  31. Установка gitlab ce
  32. Установка и настройка
  33. Установка и настройка gitlab на ubuntu 18.04 | записки системного администратора
  34. Установка сервера nginx с сертификатом let’s encrypt

Первоначальная настройка vps

Вот вы купили инстанс например на

, первое, что необходимо предпринять, это защитить ваш сервер от агрессивного внешнего мира. Я не буду ничего доказывать и утверждать, просто покажу лог /var/log/messages своего виртуального сервера:

Во-первых установим файервол ufw:

apt-get update && apt-get install ufw


Включим политику по-умолчанию: блокируем все входящие соединения, разрешаем все исходящие соединения:

ufw default deny incoming
ufw default allow outgoing

Важно: не забудем разрешить соединение по ssh:

ufw allow OpenSSH

Общий синтаксис такой: Разрешить соединение по порту: ufw allow 12345, где 12345 — номер порта или же название сервиса. Запретить: ufw deny 12345

Включаем файервол:

ufw enable

$ docker ps

Команда, с помощью которой можно получить список запущенных контейнеров.

$ docker rm container-name

Удаление определенного контейнера.

Внимание: прежде, чем удалить контейнер, его необходимо остановить (docker stop)!

Более подробно разобраться в работе каждой команды вы можете в официальной документации. В этой статье я обратил внимание только на основные команды, необходимые для успешного начала работы с Docker.

Конкретные примеры использования docker run вы увидите в этой статье немного далее.

$ docker run

По сути основная команда, выполняющая запуск нового контейнера.

Основные параметры:

$ docker stop container-name

Команда, останавливающая работу контейнера.

Centos unable to load client key

Если вы пытаетесь это сделать на CentOS, и ваш .pemфайл дает вам

unable to load client key: "-8178 (SEC_ERROR_BAD_KEY)"

Тогда вам понадобится ответ StackOverflow о том, как curlиспользовать NSS вместо Open SSL.

И вы хотите, чтобы восстановить curlиз источника :

Docker docker compose:

Подготовка:

Git конфигурация подписанного сертификата

НИКОГДА не отключайте все проверки SSL!

Это создает плохую культуру безопасности. Не будь таким человеком.

Ключи конфигурации, которые вы ищете:

Это для настройки сертификатов хоста, которым вы доверяете

Они предназначены для настройки ВАШЕГО сертификата для ответа на вызовы SSL.

Выборочно применить вышеуказанные настройки к конкретным хостам.

Global .gitconfigдля самоподписанных центров сертификации

Ради меня и моих коллег здесь показано, как нам удалось заставить самозаверяющие сертификаты работать без отключения sslVerify. Отредактируйте,.gitconfig чтобы использовать git config –global -eдобавить эти:

Nodejs expressjs mongodb

Пример такой конфигурации: docker-nodejs-mongodb-example.

Файл docker-compose.yml выглядит следующим образом:

Базовые принципы:

Docker представляет из себя дополнительный уровень абстракции; систему, автоматизирующую виртуализацию на уровне операционной системы.

Виртуализация на уровне операционной системы — метод виртуализации, при котором ядро операционной системы поддерживает несколько изолированных экземпляров пространства пользователя, вместо одного. Эти экземпляры (часто называемые контейнерами или зонами) с точки зрения пользователя полностью идентичны реальному серверу. Ядро обеспечивает полную изолированность контейнеров, поэтому программы из разных контейнеров не могут воздействовать друг на друга.”

From Wikipedia

Основные преимущества использования Docker:

Далее расмотрим основные команды, которые нам понадобятся для создания кластера:

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

Чтобы управлять демоном докера удаленно требуется шифрованное TLS соединение. Для этого необходимо иметь сертификат и ключ, которые надо сгенерировать и перенести на удаленную вашу машину. Следуйте шагам, заданным в инструкции на официальном сайте docker:

Добавление ssh ключа

Для работы с Git и GitLab можно указать публичный SSH ключ, чтобы не приходилось каждый раз вводить пароль вашей учетной записи.

Введите команду (если у вас уже существует ключ):

cat ~/.ssh/id_rsa.pub

Команда вернет следующий результат:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5onOVtATUjVkqk91lq v0g5TzOZTMBp4avWLEZO/97jQa1PL7y4zx4iOmUDOdlux/gC QSW0knti/yJrtzPJibDOedRJ9KkPPGpyD1JPqRGiy3eEY2gs755McfopX6U99aYjUVBgtcfX5AXp1 5Dd9jJEFhhEDDD/WEVfYERP1ZjybaRWy6vykkPa5W2YloXRIJq/kJk9ubtd5iGnRJfDZrkza2Q97ruNGWbeEty4rgDVNwb/Znz84qt9DzzI9rvlZTfB/9EApmB0Y7eu6vR3AG5T3gBZIAYGdurdqbIj/dI8nUduE9AImzlGxeACKs0iOi/037u5gvB gitlab@netpoint-dc.ml

Это пример ключа. У вас будут свои данные

Скопируйте публичный ключ полностью, перейдите в настройки профиля и нажмите на ссылку «SSH Keys» слева. Вставьте ключ в большое поле и напишите его название в поле Title. Для сохранения (добавления) ключа нажмите на кнопку «Add key».

Если публичного ключа у вас нет, вы получите примерно следующий ответ от команды:

 cat: /home/gitlab/.ssh/id_rsa.pub:  No such file or directory 

Для генерации связки приватного и публичного ключа введите команду:

ssh-keygen -t rsa

У вас должно получиться примерно следующее:

На все вопросы в процессе генерации можно нажимать клавишу «Enter» или ввести подходящую вам директорию.

Снова введите команду для просмотра содержимого публичного ключа

cat ~/.ssh/id_rsa.pub

Скопируйте ключ и введите его в свойствах профиля.

Лимиты по созданию проектов (ограничение)

По умолчанию в GitLab любой пользователь может создать 100000 проектов. Откройте раздел «Account and limit» и измените значение в строке «Default projects limit» на 0 , нажмите на кнопку «Save changes». Значение «0» необходимо, когда нужно запретить пользователям создание проектов.

Про сертификаты:  Открытый и закрытый ключ электронной подписи

Настройка continuous deleivery на gitlab

Для того чтобы воркер гиталаба смог выполнять команды на удаленном хосте докера необхоимо определиться, как и где хранить сертификаты и ключ для шифрованного соединения с dockerd. Я решил данную проблему просто прописав в переменные в настройках gitlbab:


Просто выводите содержимое сертификатов и ключа через cat:

cat ca.pem

. Копируете и вставляете в значение переменных.

Пропишем сценарий для деплоя через гитлаб. Использовать будет docker-in-docker (dind) образ.


Содержимое скрипта деплоя с комментариями:

bin/deploy.sh
#!/usr/bin/env sh
# Падаем сразу, если возникли какие-то ошибки
set -e
# Выводим, то , что делаем
set -v

# 
DOCKER_COMPOSE_FILE=docker-compose.yml
# Куда деплоим
DEPLOY_HOST=185.241.52.28
# Путь для сертификатов клиента, то есть в нашем случае - gitlab-воркера
DOCKER_CERT_PATH=/root/.docker

# проверим, что в контейнере все имеется
docker info
docker-compose version

# создаем путь (сейчас работаем в клиенте - воркере gitlab'а)
mkdir $DOCKER_CERT_PATH
# изымаем содержимое переменных, при этом удаляем лишние символы добавленные при сохранении переменных.
echo "$CA_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/ca.pem
echo "$CERT_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/cert.pem
echo "$KEY_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/key.pem
# на всякий случай даем только читать
chmod 400 $DOCKER_CERT_PATH/ca.pem
chmod 400 $DOCKER_CERT_PATH/cert.pem
chmod 400 $DOCKER_CERT_PATH/key.pem

# далее начинаем уже работать с удаленным docker-демоном. Собственно, сам деплой
export DOCKER_TLS_VERIFY=1
export DOCKER_HOST=tcp://$DEPLOY_HOST:2376

# проверим, что коннектится все успешно
docker-compose 
  -f $DOCKER_COMPOSE_FILE 
  ps

# логинимся в docker-регистри, тут можете указать свой "местный" регистри
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD

docker-compose 
  -f $DOCKER_COMPOSE_FILE 
  pull app
# поднимаем приложение
docker-compose 
  -f $DOCKER_COMPOSE_FILE 
  up -d app

Основная проблема была в том, чтобы «вытащить» из переменных gitlab CI/CD содержимое сертификатов в нормальном виде. Я не мог понять, почему не работало соединение с удаленным хостом. На хосте посмотрел журнал sudo journalctl -u docker, там ошибка при рукопожатии.

Настройка dockerd

В сценарии запуска демона docker убираем опцию -H df://, эта опция отвечает, на каком хосте можно управлять демоном докера.

# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd


Далее следует создать файл настроек, если его еще нет и прописать опции:

Разрешим подключения по порту 2376:

sudo ufw allow 2376

Перезапустим dockerd с новыми настройками:

sudo systemctl daemon-reload && sudo systemctl restart docker


Проверим:

sudo systemctl status docker

Если все «зеленое», то считаем, что на сервере мы успешно настроили docker.

Настройка nginx

Откройте ваш конфигурационный файл

CentOSnano /etc/nginx/conf.d/${WEBSITE_NAME}.conf

Debian/Ubuntunano /etc/nginx/sites-available/$WEBSITE_NAME

Настройка smtp-сервера

Здесь тоже необходимо использовать специальные переменные окружения самого GitLab.

В моем случае (я использую Google Cloud Engine) по-умолчанию закрыты порты 25, 465 (т.е. стандартные порты SMTP-протокола). Одним из вариантов решения этой проблемы является использование стороннего сервиса (как например MailGun) в качестве SMTP-сервера. Для этого используем настройки:

Настройка профиля

После авторизации нажмите на профиль левой кнопкой мыши в правом верхнем углу и нажмите на пункт «Profile».

Нажмите на кнопку «Edit profile» справа вверху.

Введите ваши данные (email, контакты, имя пользователя, аватар) и нажмите на кнопку «Update profile settings» , чтобы сохранить данные.

Ограничение или блокировка открытой регистрации

На данный момент любой человек может зарегистрироваться в вашем проекте и участвовать в разработке. Вы можете ограничить доступ к проекту или отключить регистрацию совсем.

Нажмите на значок гаечного ключа сверху.

В разделе администратора нажмите на ссылку «Settings» слева

Вас могут заинтересовать следующие категории

В разделе «Sign-up restrictions» уберите отметку с пункта «Sign-up enabled» и сохраните изменения, чтобы убрать возможность регистрации.

Ограничение регистрации по домену

GitLab поддерживает ограничение по домену почты. Установите отметку в пункте » Send confirmation email on sign-up», введите доверенный домен в поле «Whitelisted domains for sign-ups» и нажмите на кнопку «Save changes», чтобы сохранить изменения.

Один лайнер

РЕДАКТИРОВАТЬ: см. Ответ VonC , который указывает на предостережение об абсолютных и относительных путях для конкретных версий git от 2.14.x / 2.15 до этого одного лайнера

Питон, пип и конда

Связанный : Как добавить пользовательский корневой сертификат CA в CA Store, используемый pip в Windows?

Подготовка к установке gitlab

Обновите индекс пакетов командой:

Debian/Ubuntu

apt-get update

CentOS

yum update

Выполните установку дополнительных компонентов:

Debian/Ubuntu

apt-get install ca-certificates curl postfix 

CentOS

yum install curl policycoreutils postfix

Во время установки будет открыто диалоговое окно для настройки MTA Postfix (почтового сервера). Выберите пункт «Интернет-сайт».

В следующем окне введите реально существующее доменное имя. Доменное имя будет использоваться для отправки с него писем.

Вы можете ввести IP адрес сервера вместо доменного имени, но в таком случае доставка писем на внешние почтовые серверы не гарантируется.

Порт 22

Суть в данных строках:

–publish 2289:22

Если работа с рабочей машиной производится через SSH-протокол, то мы не можем создавать связку напрямую “22:22”, так как порт 22 уже занят сервисом sshd.

Решение этой проблемы описано в официальной документации gitlab-ce. Все просто: мы привязываем любой другой (кроме 22) порт внутри сервера к 22 порту внутри контейнера. В данном примере используется порт 2289.

Параллельно с этим важно не забыть добавить

gitlab_rails[‘gitlab_shell_ssh_port’] = 2289;

В настройки самого GitLab.

Таким образом после запуска gitlab-ce и создания в нем самом какого-либо репозитория работа с ним будет производится по адресу в стиле:

Преамбула

Начнем, конечно же, с постановки задачи и определения основных технологий/методик, используемых в гайде.

Про сертификаты:  Авторизация с помощью клиентских SSL сертификатов. - ITC-LIFE

С самого начала я заинтерисовался Docker’ом с целью быстрого создания небольшого, но довольно универсального кластера под собственные проекты (рабочие, учебные, etc). Так как системным администрированием я профессионально заниматься не собирался — я решил, что должен обучиться основам кластеризации ровно до того момента, когда я смог бы без особых затруднений разворачивать любой популярный программный стек для веб-проекта. Далее я рассмотрю разворачивание на Docker следующих конфигураций:

Первые две в представлении, думаю, не нуждаются. Третяя же состоит из MongoDB, Express.js, Node.js. MEAN я чаще всего использовал для написания RESTful API, например, для дальнейшего разрабатывания на его основе мобильного приложения.

После этого я сам себе немного усложнил задачу, добавив следующие требования:

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

Рекомендуется использовать не менее 8 ГБ оперативной памяти и процессор не менее 2-ух ядер. Более подробно о системных требованиях можно прочитать в документации GitLab.

GitLab может быть установлен в следующих дистрибутивах Linux:

  • Ubuntu;
  • Debian;
  • CentOS;
  • openSUSE;
  • Red Hat Enterprise Linux (CentOS);
  • Scientific Linux (CentOS);
  • Oracle Linux (CentOS).

После установки операционной системы подключитесь к ней по SSH для выполнения действий на сервере, где будет работать GitLab CE.

Стандартный процес обновления gitlab-ce

Это последний момент, который я хочу отдельно осветить в этом гайде.

Процесс обновления GitLab с помощью Docker упрощается до нескольких команд:

  1. docker stop custom-gitlab — останавливаем работающий контейнер;

  2. docker rm custom-gitlab — удаляем контейнер GitLab CE.

    Важный момент: удаление контейнера не означает удаление данных, которые были созданы в процесе использования системы. Поэтому вы можете выполнять эту команду без каких-либо опасений.

  3. docker pull gitlab/gitlab-ce — собственно обновление изображения контейнера;

  4. выполняем длинную команду (пример выше), с помощью которой мы изначально запускали контейнер.

Вот и все. Выполнив эти 4 команды, GitLab автоматически обновится до последний версии и запустится через Docker Engine.

Тонкости в работе с gitlab/gitlab-ce

Некоторые, более сложные контейнеры, требуют дополнительной настройки для запуска с использованием nginx-proxy. К таким контейнерам относится и gitlab-ce.

Я сначала приведу полностью рабочую версию команды для запуска этого контейнера, с учетом той конфигурации, которая обсуждается в этой статье, а далее поясню ниже некоторые детали из этой команды.

Итак:

Укажите config когда git clone-ing

Если вам нужно применить его для каждого репо, в документации сказано, что вы должны просто запустить его git config –localв своем репо-каталоге. Ну, это бесполезно, если вы еще не клонировали репо локально, не так ли?

Вы можете сделать global -> localhokey-pokey, установив вашу глобальную конфигурацию, как указано выше, а затем скопировать эти настройки в вашу локальную конфигурацию репо, как только она клонируется …

ИЛИ что вы можете сделать, это указать команды config,git clone которые будут применены к целевому репо после его клонирования.

Установка gitlab ce

Процесс установки занимает не так много времени. Воспользуйтесь скриптом для подготовки рабочей среды под GitLab. Будут установлены дополнительные программы и настроено подключение к репозиторию GitLab CE.

Выполните следующую команду для скачивания и выполнения скрипта:

Debian/Ubuntu

Установка и настройка

Проблем с установкой Docker и других пакетов не должно возникнуть. На официальном сайте этот процес расписан довольно подробно. Далее я распишу общий перечень команд, необходимых для начальной настройки.

Сразу уточню, что в этой статье я рассматриваю настройку Docker и всех сопутствующих программ на дистрибютиве CentOS 7, так как на этой ОС я уже давно привык работать, как на основной серверной системе. В целом на любом другом Linux-дистрибютиве действия будут примерно аналогичные, с той лишь разницей, что, например, для Ubuntu вы будете использовать apt-get вместо yum / dnf (для CentOS / Fedora).

Установка и настройка gitlab на ubuntu 18.04 | записки системного администратора

Выполним установку и настройку Gitlab Community Edition через установку Omnibus-пакета

1. Установка зависимостей для Gitlab-пакета с предварительным обновлением локального кеша пакетов

2. Добавление Gitlab репозитария, из которого будет установлен пакет Gitlab Community Edition

3. Установка Gitlab

4. Настройка домен/урл по которому будет доступен Gitlab снаружи
Если не используется SSL, тогда указываем протокол http в параметре
external_url в файле /etc/gitlab/gitlab.rb

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

5. Настройка Gitlab на работу с SSL

Получение бесплатного Let’sEncrypt-сертификата

Gitlab поддерживает два способа работы с SSL:

1.Автоматическое генерирование самим Gitlab-ом сертификатов Let’sEncrypt(c их поселедующим ручным (с помощью команды gitlab-ctl renew-le-certs) или автоматическим обновлением)
https://docs.gitlab.com/omnibus/settings/ssl.html#lets-encrypt-integration

2.Ручная настройка HTTPS со своими собственными сертификатами
https://docs.gitlab.com/omnibus/settings/nginx.html#manually-configuring-https

Будем использовать второй способ, в котором получим бесплатный Let’sEncrypt-сертификат и установим автообновление этого сертификата

Сгенерируем Диффи-Хелмана ключ

Настройка Gitlab на поддержку SSL

https://docs.gitlab.com/omnibus/settings/ssl.html
https://docs.gitlab.com/omnibus/settings/nginx.html#manually-configuring-https

Протокол изменяем с http на https

Включаем принудительный редирект http->https

Указываем пути к сертификату, приватному ключу и к ключу Дифи-Хелмана

Обязательно отключаем поддержку letsencrypt, встроенную в Gitlab
Чтобы при выполнении команды gitlab-ctl reconfigure
Gitlab не пытался самостоятельно обновить сертификаты Let’sEncrypt и тем самым перезаписать уже действующие сертификаты

Перенастраиваем/переконфигурируем Gitlab после внесений изменений в файл /etc/gitlab/gitlab.rb

Настройка автообновления Let’sEncrypt-сертификата с последующим перечитыванием nginx-ом своей конфигурации и нового сертификата/ключа
https://docs.gitlab.com/omnibus/settings/nginx.html#update-the-ssl-certificates

Для получение сертификата добавляем в cron-скрипт для запуска каждые 2 месяца, который

6. Базовая настройка Gitlab после его установки

Установка пароля:
Логинимся в Gitlab (предварительно в WEB-интерфейсе устанавливаем пароль)

Отключение авторегистрации:

Указание корректного Email-адреса:

Изменение дефолтного имени пользователя с админискими правми с root на свое имя:

Настройка Gitlab Shell на нестандартный порт SSH(если SSH-сервер запущен не на стандартном порту)

Настройка SMTP-сервера
В качестве SMTP-сервера используем локально запущеннный postfix без поддержки SSL, слушающий запросы на localhost

Перенастраиваем/переконфигурируем Gitlab после внесений изменений в файл /etc/gitlab/gitlab.rb

Тестирование SMTP-кнфигурации путем отправки тестового сообщения из консоли Gitlab
https://docs.gitlab.com/omnibus/settings/smtp.html#testing-the-smtp-configuration

Заходим в Gitlab консоль

Выполняем команду по отправке тестового сообщения

Если необходимо отключить отправку всех типов сообщений
https://docs.gitlab.com/omnibus/settings/smtp.html#disable-all-outgoing-email

Отключение неиспользуемых сервисов
Отключение Prometheus (который включен по умолчанию)

Отключение Grafana

При отключении сервиса Prometheus fвтоматически также будут отключены такие сервисы,которые использует prometheus

Применяем настройки

Проверяем отсутствие запущенных Prometheus и Grafana-сервисов


Настройка Nginx статусной страницы

Конфигурация, которая создается после изменений в файле /etc/gitlab/gitlab.rb
и выполнению команды для применения изменений (gitlab-ctl reconfigure)

Error-логи Nginx

Все конфигурационные файлы/файлы виртуальных хостов/статусной страницы и т.д. для Nginx распологаются в каталоге /var/opt/gitlab/nginx/conf:

Настройка ротации логов

https://docs.gitlab.com/omnibus/settings/logs.html

GitLab включает расширенную систему журналов, в которой все службы и компоненты GitLab будут записывать в системные логи

Дефолтное месторасположение логов всех сервисов/компонентов доступно по команде:

Runit-управляемые сервисы генерируют логи испольхуя svlogd
Ротацию логов таких сервисов настраиваем через параметры

Например, настроим ротацию с такой логикой
Ротировать только по времени(раз в сутки), ротация по размеру отключена
Хранить 7 ротированных файлов, при ротации сжимать старый лог-файл

Logrotate-сервис,который встроен в Gitlab управляет всеми логами кроме логов для Runit-управляемых сервисов
Аналогично, как и для логов runit-сервисов, настроим ротацию всех остальных
логов средствами встроенного в Gitlab logrotate-сервиса, а именно:
Ежесуточная ротация по времени(не по рамзмеру), с хранением 7 посоледних ротированных копий/лог-файлов, с сжатием ротированных файлов

Применяем сделанные настройки

При необходимости можно выполнить ручной запуск ротации(по дефолту ротация выполняется по расписанию)

Несколько команд для просмотра логов средствами утилиты gitlab-ctl

Просмотр логов всех сервисов в online-режиме

Просмотр всех логов в конкретном подкаталоге(например, в подкаталоге gitlab-rails)

Просмотр лога конкретного файла(например, access-лога Gitlab-сервиса)


Настройка лимитов на подключение к Gitlab

Enabling/Disabling Rack Attack and setting up basic auth throttling
https://docs.gitlab.com/omnibus/settings/configuration.html#enablingdisabling-rack-attack-and-setting-up-basic-auth-throttling
https://docs.gitlab.com/ee/security/rack_attack.html

3 неуспешные попытки за 10 минут — блокировка на 3 часа

Rate Limit/Throttling
Более 5 запросов незарегистрированным пользователем — троттлинг на 120 секунд
с кодом ответа 429 и ответом Too Many Requests

https://docs.gitlab.com/ee/security/rate_limits.html

6-й запрос

Проверка наличия IP-адрса в заблокаированных:

Дефолтное место хранения репозитариев
https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab

Storage-директории

Полезные команды для работы с Gitlab-сервисами через утилиту gitlab-ctl

Послать команду на nginx-сервис для перечитывания им своей конфигурации при обновлении

Включение Container Registry в Gitlab

Получение Let’sEncrypt-сертификата для домена registry.mydomain.com

Для автоматического продления сертификата добавим в ранее созданный скрипт /usr/local/bin/ssl-renew.sh после строки с командой по запуску certbot
команду для обновления сертификата для домена registry.mydomain.com

И в конеце скрипта последней строкой добавляем перезапуск сервиса registry

Итого скрипт по обновлению сертификатов(как для gitlab, так и для registry) имеет вид:

По умолчанию registry запускается на порту 5000

Взаимодействие Gitlab и Registry
https://docs.gitlab.com/omnibus/architecture/registry/README.html

Процес аутентификации в Container Registry в Gitlab(docker login…)
1.Docker client->Docker daemon->registry.mydomain.com->
2.Реджистри возвращает код ответа 401 т.к. не был предоставлен валидный токен
Вместе с кодом ответа 401 реджистри отправляет клиенту(который попытался залогиниться в реджистри с помощью команды docker login https://registry.mydomain.com)
token_realm (который указан в конфигурации реджистри в файле /var/opt/gitlab/registry/config.yml)

Этот token_realm как раз и указывает клиенту, где он может получить токен т.е.
обратиться за токеном на Gitlab (https://gitlab.mydomain.com) по указанному роуту

3.Docker клиент подключается к Gitlab API и получает токен
Этот токен Gitlab подписывает приватным ключем РЕДЖИСТРИ, а сертификат РЕДЖИСТРИ, которым будет
проверяться подписанный Gitlab-ом приватным ключем токен, прописан в конфиг.файла registry

Эта пара приватный ключ и сертификат для Реджистри является самоподписными и автоматически
выпускается Gitlab-ом при включении/настройке Registry
И эта пара никакого не имеет отношения к сертификату/ключу, который использует клиент при подключении к Registry снаружи(который мы выпускали средствами Let’sEncrypt)

4.Docker клиент подключается снова к Registry, но уже с валидным токеном, который он получил от Gitlab API и
успешно аутентифицируется в Docker-реджистри

Увеличение времени жизни токена(по дефолту 5 минут)
https://docs.gitlab.com/13.6/ee/administration/packages/container_registry.html#container-registry-domain-configuration
Полезно,если в хранилище загружается большой по размеру образ, который не успевает загрузиться за 5 минут

Тегирование, загрузка, скачивание образов с Container Registry
https://docs.gitlab.com/ee/user/packages/container_registry/
Залогиниться пользователем,который создан в Gitlab, в Registry( например, my-gitlab-user-name)

Перетегировать образ в формат, поддерживаемый Gitlab-ом

Загрузить образ в Registry

Удалить локальный образ

Загрузить образ с Registry

Troubleshooting Registry
https://docs.gitlab.com/13.6/ee/administration/packages/container_registry.html#troubleshooting

Лог файл Registry

Лог файл Gitlab

Источник:

Установка
https://docs.gitlab.com/13.6/omnibus/installation

Настройка
https://docs.gitlab.com/omnibus/settings/configuration.html
https://docs.gitlab.com/13.6/omnibus/README.html#configuring

Nginx
https://docs.gitlab.com/13.6/omnibus/settings/nginx.html

Комментирование и размещение ссылок запрещено.

§

§

Установка сервера nginx с сертификатом let’s encrypt

Мы будем использовать установку GitLab CE, которая работает за сервером Nginx, который будет выполнять обратное проксирование и осуществлять обработку SSL-трафика. Для настройки базового сервера воспользуйтесь руководством из списка ниже, подходящим для вашей операционной системы.

На данный момент у вас должен быть развернут сервер с Nginx и сертификатом Let’s Encrypt. Теперь установим GitLab CE.

Оцените статью
Мой сертификат
Добавить комментарий