Инструкция обновлена 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:

Если у вас установлено несколько версий Java, то необходимо переключиться на 17 версию. На сервере возможно присутствие двух и более версий Java, но использовать можно только одну. Для переключения необходимо выполнить команду:
В открывшемся интерактивном меню необходимо выбрать нужную версию Java при помощи клавиши TAB, далее подтвердить выбор, нажав Enter.
Следующие шаги относятся непосредственно к установке самого Nexus. Установка будет произведена в директорию /opt.
3. Скачиваем архив с программой из официального сайта при помощи утилиты wget:

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:

Далее необходимо отключить возможность входа на сервер под этим пользователем. Для этого выполните команду:
7. Назначаем владельца и группу для директорий /opt/nexus и /opt/sonatype-work, задав в качестве владельца ранее созданного пользователя nexus:
8. Открываем конфигурационный файл nexus.rc, который располагается в /opt/nexus/bin/, при помощи любого текстового редактора.
Удаляем символ # (символ комментария) и указываем пользователя с именем nexus.

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

Сохраняем файл и выходим из него.
10. Запускаем nexus:
И проверяем его статус:

Если в статусе отображается active, значит, Nexus успешно запущен.
11. Далее добавляем Nexus в автозагрузку:
Полный запуск Nexus может занимать до 5 минут. Готовность программы можно проверить в файле nexus.log:
Если программа полностью запущена, вы увидите строку:
Если при первом запуске программы прошло более 5 минут, а эта строка в лог-файле отсутствует, необходимо перезапустить nexus:
По умолчанию веб-интерфейс Nexus доступен с любых IP-адресов (0.0.0.0) и слушает порт 8081. Переходим в него по адресу сервера с портом 8081.

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

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

Для этого на сервере, где установлен Nexus, необходимо выполнить команду:
Полученный пароль используем для входа и нажимаем на кнопку «Log in».
Далее необходимо произвести первичную настройку Nexus:

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

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

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

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

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

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

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

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

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

Nexus поддерживает 3 различных типа репозиториев:
- hosted — тип репозитория, в котором артефакты хранятся напрямую в Nexus;
- proxy — тип репозитория, который проксирует запросы на удаленный репозиторий. Перед отправкой запроса на наличие требуемого артефакта Nexus проверяет локальное содержимое репозитория, и, если артефакт не найден, запрос перенаправляется в удаленный репозиторий. В качестве примера можно привести репозитории APT.
- group — тип репозитория, который объединяет несколько репозиториев одного и того же формата в одну общую группу. Эта общая группа и связанный с ней URL-адрес могут использоваться в качестве единой точки доступа ко всем компонентам в определенном формате, полученным из нескольких репозиториев.
4. В поле Name вписываем имя для репозитория, например docker-images. В разделе Repository Connectors ставим чекбокс напротив параметра Other Connectors и в параметре HTTP задаем любой порт, который не занят на сервере, где установлен Nexus, например, 8083:

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

Для взаимодействия с репозиториями 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, который был задан ранее в веб-интерфейсе.

Сохраняем файл и выходим из него.
7. После этого перезагружаем демон Docker:
Будьте внимательны, так как перезапуск агента Docker затронет работающие контейнеры. Часть из них не будет запущена автоматически, при условии, что контейнер не был ранее запущен с опцией --restart=always.
8. Далее выполняем команду docker login, указав в качестве адреса репозитория адрес, на котором находится Nexus, и порт от репозитория:

В качестве логина можно воспользоваться учетной записью администратора — admin.
9. Проверим, сможем ли мы сделать push (отправить образ в репозиторий). Для этого возьмем образ с alpine:
Для этого возьмем образ с alpine, предварительно скачав его с официального реестра Docker (Docker Hub):
10. Проверим, что образ успешно был скачан:

11. Присвоим образу тег. Формат тега для Docker образов имеет следующий вид:
Наш тег будет следующим:
12. Проверяем, что у нас появился новый образ:

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

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

Настройка 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 — имя файла с сертификатом, которое будет получено на выходе.

4. Далее переходим к редактированию конфигурационного файла nexus-default.properties, который находится в /opt/nexus/etc:
Находим блок, содержащий строку с комментарием # Jetty section, и в конец файла добавляем параметр:
Так мы задаем порт, на котором будет доступен HTTPS.
В этом же блоке меняем значение строки:

Сохраняем изменения и выходим из файла.
5. Далее редактируем файл jetty-https.xml, который находится в /opt/nexus/etc/jetty:
Находим блок с именем sslContextFactory.
В строках KeyStorePassword, KeyManagerPassword, TrustStorePassword прописываем пароль, который был задан на этапе генерации сертификата. В нашем примере пароль — test12345.
Также в параметрах KeyStorePath и TrustStorePath можно задать имя сгенерированного сертификата:

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. Установим сертификат при помощи команды:

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

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

В данном примере мы используем локальное доменное имя nexus-repo.com, которое предварительно прописали в файле /etc/hosts.
12. Проверим, сможем ли мы сделать push (отправить образ в репозиторий). Для этого возьмем образ с nginx, предварительно скачав его с Docker Hub:

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

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

Разверните Nexus Repository на серверах Timeweb Cloud
477 ₽/мес
657 ₽/мес
Заключение
Nexus Repository является отличным решением для хранения и управления артефактами. Благодаря поддержке большого количества различных форматов артефактов данный продукт подойдет как небольшим командам разработки, так и более крупным.
