Настройка приватного 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%. Получите консультацию — оценим ваш проект.

В этой статье разберём, как выбрать решение, настроить его и подключить к пайплайнам. Приведём конфиги для типовых сценариев.

Как выбрать приватный 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% и снижает нагрузку на внешние сети.

# 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:

# Создание пользователя
npm adduser --registry http://verdaccio.company.ru:4873

# Настройка .npmrc для проекта (в корне репозитория)
@company:registry=https://verdaccio.company.ru
//verdaccio.company.ru/:_authToken=${VERDACCIO_TOKEN}

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