7.8к
1
0
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
Назад

Устанавливаем и настраиваем Sonatype Nexus Repository для работы с репозиториями Docker

Время чтения 20 минут
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
7.8к
1
0
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники

Всем привет! Меня зовут Александр. Я работаю на позиции DevSecOps-инженера в компании-интеграторе, которая занимается внедрением ПО. В процессе разработки появляются специальные файлы — артефакты. К ним можно отнести файлы с исходным кодом, пакеты приложений, бинарные файлы и так далее. По мере разработки количество артефактов возрастает. Возникает вопрос: где и как их хранить? На помощь приходит программа под названием Nexus Repository.

Nexus Repository — это менеджер репозиториев, который предназначен для хранения и управления артефактами. Он поддерживает формат Maven, Python PyPI, RubyGems, npm, nuget, deb, образы Docker и другие. С полным списком поддерживаемых артефактов можно ознакомиться на официальном сайте программы.

В этой статье мы установим Nexus и настроим его на работу с Docker-образами.

Устанавливаем и настраиваем Sonatype Nexus Repository для работы с репозиториями Docker

Предварительные требования

Я буду устанавливать Nexus на виртуальную машину со следующими характеристиками:

  • Операционная система: Ubuntu 20.04.4 LTS (Focal Fossa).
  • Процессор: 4-ядерный.
  • Оперативная память: 16 ГБ.
  • Жесткий диск: 120 ГБ.
  • Версия Java: 1.8.0 (предпочтительнее использовать 8-ю версию).

Для установки на жестком диске должно быть свободно минимум 50 ГБ, не считая места, которое занимает ОС. Если памяти будет недостаточно, Nexus не запустится, а в лог-файле появится запись об ошибке: com.orientechnologies.orient.core.exception.OLowDiskSpaceException: Error occurred while executing a write operation to database ‘component’ due to limited free space on the disk);

Установка Nexus Repository

Для установки Nexus выполняем следующие шаги:

1. Обновляем списки пакетов:

sudo apt update

2. Устанавливаем Java при помощи пакета OpenJDK версии 1.8:

sudo apt -y install openjdk-8-jre-headless

Выводим версию Java, чтобы убедиться, что пакет openjdk успешно установился:

java -version

Если в выводе отобразилась строка openjdk version <номер версии>, Java успешно установлена

3. Устанавливать Nexus будем в директорию /opt. Переходим в нее и скачиваем архив с программой с официального сайта при помощи утилиты wget:

cd /opt

sudo wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz 

Архив с именем latest-unix.tar.gz всегда будет содержать последнюю и самую актуальную версию Nexus. В нашем случае это 3.43.0-01.

4. Разархивируем:

sudo tar -zxvf latest-unix.tar.gz

Получим директорию с именем nexus-3.43.0-01. При скачивании я не задал определенную версию, поэтому, если вы читаете статью не сразу после публикации, вместо 3.43.0-01 может быть уже другая версия. 

Для удобства переименовываем директорию nexus-3.43.0-01 в nexus:

sudo mv /opt/nexus-3.43.0-01 /opt/nexus 

5. Для безопасного запуска Nexus создаем отдельного пользователя:

sudo adduser nexus

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

sudo visudo

Находим строку с комментарием # User privilege specification и добавляем следующую запись:

nexus ALL=(ALL) NOPASSWD: ALL

Сохраняем файл и выходим из него.

6. Устанавливаем владельца и группу nexus на директории /opt/nexus и /opt/sonatype-work:

sudo chown -R nexus:nexus /opt/nexus 

sudo chown -R nexus:nexus /opt/sonatype-work 

7. В конфигурационном файле nexus.rc удаляем символ # и указываем пользователя с именем nexus:

sudo nano /opt/nexus/bin/nexus.rc 

Сохраняем файл и выходим из него.

8. Для управления Nexus (запуск, остановка, перезапуск) нужно создать systemd unit файл. Создаем файл:

sudo nano /etc/systemd/system/nexus.service 

И прописываем следующую конфигурацию:

[Unit]
Description=nexus service
After=network.target
[Service]
Type=forking
LimitNOFILE=65536
ExecStart=/opt/nexus/bin/nexus start
ExecStop=/opt/nexus/bin/nexus stop
User=nexus
Restart=on-abort
[Install]
WantedBy=multi-user.target

Сохраняем файл и выходим из него.

9. Запускаем сервис Nexus, добавляем его в автозагрузку:

sudo systemctl start nexus
sudo systemctl enable nexus 

Проверяем статус Nexus:

systemctl status nexus 

10 После запуска Nexus при помощи команды sudo systemctl start nexus нужно дождаться, когда программа полностью загрузится. В среднем на запуск уходит от 2 до 5 минут. Когда загрузка завершится, в лог-файле nexus.log появится строка:

Started Sonatype Nexus OSS

Чтобы просмотреть лог-файл, выполняем команду:

tail -f /opt/sonatype-work/nexus3/log/nexus.log

По умолчанию Nexus находится по адресу 0.0.0.0, доступен с любых IP-адресов и слушает порт 8081:

После перехода по IP-адресу сервера, на который был установлен Nexus, отображается веб-интерфейс:

Первый вход под учетной записью admin и базовая настройка

Мы успешно установили Nexus , и теперь нужно выполнить первый вход под учетной записью admin. Переходим в веб-интерфейс программы и нажимаем на кнопку Sign in справа сверху:

В открывшемся окне появится инструкция, как получить пароль от пользователя admin:

На сервере выполняем команду:

sudo cat /opt/sonatype-work/nexus3/admin.password

Копируем строку с паролем и авторизуемся в веб-интерфейсе Nexus.

После нажатия на кнопку Sign in вы увидите Setup-меню, в котором нужно выполнить несколько действий. Нажимаем на кнопку Next:

На следующем этапе изменим пароль от пользователя admin:

Далее нам предложат включить или отключить анонимный доступ. Если включить его (Enable anonymous access),репозиторий будет доступен без аутентификации. То есть каждый, у кого есть доступ к адресу реестра, сможет искать, просматривать и скачивать артефакты.

Если вам это не подходит, нужно отключить анонимный доступ (Disable anonymous access). Выбираем предпочтительный вариант и нажимаем на кнопку Next: 

На последнем шаге программа уведомляет, что настройка успешно выполнена и мы можем начать использовать Nexus Repository:

Настройка протокола HTTPS в Nexus

По умолчанию Nexus использует соединение по протоколу HTTP. Однако для комфортной работы, например, с репозиториями для Docker-образов, необходимо использовать HTTPS. Чтобы настроить HTTPS в Nexus, выполним следующие шаги:

1. Переходим в домашнюю директорию, куда был установлен Nexus. В моем случае это /opt/nexus. В ней нужно найти директорию etc/ssl:

/opt/nexus/etc/ssl

Найти полный, куда был установлен Nexus, можно при помощи команды:

whereis nexus

2. Генерируем самоподписной сертификат при помощи утилиты keytool. Это утилита командной строки для управления ключами и сертификатами, а также хранилище ключей для Java. Команда для создания сертификата выглядит следующим образом:

sudo keytool -genkeypair -keystore keystore.jks -storepass password123 -keypass password123 -alias jetty -keyalg RSA -keysize 2048 -validity 5000 -dname "CN=*.${NEXUS_DOMAIN}, OU=Example, O=Home, L=Unspecified, ST=Unspecified, C=RU" -ext "SAN=DNS:nexus-test.com,IP:10.2.47.15" -ext "BC=ca:true"

Значения, которые выделены курсивом, нужно заменить на ваши:

  • -keystore keystore.jks — имя файла, в котором нужно сохранить ключ. Используется формат .jks;
  • -storepass password123 — пароль для доступа к хранилищу ключей;
  • -keypass password123 — пароль для доступа к закрытому ключу;
  • -ext “SAN=DNS:nexus-test.com,IP:10.2.47.15 — доменное имя и IP-адрес сервера, на котором находится Nexus.

Если в качестве доменного имени вы используете локальный домен, его необходимо прописать в файле /etc/hosts (для Linux):

и C:WindowsSystem32driversetchosts (для Windows):

3. Далее извлекаем сертификат сервера из созданного файла с именем keystore.jks при помощи команды:

keytool -export -alias jetty -keystore keystore.jks -rfc -file nexus.cert

В этой команде нужно заменить на ваши значения:

  • -alias jetty — псевдоним сертификата;
  • nexus.cert — имя файла с сертификатом, которое будет получено на выходе.

4. Далее переходим к редактированию конфигурационного файла nexus-default.properties, который находится в /opt/nexus/etc:

sudo nano /opt/nexus/etc/nexus-default.properties 

Находим блок, содержащий строку с комментарием # Jetty section, и прописываем следующий параметр:

application-port-ssl=8443

Здесь мы задаем порт, на котором будет доступен HTTPS.

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

nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-https.xml,${jetty.etc}/jetty-requestlog.xml

5. Далее редактируем файл jetty-https.xml, который находится в /opt/nexus/etc/jetty:

sudo nano /opt/nexus/etc/jetty/jetty-https.xml 

Находим блок с именем sslContextFactory.

В строках KeyStorePassword, KeyManagerPassword, TrustStorePassword прописываем пароль, который был задан на этапе генерации сертификата. В нашем примере пароль — password123.

Также в параметрах KeyStorePath и TrustStorePath можно задать имя сгенерированного сертификата (на скриншоте ниже в качестве имени сертификата задано keystore.jks):

6. После внесения всех изменений перезапускаем сервис Nexus:

sudo systemctl restart nexus

Установка сертификата

Следующий важный шаг — это установка самоподписанного сертификата в ОС семейства Windows и Linux.

Открываем браузер и переходим по адресу Nexus, используя протокол HTTPS. В нашем примере адрес сервера с Nexus — это https://nexus-test.com:8443.

При первом входе по протоколу HTTPS браузер предупредит о небезопасном соединении. Это происходит из-за того, что браузер не доверяет самоподписанным сертификатам. Чтобы это исправить, нужно щелкнуть по значку с надписью Not Secure («Не защищено») и выбрать пункт «Недействительный сертификат».

В открывшемся меню сертификата переходим в раздел «Подробнее», затем в правом нижнем углу нажимаем на кнопку «Экспорт».

Присваиваем любое имя сертификату, сохраняем его и устанавливаем по следующему пути (для ОС Windows): «Установить сертификат» «Локальный компьютер» «Поместить все сертификаты в следующее хранилище» «Доверенные корневые центры сертификации». 

В ОС Linux тоже нужно установить сертификат, иначе при попытке авторизоваться в репозитории возникнет ошибка x509: certificate signed by unknown authority.

Для установки сертификата в системах Ubuntu/Debian выполняем следующие шаги:

1. Устанавливаем пакет ca-certificates:

sudo apt -y install ca-certificates 

2. Установить сертификат можно только в формате CRT. Другие форматы не поддерживаются!

Копируем сертификат в директорию /usr/local/share/ca-certificates:

sudo cp nexus.crt /usr/local/share/ca-certificates

3. Устанавливаем сертификат при помощи команды:

sudo update-ca-certificates

Создание репозитория Docker в Nexus

Чтобы создать репозиторий Docker-образов, нужно выполнить следующие шаги:

1. В веб-интерфейсе Nexus переходим в раздел Server administration and configuration (1) далее в меню слева выбираем раздел Repositories (2):

2. В открывшемся разделе нажимаем на кнопку Create repository:

3. Из списка выбираем тип репозитория — docker (hosted):

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

  • в поле Name прописываем уникальное имя для данного репозитория;
  • в поле HTTPS ставим галочку и задаем любой свободный порт.

Затем сохраняем настройки репозитория.

Чтобы выполнить команду docker login, необходимо ввести адрес реестра и порт репозитория, который задали в параметре HTTPS. В примере команда выглядит следующим образом:

docker login nexus-test.com:9876

Если в выводе команды отобразилась фраза Login Succeeded, значит, мы успешно вошли в репозиторий Docker.

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

Комментарии0
Тоже интересно
Комментировать
Поделиться
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники