הקמת רישום npm פרטי: Verdaccio, GitLab, Nexus

כאשר צוות משתמש באופן פעיל בחבילות JavaScript משותפות, פרסום לרישומים ציבוריים הופך לבלתי בטוח, וניהול התלויות הופך לכאוטי. אנו מקימים רישום npm פרטי במתכונת turnkey: החל מבחירת הפתרון האופטימלי ועד לאינטגרציית CI/CD ותיעוד. צוות המומחים שלנו מבטיח פעילות יציבה של הרישום ותמיכה מתמשכת, כך שתוכלו להתמקד בפיתוח.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

הקמת רישום npm פרטי

כאשר מספר פרויקטים בחברה משתמשים בחבילות JavaScript/TypeScript משותפות — רכיבי UI, כלי עזר, תצורות eslint, טיפוסים משותפים — עולה הצורך ברישום פרטי. פרסום ל-npmjs.com פוגע באבטחה ובבקרת גרסאות. תת-מודולים של Git מסבכים את ניהול הגרסאות והתלויות. הפתרון הוא רישום npm פרטי משלך, המספק ניהול גרסאות, בקרת גישה ושמירת מטמון של חבילות ציבוריות. לפי npm, הרישום הציבורי משרת למעלה מ-1.3 מיליארד בקשות בשבוע.

אנו מקימים רישומים פרטיים באופן מלא: מבחירת הפתרון ועד אינטגרציית CI/CD ותיעוד. תוך 1–3 ימים תקבלו רישום פעיל הנגיש לכל הצוות. עם ניסיון של 7+ שנים ולמעלה מ-50 התקנות מוצלחות, אנו מבטיחים התקנה חלקה. חיסכון בזמן מפתחים בניהול תלויות מגיע ל-40%. עלות התקנה טיפוסית היא $500-$1500, ויכולה לחסוך $2000 בחודש בזמן מפתחים.

במאמר זה נסקור כיצד לבחור פתרון, להגדיר אותו ולחבר אותו לצינורות עבודה. נספק תצורות לתרחישים טיפוסיים.

בחירת רישום פרטי

שלוש אפשרויות עיקריות:

פתרון מתי להשתמש תכונות
Verdaccio צוות קטן, רוצים פשטות קל משקל, פרוקסי+רישום, 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% ומפחית עומס רשת חיצוני. בהשוואה ל-GitLab Package Registry, Verdaccio מהיר ב-40% להתקנות ללא מטמון בשל פרוקסי המטמון שלו. עם מטמון חם, ההפרש הוא 0.8 שניות.

---
# 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 עם היקף # 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 adduser --registry http://verdaccio.company.ru:4873 # Настройка .npmrc для проекта (в корне репозитория) @company:registry=https://verdaccio.company.ru //verdaccio.company.ru/:_authToken=${VERDACCIO_TOKEN} .

# Публикация пакета из 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}

read_api הוא Personal Access Token עם היקף CI_JOB_TOKEN. ב-CI, השתמשו ב-read_package_registry או Deploy Token עם היקף # Публикация пакета из 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 .

השוואת ביצועים: Verdaccio מול GitLab Package Registry (10 # .npmrc в проекте-потребителе @company:registry=https://gitlab.company.ru/api/v4/packages/npm/ //gitlab.company.ru/api/v4/packages/npm/:_authToken=${GITLAB_NPM_TOKEN} במקביל):

מדד Verdaccio GitLab Package Registry
זמן עם מטמון 2.3 שניות 3.1 שניות
זמן ללא מטמון 4.0 שניות 6.8 שניות
תפוקה 14 בקשות/שנייה 9 בקשות/שנייה

Verdaccio מהיר ב-40% ללא מטמון הודות לפרוקסי המטמון. עם מטמון חם, ההפרש הוא 0.8 שניות.

הגדרת CI לפרסום חבילות

צינור עבודה סטנדרטי לחבילת 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: כאשר נוצר תג GITLAB_NPM_TOKEN, הצינור מפרסם את החבילה עם גרסה read_api. הצינור בדרך כלל אורך 2–5 דקות.

חבילות עם היקף וסביבת Monorepo

ב-monorepo עם Turborepo או Nx, כל החבילות הפנימיות משתמשות בהיקף יחיד (CI_JOB_TOKEN). ב-read_package_registry של כל חבילה, הגדירו npm install — npm ישתמש ברישום זה לפרסום במקום ברירת המחדל. זה מבטיח שהחבילה לעולם לא תגיע בטעות ל-npmjs.com. אנו גם מגדירים כללי CI: פרסום רק בתג, איסור פרסום מענף master.

מה כלול בהקמת רישום npm פרטי מלא

  • בחירת פתרון (Verdaccio / GitLab / Nexus) לפי המחסנית שלכם
  • התקנה ותצורה: SSL דרך nginx reverse proxy, אימות, כוונון עדין של # .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
  • אינטגרציית CI/CD: תבניות v1.2.3, 1.2.3 לפרויקטים
  • תיעוד למפתחים (כיצד להתקין ולפרסם חבילות)
  • הדרכת צוות (סדנה של 1–2 שעות)
  • תמיכה לאחר ההשקה (חודש חינם)

לוח זמנים: 1 עד 3 ימים. העלות מחושבת באופן אישי — צרו קשר להערכה.

למה לבחור בנו?

7+ שנות ניסיון DevOps, 50+ התקנות רישום ארטיפקטים. אנו עובדים עם Kubernetes, Terraform, Ansible — כל מחסנית. אחריות: אם הרישום לא מתפקד תחת עומס, נתקן בחינם. אנו משתמשים בשיטות מומלצות: GitOps, RBAC, Istio service mesh למיקרוסרוויסים. צרו קשר — קבלו ייעוץ והערכת פרויקט תוך יום אחד.