Предварительные требования
Я буду устанавливать 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
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, а также других артефактов. Решение подойдет как для крупных команд, так и для небольших проектов.