Налаштування 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.uaDocker:
Для 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 покроково
- Розгорніть 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 і забудьте про проблеми із залежностями. Зв'яжіться з нами для обговорення вашого кейсу — ми підготуємо оптимальне рішення.







