توسعهدهندگان پلتفرم داتنت در ایران، به ویژه آنهایی که در حوزههای طراحی و توسعه سامانههای تحت وب فعالیت میکنند، همواره با چالشهای دسترسی به منابع جهانی مانند NuGet.org مواجه هستند. در شرایطی که اینترنت بینالملل با اختلال یا محدودیت همراه است، پروژه شما نباید به دلیل عدم امکان Restore کردن پکیجها متوقف شود. استفاده از میرورهای داخلی (Internal Mirrors) بهترین راهکار فنی برای دور زدن این محدودیتها و حفظ سرعت توسعه است.
مدیریت وابستگیها یا Dependencies در داتنت، ستون فقرات هر پروژهای است. زمانی که شما از پکیجهای کتابخانهای استفاده میکنید، سیستم ابزاری NuGet این وظیفه را بر عهده دارد که فایلهای باینری مورد نیاز را از مخازن آنلاین دریافت کند. در شرایط قطع دسترسی، جایگزینی این مخازن با آینههای داخلی که توسط کامیونیتی توسعهدهندگان ایرانی فراهم شده، نه تنها یک انتخاب هوشمندانه، بلکه یک ضرورت برای تداوم پروژههای تجاری است.
برای شرکتهایی که در زمینه خدمات برنامهنویسی و توسعه نرمافزار فعالیت میکنند، پایداری خطوط تولید (Build Pipelines) اهمیت حیاتی دارد. وقتی یک سرور CI/CD در محیطی ایزوله یا در شبکه داخلی (LAN) قرار دارد، تلاش برای اتصال به NuGet.org میتواند منجر به تایماوتهای طولانی، شکست در بیلد پروژه و اتلاف وقت ارزشمند تیم فنی شود. این مشکل صرفاً محدود به کدهای جدید نیست؛ حتی برای پروژههای قدیمی، بازسازی (Restore) محیط توسعه نیازمند اتصال به یک مخزن معتبر است.
مفهوم میرور یا آینه در دنیای مدیریت بستهها، به معنای کپی کردن محتویات یک مخزن اصلی در یک سرور داخلی است. این سرورها با همگامسازی مداوم با مخزن اصلی، تمام بستههای مورد نیاز شما را در اختیار قرار میدهند. استفاده از این ابزارها در کنار تکنیکهایی که در طراحی و توسعه افزونههای وردپرس یا سایر سیستمهای ماژولار استفاده میشود، به توسعهدهنده اجازه میدهد که بدون درگیری با پیچیدگیهای شبکه، بر روی منطق برنامه تمرکز کند.
استفاده از آینههای داخلی NuGet، ریسک وابستگی به پایداری اینترنت بینالملل را به حداقل رسانده و بهرهوری تیمهای فنی را در شرایط بحرانی حفظ میکند.
برای شروع استفاده از این میرورها، اولین قدم ایجاد یک فایل کانفیگ اختصاصی در پروژه است. فایل nuget.config به شما این امکان را میدهد که اولویت منابع خود را تعیین کنید. ساختار این فایل باید به گونهای باشد که سیستم ابتدا کش محلی را چک کرده و سپس به سراغ میرورهای داخلی برود.
در پروژههای حرفهای، ما توصیه میکنیم فایلی با محتوای زیر در ریشه پروژه قرار دهید تا تمام اعضای تیم از یک منبع استاندارد استفاده کنند:
| ChabokMirror | https://mirror2.chabokan.net/nuget/v3/index.json |
iran.chabokan.net |
| DevNeeds | https://nuget.devneeds.ir/repository/nuget/index.json |
devneeds.ir |
| ParspackMirror | https://mirror.abrha.net/repository/nuget/index.json |
docs.parspack.com |
| RunFlare | https://mirror-nuget.runflare.com/v3/index.json |
runflare.com/mirrors |
| Liara | https://package-mirror.liara.ir/repository/nuget/index.json |
docs.liara.ir/mirrors/nuget |
| Hamravesh | https://repo.hmirror.ir/nuget |
hamravesh.com/blog |
| IranServer | https://nuget.iranserver.com/repository/nuget/index.json |
mirror.iranserver.com |
| NugetIran | https://repo.nugetiran.ir/repository/nuget/index.json |
nugetiran.ir |
فایل nuget.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="LocalPackages" value="%USERPROFILE%\.nuget\packages" />
<add key="ChabokMirror" value="https://mirror2.chabokan.net/nuget/v3/index.json" />
<add key="DevNeeds" value="https://nuget.devneeds.ir/repository/nuget/index.json" />
<add key="ParspackMirror" value="https://mirror.abrha.net/repository/nuget/index.json" />
<add key="RunFlare" value="https://mirror-nuget.runflare.com/v3/index.json" />
<add key="Liara" value="https://package-mirror.liara.ir/repository/nuget/index.json" />
<add key="Hamravesh" value="https://repo.hmirror.ir/nuget" />
<add key="IranServer" value="https://nuget.iranserver.com/repository/nuget/index.json" />
<add key="NugetIran" value="https://repo.nugetiran.ir/repository/nuget/index.json" />
</packageSources>
</configuration>
تکیه بر رابط کاربری Visual Studio همیشه پاسخگو نیست، به ویژه زمانی که با خطاهای پیچیده شبکه روبرو هستید. استفاده از خط فرمان به شما اجازه میدهد تا با پرچمهای خاص، محدودیتهای شبکه را مدیریت کنید. به عنوان مثال، اگر در تیم خود در حال انجام طراحی بازی کامپیوتری هستید و نیاز دارید پکیجهای حجیم موتور بازیسازی را Restore کنید، دستور زیر بسیار کاربردی است:
dotnet restore --ignore-failed-sources -v diag
این دستور به سیستم میگوید که اگر یکی از منابع (مثلاً یک میرور خاص) در دسترس نبود، بیلد متوقف نشود و سیستم به سراغ سایر منابع برود. این قابلیت در محیطهای CI/CD که پایداری شبکه تضمین شده نیست، نجاتبخش است.
تکرار تنظیمات در هر پروژه ممکن است باعث ایجاد خطای انسانی شود. برای مدیریت یکپارچه، میتوانید از فایل Directory.Build.props استفاده کنید. این فایل در ریشه اصلی پروژه قرار میگیرد و تنظیمات آن به تمام زیرپروژهها اعمال میشود. این روش مشابه مدیریت نرمافزار مدیریت باشگاه ورزشی است؛ جایی که تنظیمات سیستمی یکبار تعریف شده و در سراسر سیستم اعمال میشوند.
علاوه بر تنظیمات اصلی، غیرفعال کردن NuGet Audit میتواند به افزایش سرعت عملیات Restore در شبکه داخلی کمک شایانی کند. در برخی سناریوها، بررسی امنیت پکیجها نیاز به اتصال به سرورهای مایکروسافت دارد که در نبود اینترنت بینالملل، فرآیند را کند میکند. با تنظیم متغیر محیطی NuGetAudit به false، میتوانید این گلوگاه را رفع کنید.
بهینهسازی تنظیمات در سطوح کلان پروژه، نه تنها سرعت توسعه را افزایش میدهد، بلکه باعث یکپارچگی محیط کاری اعضای تیم در پروژههای بزرگ میشود.
بسیاری از توسعهدهندگان فراموش میکنند که ابزارهای خط فرمان (Dotnet Tools) مانند dotnet-ef یا swashbuckle نیز نیاز به آپدیت دارند. در هنگام قطعی اینترنت، این ابزارها نباید فراموش شوند. با استفاده از دستور –add-source در هنگام نصب ابزارها، میتوانید به راحتی از آدرس میرورهای داخلی استفاده کنید و نیازی به دسترسی به سرورهای اصلی نداشته باشید.
همچنین، اگر به دنبال یادگیری دقیقتر و بصری این فرآیند هستید، ویدئوهای آموزشی مرتبط که توسط متخصصین داخلی تهیه شدهاند، میتوانند درک بهتری از نحوه پیکربندی این تنظیمات در سیستمعاملهای مختلف (ویندوز و لینوکس) به شما ارائه دهند. منابعی مانند محتوای ویدئویی در آپارات در خصوص میرورهای نیوگت، مکمل خوبی برای مستندات متنی هستند.
برای مدیریت موفقیتآمیز وابستگیهای داتنت در شرایط محدودیت شبکه، نکات زیر را همواره به خاطر بسپارید:
nuget.config را در ریشه پروژه قرار دهید و منابع را با دقت مدیریت کنید. برای جلوگیری از تلاش بیهوده سیستم برای اتصال به منابع پیشفرض مسدود شده استفاده کنید.–ignore-failed-sources اجرا کنید تا پایداری بیلد تضمین شود.Directory.Build.props متمرکز کنید تا نیازی به تنظیمات تکراری در هر پروژه نباشد.دنیای توسعه نرمافزار در ایران، به دلیل شرایط خاص زیرساختی، نیازمند انعطافپذیری و دانش فنی بالاتری نسبت به سایر نقاط جهان است. بهرهگیری از میرورهای NuGet نه تنها یک ترفند فنی، بلکه بخشی از استراتژی بقای پروژههای نرمافزاری است. با استفاده از لیستی که در مخازن منبع باز (مانند کدهای ارائهشده در پروژههای کامیونیتی) وجود دارد، میتوانید محیط توسعه خود را در برابر نوسانات اینترنت واکسینه کنید.
اگر در حال مدیریت یک پروژه بزرگ هستید که نیاز به پایداری بالا دارد، پیشنهاد میشود فرآیند CI/CD خود را بر پایه این تنظیمات بازنگری کنید. همچنین، اگر در پروژههای خود نیاز به ساخت اپلیکیشن موبایل دارید که از بکاندهای داتنت استفاده میکند، پیادهسازی این تنظیمات برای تیم توسعهدهنده بکاِند، ضامنِ سرعت عمل و دقت در تحویل خروجیهای پروژه خواهد بود.
منبع: aliram-ir/nuget-iran-mirrors: آینههای داخلی نیوگت برای توسعهدهندگان داتنت در ایران
با استفاده از میرورهای داخلی NuGet در ایران، پروژههای داتنت خود را در زمان اختلال اینترنت بینالملل بدون توقف توسعه دهید. راهنمای کامل تنظیمات nuget.config.</p>
مشاوره و پشتیبانی
مشاوره و پشتیبانی