دیپلوی روی سرور ایران بدون اینترنت بینالملل یا نت ملی
یه سناریو که هر توسعهدهندهی ایرانی باهاش آشناست: سرور گرفتی، همه چیز رو آپلود کردی، npm install میزنی — و بعد پنج دقیقه نشستی نگاه میکنی که cursor چشمک میزنه و چیزی دانلود نمیشه. یا بدتر: همه چیز کار میکنه، بعد یه روز نت قطع میشه و نمیتونی حتی یه dependency ساده آپدیت کنی.
قطع اینترنت بینالملل یه اتفاق خوب نیست و نباید عادیاش کنیم. ولی واقعیت اینه که این اتفاق میافته — گاهی جند هفته، گاهی بیشتر — و اگه سرورت وابسته به سرورهای خارجی باشه، یه قطعی ساده میتونه کل deploy و maintenance رو فلج کنه. این مقاله برای اونه که اگه یه روز اتفاق افتاد، آماده باشی.
مشکل اینجاست که اکثر ابزارها، package managerها، و حتی خود لینوکس بهصورت پیشفرض از سرورهای خارج دانلود میکنن. اگه قبل از دیپلوی اینها رو تنظیم نکنی، اولین باری که نت ملی جدا میشه — یا از همون اول اگه سرورت به اینترنت بینالملل وصل نیست — همه چیز میشکنه.
اینجا یه checklist عملی از چیزهایی که باید انجام بشه میآورم، بر اساس تجربهی مستقیم.
۱. میرور خود توزیع لینوکس
اولین و مهمترین کار اینه که میرور اصلی سیستم عاملت رو عوض کنی. وقتی apt update یا pacman -Syu میزنی، باید از یه آدرس ایرانی دانلود کنه.
برای اوبونتو، فایل /etc/apt/sources.list رو ویرایش کن و آدرسهای archive.ubuntu.com رو با میرور ایرانی جایگزین کن. برای آرچ، /etc/pacman.d/mirrorlist رو ویرایش کن.
لیست میرورهای قابل اعتماد ایرانی رو میتونی توی devneeds.ir پیدا کنی. ArvanCloud معمولاً مطمئنترین انتخابه از نظر uptime و پوشش پکیجها.
# بعد از تغییر میرور اوبونتو
sudo apt update && sudo apt upgrade
۲. میرور Docker
Docker هم بهصورت پیشفرض از docker.io و registry-1.docker.io pull میکنه. این رو باید توی فایل daemon.json عوض کنی:
sudo nano /etc/docker/daemon.json
{
"registry-mirrors": ["https://mirror.arvancloud.ir"]
}
بعد Docker رو restart کن:
sudo systemctl restart docker
از تجربهی شخصی: ArvanCloud برای مدت طولانی مطمئنترین انتخاب بود، ولی اخیراً Liara هم عملکرد بهتری داشته. هر دو رو چک کن و ببین کدوم توی لحظهای که داری کار میکنی بهتر جواب میده.
۳. میرور پکیج منیجرهای اپلیکیشن
باید مطمعن بشی که هر پکیج منیجری که استفاده میکنی داره از میرور های داخل ایران استفاده میکنه.
مثال میزنم اگر از npm استفاده میکنی برای پکیج های جاوا اسکریپتی / تایپ اسکریپتی باید بری میرور ایران ان پی ام رو پیدا کنی و ست کنی. چیزایی که الان کار میکنن لیارا و رانفلر هستند اما از اونجایی که رانفلر پول میگیره فقط در صورتی استفاده کنید که خیلی سرعت براتون مهمه وگرنه میرور های دیگه کارتون راه میندازن.
از پی اچ چی دارید و از کامپوزر استفاده میکنید همینطور.
کارگو برای راست. ناگت برای سی شارپ و هر چیزی خلاصه ببینید پکیج منیجرتون چیه و میرورشو به روشی که توضیح میدن ست کنید.
اگر پکیج منیجرتون لینک دانلود و یا وریفای پکیج هارو ذخیره میکنه در جایی - مثلا npm در package-lock اینکارو میکنه - مطمعن شید که اون لینک ها هم آپدین شدن مثلا برای ان پی ام:
npm install --package-lock-only --registry=https://registry.npmjs.org/
۴. پایگاه دادههایی که میرور سیستم عامل ندارن
اینجاست که ماجرا کمی دردسرتر میشه. مثلاً آرچ PostgreSQL 17 به بعد رو توی repo رسمیش نداره. معمولاً باید میرور رسمی خود PostgreSQL رو اضافه کنی — ولی اون میرور از ایران جواب نمیده.
راهحل: به devneeds.ir مراجعه کن. میرور ایرانی از نسخههای مختلف PostgreSQL اونجا هست که از نت ملی هم پاسخگوئه.
برای اوبونتو، PostgreSQL repository رسمی معمولاً توی apt بدون مشکل کار میکنه — ولی اگه روی نت ملی isolated هستی، اینجا هم باید میرور ایرانی پیدا کنی.
۵. تست روی سیستم خودت قبل از deploy
یه قدم که خیلیها رد میکنن اینه که همهی این تنظیمات رو روی ماشین محلی خودت هم چک کنی. اگه روی ماشین خودت با همین میرورها npm install بزنی و همه چیز دانلود بشه، با اطمینان بیشتری میتونی روی سرور هم همین کار رو بکنی.
این یه شبیهسازی سادهست: مطمئن میشی که lockfile ها درست هستن و هیچ dependency ای نیست که فقط از خارج قابل دسترسه.
SSL روی سرور ایرانی
این یه بحث جداست — و صادقانه بگم، راحت نیست. Let's Encrypt از ایران مشکل داره، و خیلی از راهحلهای خودکار SSL روی شبکهی ملی کار نمیکنن. devneeds.ir مستندات مربوط به ست کردن SSL در این شرایط رو داره — بهتره مستقیم از اونجا بخونی چون وضعیت ممکنه تغییر کرده باشه و اطلاعات بهروز باشه.
شوخی نیست — دردسره. ولی مجبوریم.
خلاصهی checklist
قبل از deploy روی هر سرور ایرانی:
- میرور توزیع لینوکس → devneeds.ir یا ArvanCloud
- میرور Docker daemon → ArvanCloud یا Liara
- میرور پکیج منیجرها (npm، pip، Composer و بقیه) → liara.ir/mirrors
- lockfile ها رو پاک و rebuild کن تا لینکها آپدیت بشن
- پایگاه دادههای خارج از repo سیستم عامل → devneeds.ir چک کن
- روی ماشین محلی با همین میرورها تست کن قبل از deploy
اگه اینها رو انجام بدی، احتمال اینکه deploy ات بدون مشکل بره بالاست — و مهمتر از اون، اگه یه روز نت قطع شد، میتونی بدون وابستگی به اینترنت خارجی آپدیت و نگهداری کنی. این آمادگی نباید ضروری باشه، ولی متأسفانه هست.