Налаштування приватного Docker Registry (Nexus)
Команда не може завантажити образ до Docker Hub — rate limits блокують push після 100 pull/год для анонімів. При цьому Maven артефакти вже зберігаються в Nexus. Рішення — розгорнути приватний Docker Registry на тому ж Nexus. Це єдина точка керування доступом, кешування зовнішніх registry і зрозуміла CI/CD інтеграція. Наші інженери з 10-річним досвідом виконали 30+ проєктів налаштування Nexus, а загальна кількість впроваджень перевищує 50. Наша компанія працює на ринку понад 5 років, і всі спеціалісти мають офіційну сертифікацію Sonatype. Гарантуємо якість налаштування та безперебійну роботу. Розглянемо конфігурацію під ключ: від HTTP-конектора до LDAP і автоматичного очищення кешу.
Nexus Repository Manager від Sonatype — універсальний артефактний репозиторій. Він зберігає не лише Docker-образи, а й Maven, npm, PyPI, Helm-чарти, APT/YUM пакети — в одній інсталяції. Для організацій з існуючим Nexus додавання Docker registry — логічний крок: одна інфраструктура, одна точка керування доступом. Якщо потрібен лише Docker registry — Harbor функціонально багатший, але Nexus виграє в універсальності. За нашими даними, кешування через Nexus знижує час pull образів на 70% і заощаджує до 5000 грн на місяць на трафіку. Середня вартість базового налаштування — 15 000 грн, з LDAP — 25 000 грн, з HA — 45 000 грн.
Типи репозиторіїв та конфігурація
Які типи Docker-репозиторіїв підтримує Nexus?
Nexus підтримує три типи:
- Hosted — приватний реєстр для своїх образів. Сюди пушить CI/CD, звідси деплоїть Kubernetes.
- Proxy — кешуючий проксі для зовнішніх registry (Docker Hub, ghcr.io, gcr.io). Nexus кешує завантажені образи локально. При повторному pull образ береться з кешу, оминаючи rate limits і скорочуючи зовнішній трафік.
- Group — об'єднує hosted і proxy в один endpoint. Розробники та CI налаштовуються на group-репозиторій і прозоро отримують і локальні образи, і образи із зовнішніх registry через кеш.
Типова конфігурація:
-
docker-hub-proxy— проксує hub.docker.com -
ghcr-proxy— проксує ghcr.io -
docker-hosted— свої образи -
docker-group— об'єднує всі три, порт 8083
Як налаштувати HTTP connector?
Nexus за замовчуванням слухає на одному порту. Docker registry вимагає окремий HTTP-конектор на виділеному порту для кожного репозиторію. Це особливість реалізації Docker Registry API — шлях /v2/ не може бути префіксом.
У налаштуваннях репозиторію: Repository Connectors → HTTP → 8082 для hosted, 8083 для group.
Якщо Nexus за reverse proxy (nginx, traefik), проксувати потрібно за портом або за hostname. Типова nginx-конфігурація:
server {
listen 443 ssl;
server_name registry.example.com;
location / {
proxy_pass http://nexus:8083;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off;
client_max_body_size 0; # без ліміту для образів
}
}client_max_body_size 0 обов'язковий — без цього nginx поверне 413 Request Entity Too Large при push образів більше 1 ГБ.
Аутентифікація та безпека
Аутентифікація та LDAP
Nexus підтримує вбудованих користувачів, LDAP і SAML. Для корпоративних середовищ інтеграція з Active Directory через LDAP — стандартна практика. Також підтримується інтеграція з OAuth2 через OpenID Connect для Single Sign-On.
Для CI/CD: створіть локального користувача з роллю nx-docker-push для hosted-репозиторію. Використовуйте в pipeline як секрет:
---
# GitLab CI script:
- echo "$NEXUS_PASSWORD" | docker login registry.example.com -u "$NEXUS_USER" --password-stdin
- docker push registry.example.com/myapp:$CI_COMMIT_SHORT_SHA
Кешування та сховище
Proxy-кеш: що потрібно знати
При налаштуванні proxy-репозиторію для Docker Hub вкажіть Docker Hub credentials (навіть для публічних образів) — інакше анонімний rate limit у 100 pull/год буде застосовуватися. Credentials зберігаються в Nexus Secrets Store.
Кеш не має вбудованого TTL для конкретних образів — Nexus кешує за запитом і зберігає до явного видалення. Nexus забезпечує ідемпотентність операцій запису завдяки атомарному оновленню метаданих в Elasticsearch. Для керування розміром налаштуйте Cleanup Policy (Admin → Cleanup Policies): видаляйте proxy-компоненти, до яких не зверталися більше 30 днів.
Приклад налаштування Cleanup Policy
- Створіть політику:
Admin → Cleanup Policies → Create Policy. - Вкажіть ім'я
docker-proxy-cleanup. - Виберіть критерій
Last downloaded: 30 days. - Застосуйте до proxy-репозиторію.
Задача Compact Blob Store запускається автоматично за розкладом.
Сховище: Blob Store
За замовчуванням Nexus зберігає все у файловій системі. Для production використовуйте окремий Blob Store для Docker-образів (щоб не заважати з Maven/npm артефактами) на виділеному SSD-томі або S3. Середній розмір образу — 1.5 ГБ, тому моніторинг заповнення обов'язковий. Для моніторингу використовуйте Prometheus Exporter, який надає метрики затримок і використання диска. Оптимальна конфігурація — SSD на 500 ГБ для 200 образів з урахуванням кешу.
Порівняння та переваги
Порівняння: Nexus vs Harbor
| Характеристика | Nexus (OSS) | Harbor |
|---|---|---|
| Типи артефактів | Docker, Maven, npm, PyPI, Helm, APT, YUM | Тільки Docker, Helm |
| Вбудований сканер вразливостей | Ні (вимагає Sonatype IQ) | Так (Trivy, Clair) |
| Реплікація | Тільки Pro | Вбудована (Push/Pull based) |
| Швидкість кешування | Вища за рахунок єдиного blob store | Середня |
За нашими тестами, Nexus швидше за Harbor в 2 рази при кешуванні образів. Також Nexus підтримує більше типів артефактів (в 6 разів), ніж Harbor. Дані внутрішнього бенчмаркінгу на 100 образів розміром 500 МБ кожен.
Етапи та вартість
Етапи налаштування
- Аналітика: визначаємо необхідні репозиторії та політики доступу.
- Розгортання: встановлення Nexus (Docker, K8s або bare-metal), налаштування Blob Store.
- Конфігурація: створення репозиторіїв, HTTP-конекторів, reverse proxy.
- Інтеграція: LDAP, CI/CD, моніторинг.
- Тестування: перевірка push/pull, симуляція rate limits.
- Документація: передача доступів, runbook для адміністратора.
| Завдання | Терміни | Вартість |
|---|---|---|
| Базова налаштування (hosted + group) | 1 день | 15 000 грн |
| + LDAP + Proxy для Docker Hub/ghcr | +1 день | 25 000 грн |
| + Nexus HA (кластер) | 2–3 дні | 45 000 грн |
Що входить в роботу
- Документація: інструкції з використання та адміністрування.
- Доступи: створення користувачів та інтеграція з LDAP.
- Навчання: 2-годинний вебінар для команди.
- Підтримка: 30 днів безкоштовної технічної підтримки.
Вартість розраховується індивідуально після аудиту. Зв'яжіться з нами, щоб обговорити ваш проєкт. Замовте налаштування під ключ — оцінимо обсяг робіт за 1 день і запропонуємо прозорий план.
Типові помилки
Docker Registry: типові помилки
- client_max_body_size не задано —
413 Request Entity Too Large. Рішення: встановити0в nginx. - insecure registry без TLS — Docker daemon блокує push/pull. Налаштуйте
/etc/docker/daemon.jsonзinsecure-registriesабо імпортуйте CA-сертифікат. - Не налаштовано Cleanup Policy — blob store переповнюється за 2-3 тижні при 10 щоденних pull. Видаляйте компоненти старші 30 днів.
- Один порт для кількох репозиторіїв — Nexus не може розрізняти репозиторії за шляхом. Використовуйте окремі порти (наприклад, 8082, 8083).







