Milad Mobaseri
تصویر مفهومی از توسعه‌دهنده‌ای که کارش را برای شبکه‌ی داخلی آماده می‌کند
توسعه وب

برنامه‌نویس در نت ملی: چطور کارمان متوقف نشود؟

قبل از قطعی اینترنت بین‌الملل: میرور داخلی pip، npm و داکر، نگه‌داشتن محلی وابستگی‌ها، مستندات آفلاین و سایتی که به فونت، CDN و reCAPTCHA خارجی وابسته نباشد.

وقتی اینترنت بین‌الملل قطع می‌شه، بیشتر آدم‌ها فقط یه چیز رو حس می‌کنن: سایت‌های خارجی باز نمی‌شن. ولی برای یه برنامه‌نویس ماجرا خیلی جدی‌تره: pip install جواب نمی‌ده، docker pull گیر می‌کنه، گیت‌هاب در دسترس نیست، و سایتی که روی سرور ایران هم هست ممکنه یهو خطا بده؛ چون یه جای کوچیکش به یه سرویس خارجی وابسته بوده.

این پست درباره‌ی اینه که کار و سرویس‌هات روی شبکه‌ی داخلی سرپا بمونه؛ و مهم‌ترین نکته‌ش اینه که تقریباً همه‌ی این کارها رو باید قبل از قطعی انجام بدی. وقتی نت قطع شد، دیگه نمی‌شه چیزی دانلود کرد.

توسعه‌دهنده‌ای که پیش از قطعی، ابزارها و بسته‌های لازم را در انباری محلی ذخیره می‌کند

۱. میرورهای داخلی رو از الان تنظیم کن

چند شرکت ایرانی از مخزن‌های اصلی کپی (میرور) نگه می‌دارن که روی شبکه‌ی داخلی هم در دسترس‌ان. این‌ها رو من از روی یه سرور داخل ایران تست کردم و موقع نوشتن این پست جواب می‌دادن؛ ولی میرورها گاهی از دسترس خارج می‌شن، پس قبل از تکیه کردن خودت دوباره تست کن.

پایتون (pip):

pip config set global.index-url https://mirror-pypi.runflare.com/simple

نود (npm):

npm config set registry https://mirror-npm.runflare.com

داکر: در فایل /etc/docker/daemon.json:

{
  "registry-mirrors": ["https://docker.arvancloud.ir"]
}

و بعد sudo systemctl restart docker.

آپدیت‌های لینوکس (Ubuntu/Debian): آدرس مخزن‌ها در /etc/apt/sources.list (یا فایل‌های sources.list.d) رو به یه میرور داخلی مثل mirror.arvancloud.ir تغییر بده.

فهرست به‌روزتر میرورهای داخلی رو پروژه‌های متن‌بازی مثل Mirava نگه می‌دارن.

نکته‌ی مهم: همین الان، وقتی نت وصله، یه بار پروژه‌ت رو با میرور نصب کن. اگه یه پکیج یا نسخه‌ی خاص توی میرور نبود، الان می‌فهمی، نه وسط بحران.

۲. وابستگی‌ها رو محلی نگه دار

میرور ممکنه از دسترس خارج بشه یا زیر بار کند بشه. برای پروژه‌هایی که نباید متوقف بشن، یه نسخه‌ی محلی از همه‌چیز داشته باش:

پایتون: همه‌ی پکیج‌ها رو به‌صورت فایل دانلود کن و بعداً بدون اینترنت نصب کن:

pip download -r requirements.txt -d ./wheels
# بعداً، بدون اینترنت:
pip install --no-index --find-links ./wheels -r requirements.txt

نود: package-lock.json رو حتماً کامیت کن. پوشه‌ی node_modules یه پروژه‌ی سالم رو هم جایی نگه دار، یا از کش npm (~/.npm) بکاپ بگیر.

داکر: ایمیج‌هایی که لازم داری رو ذخیره کن:

docker save python:3.12-slim postgres:16 nginx:stable -o images.tar
# بعداً:
docker load -i images.tar

مدل‌ها و داده‌ها: اگه با هوش مصنوعی کار می‌کنی، مدل‌های Hugging Face و دیتاست‌ها رو هم الان دانلود کن. چند گیگ دانلود الان، چند هفته کار رو بعداً نجات می‌ده.

۳. مستندات رو آفلاین داشته باش

بدون اینترنت، بزرگ‌ترین کندی کار نه نصب پکیج، بلکه جواب گرفتن برای یه سؤال ساده‌ست. چند راه:

  • DevDocs: مستندات ده‌ها زبان و فریم‌ورک رو می‌شه توی مرورگر برای استفاده‌ی آفلاین ذخیره کرد.
  • Zeal (ویندوز و لینوکس) یا Dash (مک): همین کار رو به‌صورت برنامه‌ی دسکتاپ انجام می‌دن.
  • مستندات خود پروژه‌ها: خیلی از کتابخونه‌ها مستنداتشون رو توی مخزن گیت دارن؛ یه git clone یا دانلود zip کافیه.
  • دستیار هوش مصنوعی محلی: اگه سخت‌افزارش رو داری، یه مدل کوچیک متن‌باز که روی سیستم خودت اجرا می‌شه، جای جست‌وجوی سریع رو تا حدی پر می‌کنه.

۴. سایتت به خارج وابسته نباشه

این یکی رو از تجربه‌ی خودم می‌گم. سایت من روی سرور داخل ایرانه، ولی یه روز که ارتباط سرور با اینترنت مشکل پیدا کرد، کل سایت خطای ۵۰۰ داد. علتش این بود که بخش فرانت داده‌ها رو از بک‌اند، از طریق آدرس عمومی سایت می‌گرفت؛ و سرور دیگه به آدرس عمومی خودش هم نمی‌رسید. فرانت و بک‌اند هر دو سالم بودن و روی یه ماشین کنار هم کار می‌کردن. راه‌حل این بود که ارتباطشون از مسیر داخلی برقرار بشه.

یعنی «سرور ایرانه» کافی نیست. این‌ها رو چک کن:

وابستگی چه اتفاقی می‌افته جایگزین
فونت از Google Fonts صفحه با تأخیر یا با فونت پیش‌فرض باز می‌شه فایل فونت روی سرور خودت
CSS یا JS از CDN خارجی دکمه‌ها و منوها کار نمی‌کنن فایل‌ها روی سرور خودت (bundle)
reCAPTCHA فرم‌ها کلاً ارسال نمی‌شن کپچای داخلی یا محدودیت نرخ ساده
Google Analytics معمولاً فقط آمار از دست می‌ره، ولی گاهی صفحه رو کند می‌کنه آمار داخلی سمت سرور
ورود با گوگل کاربر نمی‌تونه وارد بشه ورود با ایمیل یا شماره‌ی موبایل
API خارجی سمت سرور درخواست تا timeout معطل می‌مونه timeout کوتاه + پیام خطای روشن

یه تست سریع: صفحه رو توی مرورگر باز کن، ابزار توسعه‌دهنده (F12) رو بیار، تب Network رو ببین، و هر درخواستی که دامنه‌ش مال خودت نیست رو یادداشت کن. هر کدوم یه نقطه‌ی شکسته.

سایتی روی سرور داخلی که وابستگی‌های خارجی‌اش قطع شده‌اند، در کنار نسخه‌ای که همه‌چیزش محلی است

۵. سرویس‌های وابسته به خارج: هر کدوم یه نقشه‌ی جایگزین

بعضی وابستگی‌ها رو نمی‌شه حذف کرد، ولی می‌شه برای قطعشون آماده بود:

  • ربات تلگرام: API تلگرام روی نت ملی در دسترس نیست. اگه گزارش‌ها یا اعلان‌های مهم سایتت از راه ربات تلگرام میاد، یه کانال جایگزین داخلی (پیامک، ایمیل داخلی یا پیام‌رسان داخلی) براش بذار.
  • ایمیل: ارسال از Gmail یا سرویس‌های خارجی متوقف می‌شه. یه سرویس ارسال ایمیل داخلی یا پیامک برای پیام‌های حیاتی (مثل کد تأیید) آماده داشته باش.
  • درگاه‌ها و APIهای خارجی: برای هر درخواست خارجی timeout کوتاه بذار. بدون timeout، یه API قطع‌شده می‌تونه کل سرور رو معطل نگه داره.
  • مانیتورینگ: اگه سرویس مانیتورینگت خارجیه، در زمان قطعی هیچ هشداری نمی‌گیری. یه بررسی ساده‌ی داخلی (حتی یه اسکریپت cron) کافیه.

۶. کد و بکاپ‌ها جایی باشن که بهشون برسی

اگه همه‌ی کدهات فقط روی گیت‌هابه، در زمان قطعی بهشون دسترسی نداری.

  • یه remote دوم: یه نسخه از مخزن‌ها روی یه سرویس گیت داخلی یا یه Gitea روی سرور خودت نگه دار:

bash git remote add local git@your-server:you/project.git git push local --all && git push local --tags

  • بکاپ دیتابیس روی سرور داخلی و یه نسخه‌ی دیگه روی سیستم خودت؛ بکاپی که فقط روی یه فضای ابری خارجیه، در زمان قطعی وجود نداره.
  • کلیدها و دسترسی‌ها: مطمئن شو ورودت به سرور و پنل‌ها به یه سرویس خارجی (مثل ورود با گوگل یا کد تأیید از یه اپ خارجی که نیاز به اینترنت داره) وابسته نیست.

چک‌لیست: همین امروز

  1. [ ] pip، npm، داکر و apt رو روی میرور داخلی تنظیم و تست کردم.
  2. [ ] پکیج‌ها، ایمیج‌های داکر و مدل‌های لازم رو محلی ذخیره کردم.
  3. [ ] مستندات اصلی رو آفلاین دارم.
  4. [ ] سایتم هیچ فونت، اسکریپت یا CSS ضروری از خارج لود نمی‌کنه.
  5. [ ] فرم‌هام به reCAPTCHA وابسته نیستن.
  6. [ ] برای ربات تلگرام، ایمیل و APIهای خارجی، جایگزین یا timeout دارم.
  7. [ ] کدها و بکاپ‌ها یه نسخه‌ی داخلی دارن.

هیچ‌کدوم از این‌ها پیچیده نیست، ولی همه‌شون یه شرط دارن: باید وقتی نت وصله انجام بشن.

#داکر#میرور داخلی#نت ملی#پایتون

نوشته‌های مرتبط

توسعه وب

چرا سایت در گوگل نمایش داده نمی‌شود؟ بررسی فنی از دید توسعه‌دهنده

پیش از محتوا، مسیر را چک کنید: robots.txt، noindex جامانده، canonical اشتباه، رندر با جاوااسکریپت، خطای سرور و آدرس‌های قدیمی؛ با مثال‌های واقعی از Search Console همین سایت.

۹ دقیقه مطالعه۲۹ بازدید
ادامه مطلب →