nexus репозиторий что это
Sonatype Nexus
Менеджер репозиториев для локального хранения и управления артефактами, зависимостями и Docker-образами.
подходящих зависимостей на старте проекта.
зависимостей на уязвимости перед вводом новых
компонентов в цепочку разработки.
Какие бизнес-задачи можно решать
Снижение рисков финансовых и репутационных потерь при возможной компрометации данных и\или остановке сервисов из-за взлома приложений через уязвимые сторонние компоненты.
Sonatype Nexus позволяет проксировать, собирать и управлять зависимостями без постоянного обращения к внешним хранилищам бинарных JAR-артефактов.
Особенности
Выбор подходящих зависимостей на старте проекта
Жизненный цикл Nexus позволяет в режиме реального времени получить представление о качестве компонентов и принять оптимальное решение о том, какие зависимости включать в ваши приложения.
Внутренние инструменты для обеспечения безопасности разработки
Контроль качества исходников
Богатый и гибкий механизм настройки политик
Проверка зависимостей на уязвимости перед вводом новых компонентов в цепочку разработки
Точная информация по
использованию зависимостей
с подробными отчетами
Нужна помощь или совет?
У вас есть вопрос? Не уверены что именно вам нужно? Вам необходимо независимое экспертное мнение по информационной безопасности в бизнес терминах?
В рамках бесплатной 30-минутной консультации, ответим на любые ваши вопросы
Centos
Nexus является популярным менеджером репозиториев (repository manager). Он используется для хранения артефактов или прокси, т.е. всё что выкачивается через него, сохраняется в нём.
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel createrepo
wget http://download.sonatype.com/nexus/3/latest-unix.tar.gz
vim /opt/nexus/bin/nexus.rc
vim /etc/systemd/system/nexus.service
[Unit]
Description=nexus service
After=network.target
[Service]
Type=forking
ExecStart=/opt/nexus/bin/nexus start
ExecStop=/opt/nexus/bin/nexus stop
User=nexus
Restart=on-abort
Уменьшить количество потребляемой оперативной памяти:
vim /var/nexus/nexus-3.19.1-01/bin/nexus.vmoptions
меняем
-Xms2703m
-Xmx2703m
на
-Xms512m
-Xmx512m
systemctl daemon-reload & & systemctl enable nexus
systemctl start nexus & & systemctl status nexus
WEB-интерфейс
для авторизации в качестве логина используйте
admin
пароль можно посмотреть тут:
cat /opt/sonatype-work/nexus3/admin.password
также по умолчанию пароль может быть следующим:
Login : admin
Описание работы с данной утилитой
Общий репозиторий:
Далее переходим к списку репозиториев:
Name: test-repo-epel
Создаём yum group
Name: yum-repo-group
добавляем в него 2 созданных нами прокси и сохраняем.
всё, репозиторий создан.
и на целевой тачке создаем репозиторий:
[Centos-7-Nexus]
baseurl = http://192.168.1.177:8081/repository/ yum-repo-group /
gpgcheck = 1
enabled=1
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
name = Centos-Nexus
сохраняем и проверяем.
Общий репозиторий docker:
Name: docker-private
type hosted
http: 8083
можно ещё добавить для https
Нажимаем save
Нажимаем save
Нажимаем save
на целевой тачке добавляем:
cat /etc/docker/daemon.json
<
«insecure-registries»: [«192.168.1.177:8081″,»192.168.1.177:8082″,»192.168.1.177:8083»],
«experimental»: true
>
Далее необходимо залогиниться в nexus репозитории:
docker login http://192.168.1.177:8082/repository/docker-group
. ВАЖНО. Если вы используете прокси, то необходимо убрать его, перезапустить демон, и рестартануть docker(reload не хватит):
Как создать APT репозиторий в Sonatype Nexus 3?
Авторизуйтесь
Как создать APT репозиторий в Sonatype Nexus 3?
Что такое Sonatype Nexus 3?
Sonatype Nexus 3 — это свободно распространяемый менеджер репозиториев, с удобным web-интерфейсом. Менеджер позволяет создавать репозитории, как для хранения конкретных форматов данных (yum, apt, Maven, Docker, npm, PyPl и так далее), так и формат хранения файлов Raw, в котором можно хранить любые типы файлов.
Менеджер репозиториев можно установить, как на обычную физическую или виртуальную машину, так и развернуть в docker-контейнере. Я разворачивал Nexus в docker-контейнере, поэтому буду описывать, как поднять APT репозиторий именно в docker. Доступные docker-образы Sonatype Nexus 3 можно найти по этой ссылке.
Установка зависимостей
Первое что нужно сделать, это подключиться к docker-контейнеру с оболочкой bash:
После этого нужно установить пакет pinentry, для того, чтобы можно было дальше сгенерировать ключи для apt репозитория:
Генерация ключей
После установки пакета pinentry, можно приступать к созданию ключей:
Заполняем поля, вводим O и нажимаем Enter. Далее нужно будет ввести 2 раза пароль, для генерации ключа. Копируем ID, который был сгенерирован 6C44AA9D06EA1B2E805C90FF6935F7FB57FFEF6F. Создаём открытый ключ:
Создаём закрытый ключ:
Здесь нужно будет ввести пароль, который вводили при генерации ID.
Выводим содержимое файла, который был сгенерирован при создание закрытого ключа. Копируем содержимое файла.
Создание APT репозитория
Заходим в web-интерфейс менеджера репозиториев Nexus http://10.10.1.1:8080. Авторизуемся с правами администратора и нажимаем на шестерёнку вверху. Далее выбираем раздел Repositories. Нажимаем Create repository и выбираем apt(hosted):
Создание APT репозитория
Далее заполняем поля и вставляем в поле Signing Key содержимое из файла private.gpg.key:
Вставляем закрытый ключ
В поле Passphrase вводим пароль, который вводили при генерации ID и закрытого ключа. Нажимаем Create repository. После этого будет создан репозиторий APT, в который можно загружать deb-файлы и подключать к Debian/Ubuntu или подобным ОС.
Установка и настройка Nexus Sonatype используя подход infrastructure as code
Sonatype Nexus – интегрированная платформа, с помощью которой разработчики могут проксировать, хранить и управлять зависимостями Java (Maven), образами Docker, Python, Ruby, NPM, Bower, RPM-пакетами, gitlfs, Apt, Go, Nuget, а также распространять свое программное обеспечение.
Зачем нужен Sonatype Nexus?
Артефакты поддерживаемые в базовой поставке Sonatype Nexus:
Артефакты поддерживаемые сообществом:
Установка Sonatype Nexus используя https://github.com/ansible-ThoTeam/nexus3-oss
Требования
Пример ansible-playbook для установки nexus без LDAP с репозиториями Maven (java), Docker, Python, Ruby, NPM, Bower, RPM и gitlfs.
Скриншоты:
Переменные роли
Role Variables
Переменные со значениями по умолчанию (см. default/main.yml ):
General variables
Если вы измените версию на более новую, то роль попытается обновить ваш установленный Nexus.
Если вы используете более старую версию Nexus, чем последняя, вы должны убедиться, что не используете функции, которые недоступны в установленном выпуске (например, размещенние yum репозиториев доступно для nexus больше чем 3.8.0, git lfs repo для nexus больше чем 3.3.0 и т. д.)
nexus timezone — это имя часового пояса Java, которое может быть полезно в сочетании с приведенными ниже выражениями cron для nexus_scheduled tasks.
Порт Nexus и контекстный путь
Пользователь и группа ОС Nexus
Пользователь и группа, используемые для владения файлами Nexus и запуска службы, будут созданы ролью, если она отсутствует.
Разрешить изменять домашний каталог по умолчанию для пользователя nexus
Каталоги экземпляров Nexus
Настройка использование памяти Nexus JVM
Это настройки по умолчанию для Nexus. Пожалуйста, не изменяйте эти значения Если вы не прочитали раздел памяти системных требований nexus и не понимаете, что они делают.
Как второе предупреждение, вот выдержка из вышеупомянутого документа:
Не рекомендуется увеличивать память JVM heap больше рекомендуемых значений в попытке повысить производительность. Это на самом деле может иметь противоположный эффект, приводя к ненужной работе операционной системы.
Пароль администратора
Пароль учетной записи «admin» для настройки. Это работает только при первой установке по умолчанию. Пожалуйста, смотрите [Изменить пароль администратора после первой установки](# change-admin-password-after-first-install), если вы хотите изменить его позже с помощью роли.
Настоятельно не рекомендуется хранить свой пароль в виде открытого текста в playbook, а использовать [шифрование ansible-vault] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (либо встроенный или в отдельный файл, загруженный, например, с помощью include_vars)
Анонимный доступ по умолчанию
Анонимный доступ по умолчанию вылючен. Подробнее про анонимный доступ.
Публичное имя хоста
Полное доменное имя и схема (https или http), по которой экземпляр Nexus будет доступен для его клиентов.
Доступ API для этой роли
Эти переменные контролируют, как роль подключается к API Nexus для предоставления.
Только для продвинутых пользователей. Скорее всего, вы не хотите изменять эти настройки по умолчанию
Настройка обратного прокси
С httpd_copy_ssl_files: true (по умолчанию) вышеупомянутые сертификаты должны существовать в вашей директории playbook и будут скопированы на сервер и настроены в apache.
Если вы хотите использовать существующие сертификаты на сервере, установите httpd_copy_ssl_files: false и предоставьте следующие переменные:
httpd_ssl_cert_chain_file_location является необязательным и должен быть оставлен неустановленным, если вы не хотите настраивать файл цепочки
Установить адрес электронной почты администратора по умолчанию
Конфигурация LDAP
Соединения LDAP и область безопасности по умолчанию отключены
Соединения LDAP, каждый элемент выглядит следующим образом:
Пример конфигурации LDAP для анонимной аутентификации (анонимная привязка), это также «минимальная» конфигурация:
Пример конфигурации LDAP для простой аутентификации (с использованием учетной записи DSA):
Пример конфигурации LDAP для простой аутентификации (с использованием учетной записи DSA) + группы, сопоставленные как роли:
Пример конфигурации LDAP для простой аутентификации (с использованием учетной записи DSA) + группы, динамически сопоставленные как роли:
Привилегии
Список привилегий для настройки. Посмотрите документацию и графический интерфейс, чтобы проверить, какие переменные должны быть установлены в зависимости от типа привилегии.
Эти элементы объединяются со следующими значениями по умолчанию:
Роли (внутри Nexus имеется виду)
Список ролей для настройки.
Пользователи
Local (non-LDAP) users/accounts list to create in nexus.
Список локальных (не LDAP) пользователей/учетных записей для создания в Nexus.
Маппинг Ldap пользователей/ролей. Состояние absent удалит роли из существующего пользователя, если он уже существует.
Пользователи Ldap не удаляются. Попытка установить роль для несуществующего пользователя приведет к ошибке.
Селекторы контента
Для получения дополнительной информации о селекторе контента см. Документацию.
Чтобы использовать селектор контента, добавьте новую привилегию с type: repository-content-selector и соответствующим contentSelector
Blobstores и репозитории
Delete the repositories from the nexus install initial default configuration. This step is only executed on first-time install (when nexus_data_dir has been detected empty).
Удаление репозиториев из исходной конфигурации по умолчанию для Nexus. Этот шаг выполняется только при первой установке (когда nexus_data_dir пустой).
Blobstores to create. A blobstore path and a repository blobstore cannot be updated after initial creation (any update here will be ignored on re-provisionning).
Configuring blobstore on S3 is provided as a convenience and is not part of the automated tests we run on travis. Please note that storing on S3 is only recommended for instances deployed on AWS.
Cоздание Blobstores. Путь к хранилищу и репозиторию хранилищ не могут быть обновлены после первоначального создания (любое обновление здесь будет игнорироваться при повторной установке).
Настройка хранилища BLOB-объектов на S3 предоставляется для удобства. Обратите внимание, что хранение на S3 рекомендуется только для экземпляров, развернутых на AWS.
Выше пример конфигурации прокси-сервер Maven.
Maven hosted repositories configuration. Negative cache config is optionnal and will default to the above values if omitted.
Конфигурация размещенных (hosted) репозиториев Maven. Конфигурация отрицательного кэша (-1) является необязательной и будет по умолчанию использовать вышеуказанные значения, если не указана.
Все три типа репозитория объединяются со следующими значениями по умолчанию:
Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS and yum repository types:
see defaults/main.yml for these options:
Хранилища Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS и yum по умолчанию выключены:
Смотрите defaults/main.yml для этих опций:
Обратите внимание, что вам может потребоваться включить определенные области безопасности, если вы хотите использовать другие типы репозиториев, кроме maven. Это по умолчанию false
Remote User Realm также может быть включена с помощью
и заголовок может быть настроен путем определения
Запланированные задачи
Запланированные задачи для настройки. typeId и специфичные для задачи taskProperties / booleanTaskProperties можно угадать либо:
Свойства задачи должны быть объявлены в правильном блоке yaml в зависимости от их типа:
Резервные копии
Если вы хотите ротировать/удалять резервные копии, установите nexus_backup_rotate: true и настройте количество бекапов, которое вы хотели бы сохранить с помощью nexus_backup_keep_rotations (по умолчанию 4).
Процедура восстановления
Удаление nexus
Предупреждение: это полностью удалит текущие данные. Обязательно сделайте резервную копию ранее, если это необходимо
Изменить пароль администратора после первой установки
Если вы хотите изменить пароль администратора после первой установки, вы можете временно изменить его на старый пароль из командной строки. После изменения nexus_admin_password в вашей игровой книге вы можете запустить:
Повторное использование приватных Android библиотек с помощью Sonatype Nexus Repository OSS
Думаю, что у многих возникала необходимость повторно использовать отдельные модули своего Android приложения в другом проекте. Для решения этой задачи есть простые пути, например, публично разместить Android библиотеку с помощью JitPack. Решение отличное, но если нужно разместить библиотеку приватно, то придется заплатить, а тариф чаще всего будет зависеть от количества размещаемых артефактов. Данное решение подойдет далеко не всем.
Ниже я предложу простой вариант решения данной проблемы с использованием Sonatype Nexus Repository OSS.
Введение
Статья не претендует на полноту и отражает лишь базовое решение. В итоге в вашем распоряжении будет установленное ПО для управления артефактами на стороне какого-либо хоста, скрипт для публикации Android библиотеки, возможность реализовать зависимости в своём приложении из локального maven репозитория. Возможно, публикации подобного рода уже есть на Хабре, но понятного туториала для Android разработчика я не нашел, что и побудило меня поделиться с вами информацией. Буду рад, если она окажется действительно полезной в работе.
Шаг 1. Подготовка
Для начала необходимо определиться с тем куда устанавливать Nexus. Логично, если это будет сервер, к которому у вас всегда будет доступ при разработке. В данной статье мы будем устанавливать Nexus на тот же хост, на котором ведем разработку. Отличия при установке на сервер будут лишь в ip адресе, по которому мы будем обращаться к репозиториям.
Перед установкой Nexus, нужно скачать и установить JRE. Подойдёт только Oracle JRE и только версии 1.8 (пробовал на 10, но Nexus ругался), это явно указано в документации. Не забудьте добавить в PATH путь к исполняемым файлам JRE.
Далее нужно скачать Nexus с официального сайта. На момент написания статьи это версия 3.12
Шаг 2. Установка и настройка Nexus
Скачанный архив достаточно распаковать там, где вам удобно. После чего можно запускать программу и начинать работать. Для долгосрочного и удобного использования нужно зарегистрировать Nexus как службу и запускать её при старте ОС. Как это сделать — достаточно понятно описано в документации. В нашем же случае достаточно перейти в папку » nexus-3.12/bin/ » и запустить из командной строки файл nexus.
В случае c Windows:
В результате вы должны увидеть оповещение об успешном старте, выглядит оно примерно так:
Пришло время проверить работоспособность Nexus. Для этого достаточно перейти по ссылке http://localhost:8081. Как вы понимаете, в случае с сервером вместо » localhost » нужно указать ip адрес вашего сервера, а Nexus для работы использует порт 8081. Вы увидите такую страницу:
Первым делом нужно авторизоваться, жмём » Sign in » справа вверху и вводим логин ( admin ) и пароль ( admin123 ) администратора. После этого появляется иконка шестеренки, по нажатию на которую мы попадём в настройки.
Но перед тем, как перейти к описанию репозиториев, стоит сделать основные настройки для пользователей. Перейдем в раздел » Roles «.
Помимо роли администратора и анонимного пользователя я предлагаю выделить роли типа » Downloader » — для загрузки зависимостей в проекты, » Contributor » — для отправки библиотек в Nexus.
Жмем «Create role», затем выбираем «Nexus role», вводим данные для «Downloader» как на скрине ниже:
О том, какие привилегии за что отвечают — подробно описано в документации. Нам нужно выбрать привилегию с флагом » repository-view » (отвечает за работу с данными именно репозиториев), привилегия должна также давать право на чтение данных репозитория, это флаг » read «, и так как в Android мы работаем с maven репозиториями, то стоит остановиться на флаге » maven2 «, чтобы не давать пользователю работать с другими типами репозиториев. Жмём » Create role «.
По аналогии создаем роль » Contributor «. Разница лишь в том, что право чтения унаследуем от роли » Downloader » (настройка в нижней части страницы), а руками дадим привилегии на редактирование, добавление артефактов в репозитории, а также на просмотр данных репозиториев через web интерфейс.
Далее создадим пользователей, которым назначим настроенные роли. Заходим в раздел » Users » (в левой части окна) и нажимаем » Create local user «. Для проверки можно задать пароли аналогичные стандартному паролю админа, то есть » downloader123 » и » contributor123 «. Образец заполнения на скрине:
Так как наша цель — приватная работа, то стоит отключить доступ к данным репозиториев для анонимных пользователей, для этого заходим в пользователя » anonimous » и меняем его статус с » Active » на » Disabled «. В этом случае нельзя будет анонимно получить зависимости в Android проекте, а только с указанием определенного пользователя и пароля, но скачивать данные через web интерфейс всё ещё будет возможно.
Для того, чтобы запретить просматривать содержимое репозиториев через web интерфейс анонимным пользователям — перейдём в раздел » Anonimous » и снимем флаг с опции » Allow anonymous users to access the server «. Не забудьте сохранить изменения.
Остался последний этап — настройка репозиториев. Переходим в раздел » Repositories » и видим там созданные по умолчанию репозитории. Среди них есть репозитории » maven2 «, если присмотреться, то можно увидеть разные типы: «proxy», «group», «hosted». «Proxy» репозиторий просто пробрасывает при обращении к себе пользователя на другой репозиторий, в случае с преднастроенным » maven-central » это отсылка на https://repo1.maven.org/maven2/, «group» может включать в себя несколько репозиториев, а «hosted» — это уже конкретный репозиторий, хранящийся в Nexus. Они-то нам сейчас и пригодятся.
Создадим репозитории для «Release» и «Snapshot» версий артефактов. Жмем » Create repository «, выбираем » maven2 (hosted) «. Первый репозиторий назовём «android» и просто сохраним не меняя настройки:
Второй репозиторий назовём «android_snapshot», поменяем » Version policy » на «Spapshot» и » Deployment policy » на «Allow redeploy».
Если не понятно на что это влияет — можно прочитать здесь. Фактически для репозитория «android» будет недоступна возможность загрузить повторно одну и ту же версию библиотеки, это привычное поведение при общении, например, с maven-central. Для репозитория «android_snapshot» наименование версии обязательно должно будет оканчиваться на «SNAPSHOT» и будет доступна загрузка одной и той же версии повторно.
Также обратите внимание на то, что в списке репозиториев есть колонка «URL» с кнопками «Copy», эти ссылки понадобятся нам в дальнейшем для доступа к репозиториям из проектов.
Поздравляю! Базовая настройка Nexus сделана, пора приступить к созданию и публикации библиотеки.
Шаг 3. Создание и публикация Android библиотеки
Создаём Android проект, назовём его «TestLibrary». Далее в «Project View» нажимаем на корень проекта правой кнопкой мыши выбираем «New» и «Module». В открывшемся окне выбираем «Android library» и называем библиотеку «HelloLibrary». В итоге вы увидите рядом с модулем «app» модуль нашей новой библиотеки.
Добавим в библиотеку класс с функцией приветствия:
Библиотека готова, пора публиковать. В «Project view» в модуль «hellolibrary» добавляем файл и называем его «publisher.gradle». В нём будет храниться скрипт для публикации библиотеки.
Далее переходим в «build.gradle» нашей библиотеки, применяем к нему наш publisher и очищаем от лишних зависимостей:
Теперь можем публиковать, просто выполнив задание » publishAndroidLibraryPublicationToMavenRepository «.
Шаг 4. Использование зависимостей из Nexus
Для теста предлагаю создать ещё один пустой Android проект.
Для начала подключим репозиторий к проекту, просто добавив данные в «build.gradle» файл уровня проекта:
А теперь как и с любой другой библиотекой получим зависимость на нашу «hellolibrary» через implementation в «build.gradle» файле уровня «app».
Теперь вы можете вызвать функцию helloFromOurLibrary() в своём Android проекте и протестировать работоспособность всей схемы. Поздравляю!
Резюме
Теперь у вас есть возможность повторно использовать приватные Android библиотеки в проектах. Жду замечаний!
Надеюсь вы не зря потратили своё время, спасибо!