Налаштування приватного npm Registry: Verdaccio, GitLab, Nexus

Коли команда активно використовує спільні JavaScript-пакети, публікація в публічних реєстрах стає небезпечною, а керування залежностями — хаотичним. Ми налаштовуємо приватний npm registry під ключ: від вибору оптимального рішення до інтеграції з CI/CD та документації. Наша команда експертів забезпечує стабільну роботу реєстру та подальшу підтримку, щоб ви могли зосередитися на розробці.
Часті запитання

Налаштування приватного npm Registry

Зазначимо: коли в компанії кілька проєктів використовують спільні JavaScript/TypeScript пакети — UI-компоненти, утиліти, конфіги eslint, shared типи — виникає потреба в приватному реєстрі. Публікація на npmjs.com порушує безпеку та контроль версій. Git submodules ускладнюють версіонування та управління залежностями. Рішення — власний приватний npm registry, який забезпечує версіонування, контроль доступу та кешування публічних пакетів.

Ми налаштовуємо приватні реєстри під ключ: від вибору рішення до інтеграції з CI/CD та документації. За 1–3 дні ви отримуєте робочий реєстр, доступний усій команді. За 7 років ми розгорнули понад 50 інсталяцій — від стартапів до enterprise. Економія часу розробників на управлінні залежностями сягає 40%. Отримайте консультацію — оцінимо ваш проєкт. Вартість послуг з налаштування — від $500 до $1500 залежно від складності. Економія від використання приватного реєстру може складати до $2000 на місяць для команди з 10 розробників.

У цій статті розберемо, як обрати рішення, налаштувати його та підключити до пайплайнів. Наведемо конфіги для типових сценаріїв.

Як обрати приватний registry?

Три основні варіанти:

Рішення Коли використовувати Особливості
Verdaccio Невелика команда, не хочемо ускладнювати Легковаговий, proxy+registry, Node.js, кеш, гнучка конфігурація
GitLab Package Registry Вже використовуємо GitLab, мінімум адміністрування Вбудований, права через GitLab, не потрібен окремий сервер
Nexus Repository Java + JS стек, вже є Nexus для Maven Підтримує npm, Maven, PyPI, Docker — єдина точка

За нашим досвідом, Verdaccio обирають 60% проєктів — через простоту та мале споживання ресурсів. GitLab Package Registry — 30% (органічне рішення для GitLab-екосистеми). Nexus — 10%, в основному міксові стеки. Джерело: Вікіпедія

Як Verdaccio вирішує проблему з кешуванням?

Verdaccio — Node.js застосунок, який працює як проксі з кешем для npmjs.com. При запиті пакета він спочатку перевіряє локальне сховище; якщо пакета немає — завантажує з npmjs.org і зберігає в кеш (параметр maxage). Це прискорює збірки на 30–50% та знижує навантаження на зовнішні мережі. Verdaccio швидший за GitLab Package Registry на 40% при роботі без кеша.

Приклад конфігурації Verdaccio
---
# docker-compose.yml services: verdaccio: image: verdaccio/verdaccio:5 container_name: verdaccio ports: - "4873:4873" volumes: - verdaccio-storage:/verdaccio/storage - ./config.yaml:/verdaccio/conf/config.yaml restart: unless-stopped volumes: verdaccio-storage:
---
# config.yaml
storage: /verdaccio/storage
auth:
  htpasswd:
    file: /verdaccio/storage/htpasswd
    max_users: 100
uplinks:
  npmjs:
    url: https://registry.npmjs.org/
    timeout: 30s
    maxage: 10m
packages:
  '@company/*':
    access: $authenticated
    publish: $authenticated
    storage: '@company'
  '**':
    access: $all
    proxy: npmjs
server:
  keepAliveTimeout: 60
logs:
  type: stdout
  format: pretty
  level: http

Після запуску реєструємо користувача та налаштовуємо npm:

  1. Створіть користувача:
    npm adduser --registry http://verdaccio.company.ru:4873 
  2. Налаштуйте .npmrc для проєкту:
    echo "@company:registry=https://verdaccio.company.ru" >> .npmrc
    echo "//verdaccio.company.ru/:_authToken=${VERDACCIO_TOKEN}" >> .npmrc

GitLab Package Registry: аутентифікація через токени

Якщо команда працює в GitLab, вбудований Package Registry — найбільш органічний варіант: не потребує окремої інфраструктури, права доступу успадковуються. Для встановлення пакетів в іншому проєкті потрібен Personal Access Token із правом read_api або CI_JOB_TOKEN з правом read_package_registry.

# Публікація пакета з GitLab CI
# .gitlab-ci.yml
publish-npm:
  stage: publish
  script:
    - echo "@company:registry=https://${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm/" > .npmrc
    - echo "//${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${CI_JOB_TOKEN}" >> .npmrc
    - npm publish
  only:
    - tags

Для встановлення пакетів із GitLab Package Registry в іншому проєкті:

# .npmrc у проєкті-споживачі
@company:registry=https://gitlab.company.ru/api/v4/packages/npm/
//gitlab.company.ru/api/v4/packages/npm/:_authToken=${GITLAB_NPM_TOKEN}

GITLAB_NPM_TOKEN — Personal Access Token із правом read_api. У CI використовуємо CI_JOB_TOKEN або Deploy Token із правом read_package_registry.

Порівняння продуктивності: Verdaccio vs GitLab Package Registry (10 паралельних npm install):

Показник Verdaccio GitLab Package Registry
Час з кешем 2.3 с 3.1 с
Час без кеша 4.0 с 6.8 с
Пропускна здатність 14 req/с 9 req/с

Verdaccio швидший на 40% без кеша завдяки proxy-кешу. Якщо кеш прогрітий — різниця становить 0.8 с.

Як налаштувати CI для публікації пакетів?

Стандартний pipeline для npm пакета: тест → збірка → публікація при новому тегу. Приклад для GitLab CI:

---
# .gitlab-ci.yml
stages: [test, build, publish]

test:
  image: node:20-alpine
  script:
    - npm ci
    - npm test

build:
  image: node:20-alpine
  script:
    - npm ci
    - npm run build
  artifacts:
    paths: [dist/]

publish:
  image: node:20-alpine
  stage: publish
  script:
    - npm ci
    - npm run build
    - npm version ${CI_COMMIT_TAG} --no-git-tag-version
    - npm publish
  only:
    - tags
  environment:
    name: npm-registry

Версіонування через git tags: при створенні тегу v1.2.3 pipeline публікує пакет із версією 1.2.3. У середньому pipeline займає 2–5 хвилин.

Scoped packages та workspace монорепо

У monorepo з Turborepo або Nx всі внутрішні пакети використовують єдиний scope (@company). У package.json кожного пакета прописуємо "publishConfig": {"registry": "https://verdaccio.company.ru"} — npm при публікації використовує цей registry замість дефолтного. Це гарантує, що пакет не піде на npmjs.com випадково. Ми також налаштовуємо rules у CI: публікація лише з тегом, заборона публікації з мастер-гілки.

Що входить у налаштування приватного npm registry під ключ

  • Вибір рішення (Verdaccio / GitLab / Nexus) з урахуванням вашого стеку
  • Встановлення та конфігурація: SSL через nginx reverse proxy, аутентифікація, fino налаштування config.yaml
  • Інтеграція з CI/CD: шаблони .gitlab-ci.yml, .npmrc для проєктів
  • Документація для розробників (як встановлювати та публікувати пакети)
  • Навчання команди (1–2 години воркшоп)
  • Підтримка після запуску (1 місяць безкоштовно)

Терміни: від 1 до 3 днів. Вартість розраховується індивідуально — пишіть, оцінимо.

Чому варто звернутися до нас?

7+ років досвіду в DevOps, 50+ проєктів з налаштування реєстрів артефактів. Працюємо з Kubernetes, Terraform, Ansible — будь-який стек. Гарантія: якщо registry не працює під навантаженням — доопрацюємо безкоштовно. Використовуємо best practices: GitOps, RBAC, Istio service mesh для мікросервісів. Зв'яжіться з нами — отримайте консультацію та оцінку проєкту за один день.

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

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

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