مقدمه
npm registry مخزنی است که تمام پکیجهای Node.js را نگهداری میکند. در محیطهای عادی، npm install مستقیماً به registry.npmjs.org متصل میشود و پکیجها را دانلود میکند. اما در محیطهای **Airgap** (بدون دسترسی به اینترنت) یا محیطهایی که تحریم هستند و اتصال به سرورهای خارجی با محدودیت مواجه است، نیاز به یک **آینه محلی (Mirror/Cache)** داریم تا پکیجها را یکبار دریافت کرده و در شبکه داخلی در دسترس قرار دهیم.
بهطور خلاصه: یک npm mirror محلی مانند یک واسطه عمل میکند. وقتی پکیجی برای اولین بار درخواست میشود، آن را از upsream دریافت میکند، کش (Cache) میکند، و دفعات بعدی مستقیماً از کش سرویس میدهد.
روش اول: راهاندازی با Verdaccio
Verdaccio یک registry proxy سبک و متنباز است که محبوبترین گزینه برای این کار محسوب میشود. نصب آن بسیار ساده است.
نصب با npm
اگر خود Node.js را روی سرور دارید، با یک دستور نصب میشود:
npm install -g verdaccioنصب با Docker
اگر ترجیح میدهید از Docker استفاده کنید (توصیه میشود):
docker run -d --name verdaccio -p 4873:4873 -v /path/to/storage:/verdaccio/storage -v /path/to/config:/verdaccio/conf verdaccio/verdaccioپیکربندی (config.yaml)
فایل کانفیگ پیشفرض در مسیر ~/.config/verdaccio/config.yaml قرار دارد. مهمترین بخش، تنظیم uplinks و فعال کردن cache است:
uplinks:
npmjs:
url: https://registry.npmjs.org/
cache: true
max_fails: 40
maxage: 30m
timeout: 60s
packages:
'@*/*':
access: $all
publish: $authenticated
proxy: npmjs
'**':
access: $all
publish: $authenticated
proxy: npmjs
storage: /verdaccio/storageتنظیم cache: true باعث میشود پکیجهای دانلود شده در حافظه داخلی ذخیره شوند و در درخواستهای بعدی نیازی به اینترنت نباشد. همچنین مسیر storage مشخص میکند که پکیجها روی دیسک ذخیره شوند.
راهاندازی و تست
بعد از اجرای Verdaccio، کافی است در سیستم کلاینت، رجیستری npm را به آدرس سرور خود指向 کنید:
npm set registry http://YOUR_SERVER_IP:4873حالا npm install بزنید. اولین بار پکیجها از رجیستری اصلی میآیند و کش میشوند. دفعات بعدی کاملاً آفلاین و از روی کش سرویس داده میشوند.
نکته: اگر محیط کاملاً ایزوله است و اصلاً به اینترنت دسترسی ندارد، باید یکبار در محیط متصل پکیجها را دانلود کنید و سپس کل پوشه storage را به محیط Airgap منتقل کنید.روش دوم: راهاندازی با Nexus Repository
Nexus Repository OSS محصول Sonatype است که عمدتاً برای اکوسیستم Java (Maven) شناخته میشود، اما از npm registry هم پشتیبانی میکند. اگر در سازمانتان از قبل Nexus دارید، میتوانید بهسادگی یک npm proxy repository به آن اضافه کنید.
docker run -d --name nexus -p 8081:8081 sonatype/nexus3بعد از اجرا، از طریق Web UI در پورت 8081 یک npm (proxy) Repository ایجاد کنید و آدرس https://registry.npmjs.org را به عنوان Remote Storage وارد کنید. Nexus خودش کش کردن پکیجها را انجام میدهد.
Verdaccio نسبت به Nexus سبکتر است و منابع کمتری مصرف میکند. Nexus انتخاب بهتری است اگر به اکوسیستم یکپارچه برای چند نوع آرتیفکت (Maven, PyPI, npm) نیاز دارید.
جدول سرویسهای عمومی npm Mirror در ایران
اگر دسترسی شما به صورت کامل Airgap نیست و صرفاً محدودیت تحریم دارید، میتوانید از میرورهای عمومی داخل ایران استفاده کنید. این سرویسها پکیجهای npm را از registry اصلی کش میکنند و با سرعت بالایی در دسترس قرار میدهند:
| سرویس | آدرس | توضیحات |
|---|---|---|
| Runflare | https://mirror-npm.runflare.com | سریع و پایدار، میزبانی شده روی CDN |
| Liara | https://package-mirror.liara.ir/repository/npm/ | ارائهشده توسط لیارا، مناسب برای پروژههای داخل ایران |
برای استفاده کافیست رجیستری npm را تنظیم کنید:
npm set registry https://mirror-npm.runflare.com
# یا
npm set registry https://package-mirror.liara.ir/repository/npm/جمعبندی
برای محیطهای Airgap، Verdaccio سادهترین و سبکترین گزینه است. با Docker در چند دقیقه بالا میآید و نیاز به پیکربندی پیچیدهای ندارد. اگر نیاز به یک راهحل جامعتر دارید، Nexus گزینه مناسبی است. برای دسترسیهای محدود (نه کاملاً قطع)، حتماً از میرورهای عمومی داخل ایران استفاده کنید تا سرعت نصب پکیجها به طرز چشمگیری افزایش یابد.