Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Установка и использование Nexus Repository для хранения артефактов

20182
13 минут чтения
Средний рейтинг статьи: 4.7

Инструкция обновлена 23 октября 2025 г.

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

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

Одним из таких решений является продукт от американской компании Sonatype под названием Nexus Repository. Nexus поддерживает более 15 различных форматов артефактов среди которых можно выделить APT, Docker, Go, Helm, Maven, npm, PyPi и другие. С полным списком поддерживаемых артефактов можно ознакомиться в документации Nexus

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

В этой статье мы будем устанавливать бесплатную версию Nexus версии 3.85.0 на ОС Linux Ubuntu 24.04.

Перенос серверов в облако

Перенесем вашу инфраструктуру в облако — быстро,
безопасно и с гарантией результата.

Предоставим грант до 1 000 000 ₽ на облачную
инфраструктуру и возьмем на себя весь процесс.

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

  • Облачный сервер с Ubuntu 24.04.
  • Минимум 4-ядерный процессор. Рекомендуется использовать 8-ядерный и более.
  • Оперативная память желательно не менее 8 ГБ.
  • Наличие минимум 50 ГБ свободного места на жестком диске. В данный минимум не включено место, которое занимает операционная система и сторонние установленные программы. Если места будет недостаточно, Nexus не запустится.
  • Установленный Docker, который понадобится для проверки реестра образов.

На официальном сайте Sonatype также приведены примеры системных требований для определенного количества репозиториев и хранящихся в них артефактов.

Установка Nexus Repository

Все команды, приведенные ниже, необходимо выполнить от имени root-пользователя или пользователя с правами sudo.

1. Первым делом установим Java. Для этого сначала обновляем списки пакетов:

    

2. Далее переходим к установке Java 17 версии, используя пакет OpenJDK:

    

После установки проверяем, что Java установилась корректно, используя команду для вывода версии Java:

    

Image37

Если у вас установлено несколько версий Java, то необходимо переключиться на 17 версию. На сервере возможно присутствие двух и более версий Java, но использовать можно только одну. Для переключения необходимо выполнить команду:

    

В открывшемся интерактивном меню необходимо выбрать нужную версию Java при помощи клавиши TAB, далее подтвердить выбор, нажав Enter.

Следующие шаги относятся непосредственно к установке самого Nexus. Установка будет произведена в директорию /opt.

3. Скачиваем архив с программой из официального сайта при помощи утилиты wget:

    

Image20

4. Разархивируем скачанный архив в директорию /opt:

    

5. Будет создано две директории: sonatype-work и nexus-3.85.0-03, где 3.85.0-03 — это ваша версия Nexus. В директории sonatype-work содержатся временные файлы, кэш-файлы и лог-файлы. Для удобства, изменяем название директории nexus-3.85.0-03 на nexus:

    

6. Для безопасной работы Nexus необходимо создать пользователя с именем nexus:

    

Image25

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

    

7. Назначаем владельца и группу для директорий /opt/nexus и /opt/sonatype-work, задав в качестве владельца ранее созданного пользователя nexus:

    

8. Открываем конфигурационный файл nexus.rc, который располагается в /opt/nexus/bin/, при помощи любого текстового редактора. 

    

Удаляем символ # (символ комментария) и указываем пользователя с именем nexus.

Image8

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

9. Чтобы запускать, останавливать и перезапускать Nexus, необходимо создать systemd unit-файл. Создаем файл с именем nexus.service в директории /etc/systemd/system:

    

Со следующим содержимым:

    

Image30

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

10. Запускаем nexus:

    

И проверяем его статус:

    

Image2

Если в статусе отображается active, значит, Nexus успешно запущен.

11. Далее добавляем Nexus в автозагрузку:

    

Полный запуск Nexus может занимать до 5 минут. Готовность программы можно проверить в файле nexus.log:

    

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

    

Если при первом запуске программы прошло более 5 минут, а эта строка в лог-файле отсутствует, необходимо перезапустить nexus:

    

По умолчанию веб-интерфейс Nexus доступен с любых IP-адресов (0.0.0.0) и слушает порт 8081. Переходим в него по адресу сервера с портом 8081.

Image12

Первичная настройка Nexus

При первом входе в веб-интерфейс Nexus нам предложат настроить несколько параметров. Для авторизации необходимо нажать на кнопку «Log in», которая находится справа сверху (иконка с с силуэтом пользователя):

Image36

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

Image31

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

    

Полученный пароль используем для входа и нажимаем на кнопку «Log in».

Далее необходимо произвести первичную настройку Nexus:

Image17

Придумываем новый пароль для пользователя admin:

Image28

При появлении информационного сообщения нажимаем на кнопку «Next»:

Image16

Соглашаемся с лицензионным соглашением и нажимаем на кнопку «Agree»:

Image5

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

Image6

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

Image33

Создание репозитория для хранения Docker-образов

Для того чтобы создать репозиторий для Docker-образов, необходимо перейти в веб-интерфейс Nexus и авторизоваться под учетной записью администратора. 

1. В главном меню переходим в раздел Settings:

Image4

2. В меню слева выбираем пункт Repositories:

Image21

3. Далее нажимаем на кнопку Create repository:

Image27

Выбираем из списка репозиторий с именем docker (hosted):

Image26

Nexus поддерживает 3 различных типа репозиториев:

  • hosted — тип репозитория, в котором артефакты хранятся напрямую в Nexus;
  • proxy — тип репозитория, который проксирует запросы на удаленный репозиторий. Перед отправкой запроса на наличие требуемого артефакта Nexus проверяет локальное содержимое репозитория, и, если артефакт не найден, запрос перенаправляется в удаленный репозиторий. В качестве примера можно привести репозитории APT.
  • group  — тип репозитория, который объединяет несколько репозиториев одного и того же формата в одну общую группу. Эта общая группа и связанный с ней URL-адрес могут использоваться в качестве единой точки доступа ко всем компонентам в определенном формате, полученным из нескольких репозиториев.

4. В поле Name вписываем имя для репозитория, например docker-images. В разделе Repository Connectors ставим чекбокс напротив параметра Other Connectors и в параметре HTTP задаем любой порт, который не занят на сервере, где установлен Nexus, например, 8083:

Image1

5. Для создания репозитория нажимаем на кнопку Create repository:

Image35

Для взаимодействия с репозиториями Docker Nexus использует коннекторы (connectors), которые позволяют задать порт, тем самым открывая доступ к репозиторию по протоколу HTTP или HTTPS. Однако по умолчанию Nexus доступен только по протоколу HTTP. Если попытаться выполнить команду docker login на хосте, указав адрес реестра и порт репозитория и используя при этом протокол HTTP, то Docker отобразит ошибку http: server gave HTTP response to HTTPS client

6. По умолчанию Docker не поддерживает работу с репозиториями, которые используют самоподписанные сертификаты, а также репозитории по протоколу HTTP. Для того чтобы разрешить работу с репозиториями по протоколу HTTP, необходимо создать (если отсутствует) файл daemon.json, который располагается в /etc/docker/.

    

И прописать следующий блок:

    

Где 93.183.83.16:8083 — адрес, на котором располагается Nexus, и HTTP порт от репозитория Docker, который был задан ранее в веб-интерфейсе. 

Image9

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

7. После этого перезагружаем демон Docker:

    

Будьте внимательны, так как перезапуск агента Docker затронет работающие контейнеры. Часть из них не будет запущена автоматически, при условии, что контейнер не был ранее запущен с опцией --restart=always.

8. Далее выполняем команду docker login, указав в качестве адреса репозитория адрес, на котором находится Nexus, и порт от репозитория:

    

Image14

В качестве логина можно воспользоваться учетной записью администратора — admin.

9. Проверим, сможем ли мы сделать push (отправить образ в репозиторий). Для этого возьмем образ с alpine:

Для этого возьмем образ с alpine, предварительно скачав его с официального реестра Docker (Docker Hub):

    

10. Проверим, что образ успешно был скачан:

    

Image18

11. Присвоим образу тег. Формат тега для Docker образов имеет следующий вид:

    

Наш тег будет следующим:

    

12. Проверяем, что у нас появился новый образ:

    

Image23

Для того чтобы выполнить push в репозиторий, воспользуемся командой:

    

Image11

Открываем веб-интерфейс Nexus, выбираем раздел Browse, далее переходим в созданный ранее репозиторий и видим, что образ успешно появился:

Image19

Настройка HTTPS

Правильным решением при работе с репозиториями Docker является использование протокола HTTPS. Для настройки HTTPS в Nexus выполняем следующие шаги:

1. Переходим в директорию /opt/nexus/etc/ssl:

    

2) Для генерации самоподписанного сертификата воспользуемся утилитой keytool.

keytool представляет собой утилиту командной строки для создания ключей и сертификатов. Также является хранилищем ключей для Java. Воспользуемся следующей командой для создания сертификата:

    

Значения, выделенные красным цветом, необходимо заменить на свои:

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

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

    

Например:

    

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

    

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

Image10

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

    

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

    

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

В этом же блоке меняем значение строки:

    

Image34

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

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

    

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

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

Также в параметрах KeyStorePath и TrustStorePath можно задать имя сгенерированного сертификата:

Image22

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

    

В ОС Linux сертификат должен быть установлен на уровне ОС, иначе при попытке авторизоваться в репозитории при помощи команды docker login появится ошибка:

    

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

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

    

8. Установить сертификат можно только в формате .crt Другие форматы не поддерживаются. Так как на выходе файл сертификата был с расширением .cert, необходимо изменить расширение на .crt.

Для этого выполняем команду в директории /opt/nexus/etc/ssl:

    

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

    

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

    

Image3

11. Для того чтобы настроить HTTPS в репозитории, необходимо перейти в веб-интерфейс Nexus, авторизоваться под учетной записью администратора.

На главной странице переходим в раздел Settings и выбираем пункт Repositories. Находим ранее созданный репозиторий Docker и переходим в него.

Далее в главном меню нажать на кнопку Server administration and configuration (значок шестеренки). В левом меню выбрать пункт Repositories, далее найти необходимый репозиторий. Напротив параметра HTTPS ставим чекбокс и задаем любой порт, который не занят на сервере, где установлен Nexus, например 8344:

Image24

Сохраняем изменения кнопкой Save.

12. Прежде чем авторизоваться в реестре по HTTPS, удалим ранее созданный файл daemon.json в директории /etc/docker:

    

Перезапускаем демон docker:

    

Выполняем команду docker login, указав в качестве адреса репозитория адрес, на котором находится Nexus, и порт HTTPS от репозитория:

    

Image13

В данном примере мы используем локальное доменное имя nexus-repo.com, которое предварительно прописали в файле /etc/hosts

12. Проверим, сможем ли мы сделать push (отправить образ в репозиторий). Для этого возьмем образ с nginx, предварительно скачав его с Docker Hub:

    

Image7

Присвоим образу тег:

    

13. Для того чтобы выполнить push в репозиторий, воспользуемся командой:

    

Image32

Снова переходим в разделе Browse в веб-интерфейсе Nexus и открываем созданный ранее репозиторий. Образ успешно появился:

Image29

Разверните Nexus Repository на серверах Timeweb Cloud

Cloud MSK 15

477 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

657 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Заключение

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

20182
13 минут чтения
Средний рейтинг статьи: 4.7
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server