وقتی اینترنت بینالملل قطع میشه، بیشتر آدمها فقط یه چیز رو حس میکنن: سایتهای خارجی باز نمیشن. ولی برای یه برنامهنویس ماجرا خیلی جدیتره: 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
- بکاپ دیتابیس روی سرور داخلی و یه نسخهی دیگه روی سیستم خودت؛ بکاپی که فقط روی یه فضای ابری خارجیه، در زمان قطعی وجود نداره.
- کلیدها و دسترسیها: مطمئن شو ورودت به سرور و پنلها به یه سرویس خارجی (مثل ورود با گوگل یا کد تأیید از یه اپ خارجی که نیاز به اینترنت داره) وابسته نیست.
چکلیست: همین امروز
- [ ] pip، npm، داکر و apt رو روی میرور داخلی تنظیم و تست کردم.
- [ ] پکیجها، ایمیجهای داکر و مدلهای لازم رو محلی ذخیره کردم.
- [ ] مستندات اصلی رو آفلاین دارم.
- [ ] سایتم هیچ فونت، اسکریپت یا CSS ضروری از خارج لود نمیکنه.
- [ ] فرمهام به reCAPTCHA وابسته نیستن.
- [ ] برای ربات تلگرام، ایمیل و APIهای خارجی، جایگزین یا timeout دارم.
- [ ] کدها و بکاپها یه نسخهی داخلی دارن.
هیچکدوم از اینها پیچیده نیست، ولی همهشون یه شرط دارن: باید وقتی نت وصله انجام بشن.


