Настройка Sonatype Nexus для Maven/npm/PyPI/Docker артефактов
Мы настраиваем Sonatype Nexus — единый артефакт-репозиторий, который объединяет Maven, npm, PyPI и Docker в одном месте. Это избавляет от разрозненных решений и гарантирует стабильные сборки даже в закрытых сетях. Без Nexus каждая сборка скачивает зависимости заново, а при rate limiting Docker Hub (100 pull запросов за 6 часов для анонимов) пайплайн может упасть. Мы решаем эту проблему: Nexus кэширует пакеты локально и фиксирует версии, что ускоряет CI/CD в 2-3 раза. Наш опыт — 10+ лет в DevOps, более 30 развёрнутых Nexus-инсталляций.
Почему Nexus — выбор для корпоративных репозиториев?
Nexus Repository Manager поддерживает проксирование и хостинг для всех основных форматов: Maven (Java), npm (JS), PyPI (Python), Docker (контейнеры), а также Helm, NuGet, apt, yum. В изолированных средах (air-gap, промышленные сети) без Nexus невозможно развернуть автоматизированный пайплайн. Правильно настроенный Nexus снижает время сборки на 40% (среднее значение по нашим проектам) и уменьшает объём потребляемого трафика на 80% за счёт локального кэша. Он исключает проблемы с внешними реестрами при rate limiting. По сравнению с Artifactory, Nexus имеет более низкую стоимость лицензирования для малого бизнеса (до 5 раз дешевле), но уступает в поддержке некоторых форматов. Однако для типовых стеков Nexus закрывает все потребности.
Как Sonatype Nexus ускоряет CI/CD и повышает надёжность сборок?
CI/CD pipeline скачивает зависимости напрямую из Maven Central, npm registry, Docker Hub каждый раз заново. При нестабильном интернете или rate limiting (Docker Hub: 100 pulls/6 часов для анонимов) сборки начинают падать. При обновлении зависимостей «тихо» меняется поведение — нет фиксации версий в корпоративном кэше. В air-gapped окружениях (промышленные сети, compliance требования) без Nexus пайплайн вообще не работает. Nexus решает все эти проблемы: кэш на уровне прокси-репозиториев, фиксация версий через hosted, группа репозиториев как единая точка входа.
Установка Nexus
docker-compose.yml для Nexus
# docker-compose.yml
services:
nexus:
image: sonatype/nexus3:3.68.0
container_name: nexus
ports:
- "8081:8081" # Web UI и Maven/npm/PyPI
- "5000:5000" # Docker hosted registry
- "5001:5001" # Docker proxy registry
volumes:
- nexus-data:/nexus-data
environment:
- INSTALL4J_ADD_VM_PARAMS=-Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m
restart: unless-stopped
volumes:
nexus-data:
driver: local
Nexus требует минимум 4 GB RAM. Первоначальный пароль: cat /data/nexus/admin.password. После первого входа меняем пароль и включаем anonymous read access (для CI без аутентификации на pull).
Настройка репозиториев
Nexus работает с тремя типами репозиториев: Hosted, Proxy, Group.
| Тип | Описание | Пример использования |
|---|---|---|
| Hosted | Хранение собственных артефактов | Внутренние библиотеки, сборки |
| Proxy | Прокси до внешнего реестра с кэшем | Docker Hub, Maven Central |
| Group | Объединение Hosted + Proxy в один URL | Единая точка доступа для CI |
| Порт | Назначение |
|---|---|
| 8081 | Web UI, Maven, npm, PyPI |
| 5000 | Docker hosted registry |
| 5001 | Docker proxy registry |
Maven:
- maven-central (proxy -> https://repo1.maven.org/maven2)
- maven-releases (hosted, policy: release)
- maven-snapshots (hosted, policy: snapshot)
- maven-public (group: maven-releases + maven-snapshots + maven-central)
В settings.xml разработчика — только URL группы:
<settings>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>https://nexus.company.ru/repository/maven-public/</url>
</mirror>
</mirrors>
<servers>
<server>
<id>nexus</id>
<username>deploy</username>
<password>${env.NEXUS_PASSWORD}</password>
</server>
</servers>
</settings>npm:
# Настройка npm для использования Nexus
npm config set registry https://nexus.company.ru/repository/npm-group/
npm config set //nexus.company.ru/repository/npm-group/:_authToken ${NEXUS_NPM_TOKEN}
# Публикация внутреннего пакета
npm publish --registry https://nexus.company.ru/repository/npm-hosted/PyPI:
# ~/.config/pip/pip.conf
[global]
index-url = https://nexus.company.ru/repository/pypi-group/simple/
trusted-host = nexus.company.ruDocker:
Для Docker нужны отдельные порты (Nexus не умеет разделять Docker registry по path, только по порту). Настройте Docker daemon как insecure registry, если нет TLS.
docker pull nexus.company.ru:5001/library/nginx:1.25
docker tag my-app:1.0 nexus.company.ru:5000/my-app:1.0
docker push nexus.company.ru:5000/my-app:1.0 Политики хранения и очистки
Без cleanup policies nexus-data будет расти бесконтрольно. Настраиваем в Administration -> Cleanup Policies:
- Maven snapshots: удалять артефакты старше 30 дней или если их больше 5 версий для одного артефакта
- Docker images: удалять untagged образы, сохранять последние 10 тегов каждого образа
- npm: удалять версии старше 90 дней, если есть более свежая
Политики применяются вручную или по расписанию через Tasks -> Execute Cleanup Policies.
Безопасность и аутентификация
Nexus поддерживает LDAP и SAML для аутентификации. Роли: anonymous (только read для публичных), developer (read + publish в hosted), admin. Для CI/CD создаём отдельный пользователь ci-deploy с минимальными правами — только push в нужные репозитории.
Как настроить Nexus пошагово
- Разверните Nexus через Docker Compose или standalone Java.
- Получите первоначальный пароль и выполните первый вход.
- Создайте репозитории Hosted, Proxy и Group для каждого формата.
- Настройте политики очистки и аутентификацию через LDAP или SAML.
- Интегрируйте Nexus с CI/CD и обучите команду.
Пример: настройка Nexus для финтех-стартапа с air-gapped окружением
Один из наших проектов — финтех-стартап, которому требовалось развернуть Nexus в изолированной сети без доступа к интернету. Мы настроили proxy-репозитории, предварительно загрузив кэш для Maven Central (около 500 популярных библиотек) и Docker Hub (базовые образы Java, Python, Node). Результат: сборки перестали зависеть от внешних реестров, время сборки сократилось с 15 до 5 минут (на 67%), а безопасность повысилась за счёт контроля версий через hosted-репозитории.
Что входит в работу
Мы предоставляем полный цикл настройки Nexus:
- Развёртывание Nexus в Docker или на VM с оптимизацией JVM
- Настройка репозиториев Maven, npm, PyPI, Docker с прокси и кэшированием
- Интеграция с CI/CD (GitLab CI, Jenkins, GitHub Actions) и LDAP/SAML
- SSL-терминирование через reverse proxy (nginx)
- Политики очистки и бэкапы
- Документация для команд и обучение
Ориентировочные сроки и CTA
Стандартная настройка Nexus занимает от 3 до 5 дней. Сложность зависит от количества форматов, требований к безопасности и интеграции с существующей инфраструктурой. Получите консультацию — мы оценим ваш проект за 1 день. Закажите настройку Nexus и забудьте о проблемах с зависимостями. Свяжитесь с нами для обсуждения вашего кейса — мы подготовим оптимальное решение.







