Налаштування 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.ua/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.ua/repository/npm-group/
npm config set //nexus.company.ua/repository/npm-group/:_authToken ${NEXUS_NPM_TOKEN}

# Публікація внутрішнього пакета
npm publish --registry https://nexus.company.ua/repository/npm-hosted/

PyPI:

# ~/.config/pip/pip.conf
[global]
index-url = https://nexus.company.ua/repository/pypi-group/simple/
trusted-host = nexus.company.ua

Docker:

Для Docker потрібні окремі порти (Nexus не вміє розділяти Docker registry по path, тільки по порту). Налаштуйте Docker daemon як insecure registry, якщо немає TLS.

docker pull nexus.company.ua:5001/library/nginx:1.25
docker tag my-app:1.0 nexus.company.ua:5000/my-app:1.0
docker push nexus.company.ua: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
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142