نکات کلیدی
- در Composer نیز می توانید از میرور Packagist استفاده کنید.
- برای استفاده از میرور، باید index-url را تنظیم کنید.
- پس از پیکربندی میرور، لیارا به صورت خودکار بسته های جاوااسکریپت را از آن میرور دریافت کرده و در پروژه شما استفاده می کند.
خطای نصب پکیج در سرورهای ایرانی
خطای نصب پکیج در سرورهای ایرانی، به ویژه برای توسعهدهندگان، یک چالش رایج است. این خطاها میتوانند پروژههای در حال اجرا را متوقف کنند و نیاز به راهحلهای فوری دارند. “تحریم npm” نامی است که توسعهدهندگان ایرانی به این خطاها میدهند، اما واقعیت پیچیدهتر از این نام است.
پیغامهای خطا مانند E403 در npm install یا Read timed out در pip، نشانههایی از مشکلات مختلف هستند. این مشکلات میتوانند ناشی از تحریمهای اعمالشده توسط سرویسدهندهها، اختلال در مسیر اینترنت یا حتی مشکلات گواهی SSL باشند.
راهحل پایدار برای همه این ابزارها، استفاده از میرورهای داخلی و کش محلی پکیجهاست. با این روش، وابستگی به اینترنت بینالمللی کاهش یافته و پروژهها با سرعت و اطمینان بیشتری اجرا میشوند.
تشخیص علت خطا
سه علت اصلی برای خطاهای نصب پکیج وجود دارد:
- مسدودسازی درخواست توسط سرور مقصد (کد 403): این حالت معمولاً به دلیل تحریمها یا محدودیتهای اعمالشده توسط سرویسدهنده رخ میدهد.
- کندی یا قطع مسیر اینترنت (Timeout): زمانی که مسیر اینترنت کند یا قطع باشد، درخواستها به موقع پاسخ داده نمیشوند.
- مشکلات گواهی SSL: گواهیهای SSL معتبر برای برقراری ارتباط امن ضروری هستند.
برای تشخیص دقیق علت خطا، میتوان از دستورات تست استفاده کرد. این دستورات کد پاسخ HTTP و زمان کل را نشان میدهند و به شما کمک میکنند علت اصلی را شناسایی کنید.
تنظیم میرور جایگزین برای npm و Yarn
ابزار npm پکیجها را از نشانی تنظیمشده در registry دریافت میکند. این نشانی به صورت پیشفرض به اشاره دارد. با تغییر این نشانی، npm install و npm ci میتوانند پکیجها را از میرور داخلی دانلود کنند، خواه علت خطا تحریم باشد یا اختلال در مسیر اینترنت.
میرورهای مستند و تست آنها
جدول زیر برخی از میرورهای مستند را نشان میدهد که سرویسدهندههای آنها نشانی و دستور تنظیم را در مستندات رسمی خود منتشر کردهاند. قبل از استفاده از این نشانیها، حتماً دستور تست مربوطه را روی سرور خود اجرا کنید تا از کارکرد صحیح آن اطمینان حاصل کنید.
دستورهای npm برای تغییر registry
برای ذخیره نشانی جدید در فایل ~/.npmrc کاربر، از دستور زیر استفاده کنید. اگر فقط یک پروژه نیاز به تغییر دارد، میتوانید خط registry=… را در فایل .npmrc ریشه همان پروژه اضافه کنید تا همراه با مخزن کد منتقل شود.
فایل package-lock و گزینه replace-registry-host
فایل package-lock.json نشانی کامل هر tarball را در فیلد resolved نگه میدارد. مقدار پیشفرض replace-registry-host برابر npmjs است، به این معنی که فقط نشانیهایی که از registry رسمی آمدهاند با registry تنظیمشده جایگزین میشوند. اگر lockfile با میرور دیگری ساخته شده باشد، npm سراغ همان میرور قدیمی میرود. برای جلوگیری از این مسئله، میتوانید خط replace-registry-host=always را در .npmrc همان پروژه اضافه کنید تا روی بقیه پروژهها اثر نکند.
تنظیم registry در Yarn
در Yarn نسخه 2 به بعد، تنظیم معادل npmRegistryServer است. پیشفرض این تنظیم به صورت است. این دستور در فایل .yarnrc.yml پروژه نوشته میشود و گزینه -H آن را برای کل کاربر ثبت میکند. در نسخه کلاسیک 1.22، کلید registry مورد استفاده قرار میگیرد.
برای پکیجهای scope خصوصی، میتوانید registry شرکت را جدا نگه دارید و فقط پکیجهای عمومی را به میرور بفرستید. در npm، این کار با خطی مثل @mycorp:registry=… در .npmrc انجام میشود و در Yarn با کلید npmScopes.
تنظیم index-url در pip و میرور Packagist در Composer
برای تنظیم index-url در pip، میتوانید از دستور زیر استفاده کنید:
pip config set global.index-url
در Composer نیز میتوانید از میرور Packagist استفاده کنید. برای این کار، فایل composer.json پروژه را ویرایش کرده و گزینه “repositories” را به آن اضافه کنید.
با استفاده از این راهنما، میتوانید خطاهای نصب پکیج در سرورهای ایرانی را به راحتی تشخیص داده و با تنظیم میرورهای داخلی و کش محلی، پروژههای خود را بدون وابستگی به اینترنت بینالمللی اجرا کنید.

مدیریت نصب پکیجها با میرور داخلی
برای نصب پکیجهای پایتون و PHP از طریق pip و Composer، میتوان از میرور داخلی استفاده کرد. این کار باعث میشود نصب پکیجها سریعتر و مطمئنتر انجام شود، بهخصوص در شرایطی که دسترسی به اینترنت محدود یا با مشکلاتی مواجه است.
تغییر index-url در pip
برای تغییر محل نصب پکیجها در pip، میتوان از دو روش موقت و دائمی استفاده کرد:
- روش موقت: با استفاده از گزینه -i میتوان بهصورت موقت نشانی index-url را تغییر داد. این روش برای نصبهای تکبار مناسب است.
- روش دائمی: با استفاده از دستور pip config میتوان فایل پیکربندی کاربر را ویرایش کرد. این فایل در لینوکس در مسیر $HOME/.config/pip/pip.conf قرار دارد. همچنین هر محیط مجازی (virtualenv) فایل پیکربندی اختصاصی خود را در مسیر $VIRTUAL_ENV/pip.conf دارد.
همچنین میتوان از متغیر محیطی PIP_INDEX_URL استفاده کرد که بدون نیاز به فایل روی دیسک، نشانی index-url را تغییر میدهد. این روش برای Dockerfile و CI مناسبتر است.
تفاوت index-url و extra-index-url
گزینه extra-index-url مخزن دوم را به مخزن اصلی اضافه میکند و pip از هر دو مخزن جستجو میکند. این کار ممکن است باعث ایجاد مشکل dependency confusion شود، یعنی انتخاب پکیج همنام از مخزن عمومی به جای پکیج خصوصی. در چنین پروژههایی، بهتر است از میرور استفاده شود.
گزینه trusted-host در pip
گزینه trusted-host میزبان را بدون نیاز به HTTPS معتبر، قابل اعتماد میکند. با این حال، اگر میرور با HTTPS و گواهی معتبر پاسخ میدهد، تنظیم این گزینه ضروری نیست و بهتر است از آن اجتناب شود. برای پروژههای حساس، بهتر است فایل requirements با هش قفل شود تا pip هش هر فایل را بررسی کند.
استفاده از میرور Packagist در Composer
در Composer نسخه 2.10، میتوان با استفاده از دستور زیر، مخزن پیشفرض را با میرور جایگزین کرد. این کار باعث میشود پکیجها از میرور داخلی دانلود شوند.
توجه داشته باشید که میرور Packagist تنها متادیتا را برمیگرداند و فایلهای zip همچنان از GitHub دانلود میشوند. برای اطمینان از دانلود فایلها از میرور، میتوان از کش Composer استفاده کرد.
عیبیابی خطاهای SSL و Timeout
اختلاف زمانی چند دقیقهای در ساعت سرور میتواند باعث رد شدن گواهی معتبر شود. بنابراین، همگامسازی NTP را فعال کنید و در صورت نیاز، یک سرور NTP داخلی را در /etc/systemd/timesyncd.conf پیکربندی کنید.
اگر میرور گواهی صادرشده از یک CA داخلی دارد، فایل CA را به ابزارهای مورد نظر معرفی کنید. در Composer، گزینه cafile این کار را انجام میدهد. خاموش کردن strict-ssl تنها خطا را پنهان میکند و امنیت را کاهش میدهد.
برای خطای Timeout، پیشفرضها را در نظر بگیرید. در pip، –timeout پیشفرض ۱۵ ثانیه و –retries حداکثر پنج تلاش است. افزایش این اعداد میتواند در مسیرهای کند کمک کند، اما در مسیرهای قطعشده تنها انتظار را بیشتر میکند.
ساخت کش محلی و نسخه آفلاین پکیجها
کش محلی باعث میشود هر پکیج تنها یک بار از بیرون دانلود شود و سپس از دیسک سرور داخلی شبکه تحویل داده شود. این روش برای تیمهای توسعه با چند توسعهدهنده و یک CI مناسب است، زیرا کنترل آن در دست خود تیم است.
با استفاده از کش محلی، تنها اولین درخواست برای دانلود پکیج از بیرون ارسال میشود و نصبهای بعدی از دیسک داخلی انجام میشوند، خواه مشکل از تحریم یا قطعی مسیر باشد.
راهاندازی Verdaccio به عنوان registry داخلی npm
ابزار Verdaccio یک registry سبک npm است که درخواستها را به مخزن بالادستی (uplink) ارسال میکند و فایلها را در storage خود نگه میدارد. این ابزار به Node.js 22 یا بالاتر نیاز دارد و بهطور پیشفرض تنها روی localhost:4873 گوش میدهد.
برای پیکربندی Verdaccio، دو تغییر در فایل config.yaml لازم است: تغییر listen برای دسترسی سایر سیستمها و تغییر نشانی uplink پیشفرض. همچنین پورت 4873 را تنها برای IPهای تیم و CI در فایروال باز کنید.
رفتار Verdaccio در شرایط قطع کامل uplink به پارامترهای maxage، fail_timeout و max_fails بستگی دارد. قبل از اتکا به این روش، بهتر است یک بار uplink را عمداً قطع کرده و نصب را تست کنید.
مدیریت وابستگیها و کشها در محیطهای داخلی
ساخت wheelhouse آفلاین برای pip
دستور pip download، وابستگیها را به صورت آفلاین در یک پوشه ذخیره میکند. این پوشه میتواند به عنوان منبع وابستگیها برای نصبهای بعدی استفاده شود. برای بهروزرسانی، باید این دستور را پس از هر تغییر در فایل requirements اجرا کنید. توجه داشته باشید که نسخه پایتون و معماری سرور مقصد باید با سرور دانلودکننده یکسان باشد تا wheelهای باینری به درستی نصب شوند.
مدیریت کش Composer
ابزار Composer، فایلهای dist را در یک پوشه کش نگه میدارد که میتوان آن را با متغیر COMPOSER_CACHE_DIR یا گزینه cache-dir تغییر داد. برای استفاده از کش در محیطهای CI، میتوان این پوشه را روی دیسک مشترک قرار داد تا نصبهای بعدی از کش انجام شوند. اما برای سرور تولید، توصیه میشود پوشه vendor را روی سرور build ایجاد کرده و خروجی را به سرور منتقل کنید.
راهاندازی کش مشترک تیم
برای ایجاد یک کش مشترک، نیاز به یک سرور مجازی با دسترسی برای توسعهدهندگان و CI دارید. سرور مجازی ایران وب داده، میزبانی مطمئن و قابل دسترسی در دیتاسنتر تهران و روی شبکه رسپینا است. این سرور دارای پنل مدیریت با قابلیت اسنپ شات و بازگردانی است، بنابراین قبل از هر تغییری، میتوانید از دادهها پشتیبان بگیرید.
پرسشهای رایج درباره خطاهای نصب پکیج
آیا npm کاربران ایرانی را مسدود کرده است؟
شواهد رسمی مبنی بر مسدودسازی ایران توسط npm یافت نشده است. GitHub در ژانویه ۲۰۲۱ مجوز دولت آمریکا را برای ارائه خدمات در ایران دریافت کرد، اما این اعلامیه به npm اشارهای ندارد. بیشتر گزارشها مربوط به Timeout یا قطع اتصال است. اگر با خطای 403 بدون توکن مواجه شدید، میتوانید registry را تغییر دهید.
تفاوت index-url و extra-index-url در pip
index-url، مخزن اصلی را جایگزین میکند، در حالی که extra-index-url، مخزن دیگری را به آن اضافه میکند. برای استفاده از میرور، باید index-url را تنظیم کنید. extra-index-url در پروژههای دارای پکیج خصوصی ممکن است باعث ایجاد confusion dependency شود.
بازگشت به تنظیمات پیشفرض میرور
برای بازگشت به تنظیمات پیشفرض، میتوانید از دستورات زیر استفاده کنید:
- npm: npm config delete registry
- pip: pip config –user unset global.index-url
- Composer: composer config -g –unset repos.packagist
اگر تنظیمات را در فایل پروژه نوشتهاید، میتوانید خط مربوطه را حذف کنید.
امنیت استفاده از میرورهای ایرانی
امنیت استفاده از میرورهای ایرانی به نوع بررسی شما بستگی دارد. در npm، وجود فیلد integrity در package-lock.json، باعث رد شدن فایلهای ناسازگار با EINTEGRITY میشود. pip فقط با گزینه –require-hashes، هش را بررسی میکند و Composer معمولاً برای zipballهای GitHub، هشی در lockfile ندارد. بنابراین، انتخاب میرورهایی با HTTPS معتبر و سرویسدهنده شناختهشده توصیه میشود.
چرا Composer همچنان از GitHub دانلود میکند؟
این مسئله به دلیل نشانی فایل zip در متادیتای پکیجها است که به GitHub اشاره دارد. میرور، متادیتا را تغییر نمیدهد، بنابراین Composer همچنان از GitHub دانلود میکند. خروجی composer install -vvv را بررسی کنید تا ببینید که کش Composer روی سرور build، نصبهای بعدی را از این وابستگی جدا میکند.
نصب نشدن برخی پکیجهای npm با میرور داخلی
بعضی پکیجها در مرحله postinstall، فایل باینری را از GitHub یا سایت سازنده دریافت میکنند که این دانلود از registry عبور نمیکند. برای حل این مسئله، نشانی دانلود را از خروجی خطا پیدا کرده و آن را در README پکیج جستجو کنید. معمولاً یک متغیر محیطی برای تغییر نشانی معرفی شده است.
تنظیمات میرور برای Docker Hub
برای تنظیم میرور Docker Hub، باید کلید registry-mirrors را در فایل daemon.json داکر اضافه کنید. این تنظیمات به npm و pip ربطی ندارد و باید به صورت جداگانه انجام شود.
جمعبندی
مدیریت خطاهای نصب پکیج روی سرورهای داخلی، نیاز به تشخیص دقیق دارد. اولین گام، استفاده از دستور curl برای تشخیص مشکل است. پاسخ 403 یا Timeout نشان میدهد که باید نشانی مخزن را تغییر دهید. برای npm و Yarn، registry، برای pip، index-url و برای Composer، repos.packagist را تنظیم کنید. در صورت خطای گواهی، ساعت سرور و CA را بررسی کنید. پس از تنظیم میرور، lockfileهای ساختهشده با میرور جدید و میرورهای Composer را بررسی کنید. همچنین، ایجاد یک کش داخلی برای تیم و CI توصیه میشود. سرور مجازی ایران وب داده، گزینه مناسبی برای راهاندازی کش و build است.
مستندات پیکربندی pip
پیکربندی pip، ابزار مدیریت بستههای پایتون، میتواند به شکلهای مختلفی انجام شود. پیکربندی pip به شما امکان میدهد تا تنظیمات دلخواه خود را اعمال کرده و تجربهای سفارشیشده از مدیریت بستهها داشته باشید.
- پیکربندی پیکربندی pip از طریق فایل pip.ini یا setuptools.cfg انجام میشود. این فایلها معمولاً در مسیرهای زیر قرار دارند:
- ~/pip.ini
- ~/setuptools.cfg
- میتوانید گزینههای پیکربندی را به صورت دستی در فایلهای پیکربندی اضافه کنید. برای مثال، میتوانید مسیرهای نصب دلخواه را مشخص کرده یا تنظیمات پروکسی را پیکربندی کنید.
- علاوه بر این، پیکربندی pip میتواند از طریق متغیرهای محیطی نیز انجام شود. برای مثال، میتوانید متغیر PIP_INDEX_URL را برای تغییر آدرس سرور شاخص پیکربندی کنید.
مستندات میرور npm لیارا
لیارا، یک پلتفرم مدیریت بستههای جاوااسکریپت، دارای مستندات کاملی برای پیکربندی میرورهای npm است. این مستندات به شما کمک میکند تا میرورهای دلخواه خود را پیکربندی کرده و از بستههای جاوااسکریپت در پروژههای خود استفاده کنید.
- برای پیکربندی میرور npm در لیارا، ابتدا باید به داشبورد لیارا خود وارد شوید. سپس، به بخش “میرورها” رفته و روی گزینه “افزودن میرور” کلیک کنید.
- در اینجا، میتوانید جزئیات میرور npm خود را وارد کنید، از جمله نام، آدرس URL، و سایر تنظیمات مورد نیاز. همچنین میتوانید اولویت میرور را مشخص کرده و آن را به عنوان میرور پیشفرض انتخاب کنید.
- پس از پیکربندی میرور، لیارا به صورت خودکار بستههای جاوااسکریپت را از آن میرور دریافت کرده و در پروژه شما استفاده میکند.
مستندات میرور PyPI لیارا
لیارا همچنین دارای مستندات جامع برای پیکربندی میرورهای PyPI است. این مستندات به شما کمک میکند تا میرورهای پایتون مورد نظر خود را پیکربندی کرده و از بستههای پایتون در پروژههای خود بهره ببرید.
- برای پیکربندی میرور PyPI در لیارا، مراحل مشابهی را دنبال میکنید. ابتدا به داشبورد لیارا رفته و به بخش “میرورها” وارد شوید. سپس، گزینه “افزودن میرور” را انتخاب کرده و جزئیات میرور PyPI خود را وارد کنید.
- میتوانید نام، آدرس URL، و سایر تنظیمات مورد نیاز را مشخص کنید. همچنین میتوانید اولویت میرور را تعیین کرده و آن را به عنوان میرور پیشفرض برای پروژههای پایتون خود انتخاب نمایید.
- پس از پیکربندی، لیارا بستههای پایتون را از میرور PyPI دریافت کرده و در پروژه شما در دسترس قرار میدهد.
اعلامیه GitHub درباره مجوز ایران (۲۰۲۱)
GitHub، پلتفرم محبوب توسعه دهندگان، در سال ۲۰۲۱ اعلامیهای درباره مجوز ایران منتشر کرد. این اعلامیه به بررسی وضعیت دسترسی توسعه دهندگان ایرانی به پلتفرم GitHub میپردازد.
- GitHub در این اعلامیه، محدودیتهای تحریمی علیه ایران را مورد توجه قرار داده و توضیح میدهد که چگونه این تحریمها بر دسترسی کاربران ایرانی به پلتفرم تأثیر میگذارد.
- GitHub همچنین راهکارهایی را برای توسعه دهندگان ایرانی ارائه میدهد تا بتوانند با رعایت قوانین تحریمی، از خدمات GitHub استفاده کنند. این راهکارها شامل استفاده از روشهای جایگزین برای دسترسی به پلتفرم و استفاده از ابزارهای متنباز میشود.
- GitHub متعهد شده است تا با همکاری با توسعه دهندگان ایرانی، راهحلهای مناسبتری را برای دسترسی به پلتفرم ارائه دهد و از جامعه توسعه دهندگان ایرانی حمایت کند.

کمپین ابتکار نو
کمپین ایده های نو
کمپین آینده روشن
کمپین طراحی مدرن