Налаштування приватного Docker Registry (Nexus)

Ваша команда стикається з блокуваннями Docker Hub через rate limits, а артефакти Maven вже зберігаються в Nexus? Ми налаштовуємо приватний Docker Registry на базі Nexus, об'єднуючи управління образами та залежностями в єдиній інфраструктурі. Реалізуємо проєкт під ключ — від конфігурації репозиторіїв до інтеграції з CI/CD та подальшою підтримкою.
Часті запитання

Налаштування приватного 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
  1. Створіть політику: Admin → Cleanup Policies → Create Policy.
  2. Вкажіть ім'я docker-proxy-cleanup.
  3. Виберіть критерій Last downloaded: 30 days.
  4. Застосуйте до 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 МБ кожен.

Етапи та вартість

Етапи налаштування

  1. Аналітика: визначаємо необхідні репозиторії та політики доступу.
  2. Розгортання: встановлення Nexus (Docker, K8s або bare-metal), налаштування Blob Store.
  3. Конфігурація: створення репозиторіїв, HTTP-конекторів, reverse proxy.
  4. Інтеграція: LDAP, CI/CD, моніторинг.
  5. Тестування: перевірка push/pull, симуляція rate limits.
  6. Документація: передача доступів, 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).

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

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1393
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    815
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139