Настройка Sonatype Nexus для Maven, npm, PyPI и Docker

Разрозненные реестры пакетов замедляют сборки и делают пайплайны уязвимыми к сбоям внешних сервисов. Мы настраиваем Sonatype Nexus — единое хранилище для Maven, npm, PyPI и Docker артефактов, которое объединяет все зависимости в одном месте. Наша команда реализует проект под ключ, обеспечивая стабильную работу репозитория и последующую поддержку.
Часто задаваемые вопросы

Настройка 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.ru

Docker:

Для 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 пошагово

  1. Разверните Nexus через Docker Compose или standalone Java.
  2. Получите первоначальный пароль и выполните первый вход.
  3. Создайте репозитории Hosted, Proxy и Group для каждого формата.
  4. Настройте политики очистки и аутентификацию через LDAP или SAML.
  5. Интегрируйте 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 и забудьте о проблемах с зависимостями. Свяжитесь с нами для обсуждения вашего кейса — мы подготовим оптимальное решение.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1543
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1374
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142