Codoloper

آموزش برنامه‌نویسی به فارسی

یاد بگیر، پیشرفت کن، بساز.

منبع آموزشی برنامه‌نویسی به زبان فارسی - مستندات، دوره‌ها و مطالب کاربردی برای همه سطوح.

داکیومنت ها:

JavascriptHTMLCSSReact JSبیشتر
1// برنامه‌نویسی به فارسی
2import { learn } from 'codoloper'
3
4const developer = learn({
5"lang": "فارسی"
6"level": "همه سطوح"
7free: true
8})
بلاگ

مطالب جدید

تازه‌ترین مطالب آموزشی و خبرهای مرتبط.

سیستم DNS چیست؟ راهنمای جامع و ساده از دفترچه تلفن اینترنت نوشته شده توسط عرفان دهقانی

سیستم DNS چیست؟ راهنمای جامع و ساده از دفترچه تلفن اینترنت

تا به حال فکر کرده‌اید وقتی آدرسی مثل google.com را در مرورگر تایپ می‌کنید، دقیقاً چه اتفاقی در کسری از ثانیه رخ می‌دهد؟ کامپیوتر شما برای برقراری ارتباط با سرور گوگل، به یک آدرس عددی و طولانی به نام IP نیاز دارد. اما ما انسان‌ها حفظ کردن این اعداد را بلد نیستیم. اینجاست که یکی از شاهکارهای مهندسی اینترنت وارد عمل می‌شود.
سیستم DNS یا همان Domain Name System، نامرئی‌ترین اما حیاتی‌ترین بخش وب است. بدون آن، اینترنتی که امروز می‌شناسیم وجود نداشت. در این مقاله، می‌خواهیم این تکنولوژی را از ریشه بررسی کنیم. می‌بینیم قبل از DNS اوضاع چگونه بود، خود DNS چیست و چگونه کار می‌کند، و در نهایت بعد از پیدا شدن آدرس، چه مراحلی طی می‌شود.

قبل از DNS: دنیایی که در آن گم شده بودیم

برای درک بهتر اهمیت DNS، باید به روزهای اولیه اینترنت و شبکه ARPANET برگردیم. در آن زمان، برای پیدا کردن یک کامپیوتر در شبکه، باید آدرس IP آن را حفظ می‌کردید.
وقتی تعداد کامپیوترها کم بود، این کار شدنی بود. اما با بزرگ‌تر شدن شبکه، نیاز به یک راه حل احساس شد. راه حل اولیه فایلی به نام HOSTS.TXT بود. این فایل یک لیست متنی ساده بود که نام کامپیوترها و آدرس IP آن‌ها را در خود داشت. هر روز، یک سرور مرکزی این فایل را آپدیت می‌کرد و همه شبکه‌ها باید آن را دانلود می‌کردند.
این روش خیلی زود به بن‌بست خورد. با رشد نمایی اینترنت، حجم این فایل آنقدر زیاد شد که دانلود آن ساعت‌ها طول می‌کشید. همچنین ترافیک شبکه به شدت بالا رفت و ناهماهنگی در نسخه‌های مختلف فایل باعث شد کاربران به آدرس‌های اشتباه هدایت شوند. اینترنت به یک سیستم مقیاس‌پذیر و هوشمند نیاز داشت.

سیستم DNS چیست؟

سیستم نام دامنه یا DNS، دقیقاً برای حل همین مشکل طراحی شد. به زبان ساده، DNS دفترچه تلفن اینترنت است.
همان‌طور که شما شماره تلفن دوستتان را حفظ نیستید و نام او را در دفترچه تلفن جستجو می‌کنید تا شماره‌اش را پیدا کنید، کامپیوتر شما هم نام دامنه (مثل codoloper.com) را به DNS می‌دهد تا آدرس IP معادل آن را دریافت کند.
این سیستم یک پایگاه داده عظیم، توزیع‌شده و سلسله‌مراتبی در سراسر جهان است. هیچ سرور مرکزی و واحدی وجود ندارد که همه اطلاعات را نگه دارد. این توزیع‌شدگی باعث می‌شود اینترنت هرگز به دلیل خرابی یک سرور متوقف نشود.

DNS چگونه کار می‌کند؟

وقتی آدرسی را در مرورگر وارد می‌کنید، یک فرآیند چندمرحله‌ای و بسیار سریع آغاز می‌شود. بیایید این مسیر را قدم به قدم بررسی کنیم.

مراحل یک جستجوی DNS

۱. بررسی حافظه نهان (Cache): قبل از هر چیز، مرورگر و سیستم عامل شما بررسی می‌کنند که آیا آدرس IP این دامنه را قبلاً ذخیره کرده‌اند یا خیر. اگر پیدا شد، کار در همان لحظه تمام می‌شود.
۲. ارسال درخواست به Resolver: اگر در کش محلی نبود، درخواست به یک سرور DNS Resolver (معمولاً متعلق به ارائه‌دهنده اینترنت شما یا ISP) ارسال می‌شود. این سرور وظیفه دارد کل فرآیند جستجو را برای شما انجام دهد.
۳. مراجعه به سرور ریشه (Root Server): اگر Resolver هم آدرس را نداشت، به یکی از سرورهای ریشه در جهان مراجعه می‌کند. سرور ریشه آدرس را نمی‌داند، اما می‌داند که برای پیدا کردن پسوند com. باید به کجا مراجعه کند.
۴. مراجعه به سرور TLD: Resolver حالا به سرور TLD (Top-Level Domain) مخصوص com. می‌رود. سرور TLD هم آدرس دقیق را نمی‌داند، اما آدرس سرور مرجعی که مسئول دامنه شماست را در اختیار Resolver قرار می‌دهد.
۵. مراجعه به سرور مرجع (Authoritative Server): در مرحله آخر، Resolver به سرور مرجع دامنه شما متصل می‌شود. این سرور دقیقاً می‌داند که IP معادل نام دامنه شما چیست. آن را به Resolver برمی‌گرداند.
۶. ذخیره و تحویل: Resolver آدرس IP را در حافظه کش خود ذخیره می‌کند (برای درخواست‌های بعدی) و آن را به مرورگر شما تحویل می‌دهد.

بعد از DNS: وقتی آدرس را پیدا کردیم

بسیاری از افراد فکر می‌کنند با پیدا شدن IP، کار تمام است. اما DNS فقط خط شروع مسابقه است. بعد از اینکه مرورگر IP سرور مقصد را به دست آورد، اتفاقات زیر رخ می‌دهد:
۱. ارتباط TCP: مرورگر یک اتصال TCP با سرور مقصد برقرار می‌کند تا از رسیدن صحیح داده‌ها اطمینان حاصل کند. ۲. دست‌دهی امنیتی (TLS/SSL): اگر سایت از پروتکل HTTPS استفاده کند، یک رمزنگاری امن بین مرورگر و سرور برقرار می‌شود. ۳. ارسال درخواست HTTP: مرورگر درخواست صفحه وب را به سرور می‌فرستد. ۴. دریافت پاسخ: سرور فایل‌های HTML، CSS و جاوا اسکریپت را برمی‌گرداند و مرورگر آن‌ها را رندر می‌کند.
بنابراین، DNS فقط وظیفه ترجمه نام به عدد را دارد و بقیه مسیر بر عهده پروتکل‌های دیگر شبکه است.

مقایسه DNS سنتی با روش‌های مدرن

DNS سنتی که در پورت ۵۳ کار می‌کند، سال‌هاست استفاده می‌شود. اما یک مشکل بزرگ دارد: ترافیک آن رمزنگاری نشده و به صورت متن ساده (Plain Text) ارسال می‌شود. این موضوع باعث مشکلات امنیتی و حریم خصوصی می‌شود.
به همین دلیل، پروتکل‌های جدیدی معرفی شده‌اند:
  • DoT (DNS over TLS): ترافیک DNS را از طریق پروتکل امن TLS رمزنگاری می‌کند.
  • DoH (DNS over HTTPS): ترافیک DNS را درون ترافیک HTTPS پنهان می‌کند. این روش باعث می‌شود ارائه‌دهندگان اینترنت نتوانند به راحتی درخواست‌های DNS شما را رصد یا مسدود کنند.
در حالی که DNS سنتی سرعت بالاتری دارد (به دلیل سربار کمتر)، روش‌های مدرن مثل DoH امنیت و حریم خصوصی بسیار بهتری را ارائه می‌دهند.

مزایا و چالش‌های سیستم DNS

مزایا:
  • سهولت استفاده: نیاز به حفظ کردن اعداد پیچیده را از بین می‌برد.
  • مقیاس‌پذیری: به دلیل ساختار توزیع‌شده، با رشد اینترنت هیچ مشکلی پیدا نمی‌کند.
  • انعطاف‌پذیری: می‌توانید IP سرور خود را تغییر دهید بدون اینکه کاربران نیاز باشد آدرس دامنه را تغییر دهند.
چالش‌ها:
  • آسیب‌پذیری امنیتی: حملاتی مانند DNS Spoofing یا DNS Cache Poisoning می‌توانند کاربران را به سایت‌های جعلی هدایت کنند.
  • تاخیر (Latency): اگر سرور DNS Resolver کند باشد یا کش خالی باشد، چند میلی‌ثانیه تاخیر در بارگذاری سایت ایجاد می‌شود.
  • حملات DDoS: سرورهای ریشه و TLD همواره در معرض حملات منع سرویس هستند.

جمع‌بندی نهایی و نگاه شخصی

به عنوان یک توسعه‌دهنده، همیشه وقتی به معماری DNS فکر می‌کنم، شگفت‌زده می‌شوم. ما هر روز ده‌ها بار از آن استفاده می‌کنیم، اما تا زمانی که خراب نشود، متوجه حضورش نمی‌شویم. DNS یک شاهکار مهندسی است که توانست هرج و مرج روزهای اولیه اینترنت را به یک سیستم منظم و جهانی تبدیل کند.
صادقانه بگویم، اگرچه پروتکل‌های جدید مثل DoH امنیت را بالا برده‌اند، اما هنوز هم پیچیدگی‌های مدیریت DNS برای کسب‌وکارهای بزرگ چالش‌برانگیز است. با این حال، درک عمیق از نحوه کار DNS، نه تنها دید شما را به شبکه باز می‌کند، بلکه در عیب‌یابی مشکلات شبکه و سرور به شدت به شما کمک خواهد کرد. امیدوارم این مقاله توانسته باشد تصویر روشنی از این سیستم حیاتی در ذهن شما ایجاد کند.

سوالات متداول

چرا باید DNS پیش‌فرض خود را به 8.8.8.8 یا 1.1.1.1 تغییر دهیم؟ تغییر DNS به سرورهای عمومی مثل گوگل (8.8.8.8) یا کلادفلر (1.1.1.1) معمولاً به دو دلیل انجام می‌شود: اول، افزایش سرعت به دلیل زیرساخت قوی‌تر این شرکت‌ها، و دوم، دور زدن محدودیت‌ها و جلوگیری از ردیابی درخواست‌های DNS توسط ارائه‌دهنده اینترنت محلی.
منظور از DNS Propagation یا انتشار DNS چیست؟ وقتی رکوردهای DNS یک دامنه را تغییر می‌دهید، این تغییر بلافاصله در تمام سرورهای جهان اعمال نمی‌شود. سرورهای مختلف در سراسر جهان بر اساس زمان TTL (Time to Live) کش خود را آپدیت می‌کنند. این پروسه که به آن انتشار DNS می‌گویند، ممکن است از چند دقیقه تا ۴۸ ساعت طول بکشد.
آیا DNSSEC همان رمزنگاری DNS است؟ خیر. DNSSEC (Domain Name System Security Extensions) برای رمزنگاری ترافیک طراحی نشده است، بلکه برای امضای دیجیتال داده‌های DNS استفاده می‌شود. DNSSEC تضمین می‌کند که آدرس IP دریافتی واقعاً متعلق به همان دامنه است و در مسیر دستکاری نشده است. برای رمزنگاری خود ترافیک باید از DoH یا DoT استفاده کنید.
انتشار مستندات جامع و فارسی زبان برنامه‌نویسی جاوا در کدلپر نوشته شده توسط عرفان دهقانی

انتشار مستندات جامع و فارسی زبان برنامه‌نویسی جاوا در کدلپر

یادگیری یک زبان برنامه‌نویسی قدرتمند مثل جاوا، همیشه با چالش دسترسی به منابع آموزشی روان و به‌روز همراه بوده است. بسیاری از توسعه‌دهندگان و دانشجویان ایرانی ساعت‌ها وقت خود را صرف خواندن متون پیچیده انگلیسی یا جست‌وجوی میان آموزش‌های پراکنده و ناهمگون می‌کنند. اما این چالش به تازگی رنگ باخته است.
خبر خوب این است که مستندات جامع، ساختاریافته و کاملاً فارسی زبان برنامه‌نویسی جاوا هم‌اکنون در پلتفرم Codoloper منتشر و در دسترس همه علاقه‌مندان قرار گرفته است. این مجموعه با هدف پر کردن شکاف میان منابع پیچیده خارجی و نیاز جامعه توسعه‌دهندگان کشورمان آماده شده و مسیر یادگیری را هموارتر از همیشه کرده است.

در این مستندات چه مباحثی پوشش داده شده است؟

این مجموعه آموزشی به گونه‌ای طراحی شده که مسیر یادگیری را از صفر تا سطوح پیشرفته همراهی کند. سرفصل‌های اصلی به چند بخش کلیدی و پیوسته تقسیم می‌شوند:

شروع کار و مفاهیم بنیادین

اگر تازه می‌خواهید وارد دنیای جاوا شوید، این بخش نقطه آغازین شماست. مباحثی مانند نصب و راه‌اندازی JDK، کار با ابزار JShell برای اجرای سریع و تعاملی کدها، و پیکربندی محیط‌های توسعه محبوب مثل IntelliJ IDEA، Eclipse و Visual Studio Code به زبان ساده توضیح داده شده‌اند. همچنین مفاهیم پایه شی‌گرایی، کلاس‌ها، اشیاء، وراثت و رابط‌ها با زبانی روان و قابل درک تشریح شده‌اند.

تسلط بر APIهای مدرن و کاربردی

جاوا در نسخه‌های اخیر تحولات بزرگی داشته است. در این بخش، با ابزارهای قدرتمندی مانند Collections Framework برای مدیریت داده‌ها، Stream API برای پردازش کارآمد و موازی داده‌ها، و Date Time API برای مدیریت حرفه‌ای زمان آشنا می‌شوید. مباحثی مانند عبارت‌های لامبدا، تطبیق الگو (Pattern Matching) و گذار از سبک دستوری به سبک تابعی نیز با مثال‌های کاربردی بررسی شده‌اند.

مباحث پیشرفته تا Foreign Function and Memory

بخش پایانی و تخصصی این مستندات، شما را با قابلیت‌های سطح پایین و مدرن جاوا آشنا می‌کند. از Threadهای مجازی (Virtual Threads) که انقلابی در مدیریت همزمانی و مقیاس‌پذیری ایجاد کرده‌اند، تا API بازتاب (Reflection) و در نهایت Foreign Function and Memory (FFM) API. این قابلیت پیشرفته به برنامه‌های جاوا اجازه می‌دهد تا بدون پیچیدگی‌ها و خطرات قدیمی JNI، با کدها و داده‌های خارج از محیط اجرای جاوا تعامل امن و کارآمدی داشته باشند.

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

دسترسی به یک مرجع مکتوب و منسجم به زبان فارسی، سرعت یادگیری را به شکل محسوسی افزایش می‌دهد. وقتی مفاهیم پیچیده‌ای مانند مدیریت حافظه یا برنامه‌نویسی تابعی به زبان مادری و با در نظر گرفتن دغدغه‌های بومی توضیح داده شوند، درک عمیق‌تری از آن‌ها حاصل می‌شود. این مستندات نه تنها برای دانشجویان مهندسی کامپیوتر، بلکه برای برنامه‌نویسانی که قصد ارتقای مهارت‌های خود یا آمادگی برای بازار کار جهانی را دارند، یک مرجع قابل اعتماد محسوب می‌شود.

مزایا و محدودیت‌های این مستندات

مزایا:
  • پوشش کامل و پیوسته از مفاهیم مقدماتی تا مباحث پیشرفته‌ای مانند FFM.
  • استفاده از زبان ساده، روان و دور از پیچیدگی‌های غیرضروری و آکادمیک.
  • دسترسی آسان، آنلاین و رایگان در پلتفرم Codoloper.
  • به‌روز بودن محتوا و انعکاس ویژگی‌های نسخه‌های جدید زبان جاوا.
محدودیت‌ها:
  • این مستندات بیشتر بر روی مفاهیم زبانی و APIهای استاندارد تمرکز دارد و برای یادگیری فریم‌ورک‌های خاص سازمانی مانند Spring Boot نیاز به منابع تکمیلی خواهید داشت.
  • یادگیری برنامه‌نویسی نیازمند تمرین عملی است و این مستندات به تنهایی جایگزین نوشتن کد و انجام پروژه‌های واقعی نمی‌شود.

مقایسه با سایر منابع آموزشی

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

جمع‌بندی نهایی و نگاه شخصی

به عنوان کسی که سال‌ها در فضای توسعه نرم‌افزار فعالیت کرده‌ام، همیشه جای خالی یک مرجع فارسی منسجم، به‌روز و فنی را برای زبان جاوا احساس می‌کردم. انتشار این مستندات در پلتفرم Codoloper یک گام بلند و ارزشمند برای جامعه برنامه‌نویسی کشور است. صادقانه بگویم، هیچ منبع مکتوبی به تنهایی جایگزین تجربه عملی، دیباگ کردن کدها و مطالعه مستندات اصلی در سطوح بسیار پیشرفته نمی‌شود. اما این مجموعه فارسی می‌تواند به عنوان یک پل ارتباطی قدرتمند، شما را از سطح مقدماتی به درک عمیق مفاهیم مدرن جاوا برساند و از سردرگمی‌های رایج جلوگیری کند. امیدواریم این مستندات برای شما مفید باشد و مسیر یادگیری‌تان را هموارتر و لذت‌بخش‌تر کند.

سوالات متداول

آیا این مستندات برای افراد کاملاً مبتدی مناسب است؟
بله، سرفصل‌ها از نصب و راه‌اندازی محیط توسعه و مفاهیم اولیه شی‌گرایی شروع می‌شوند و به تدریج و با شیب ملایمی به مباحث پیشرفته می‌رسند.
 
آیا مباحث نسخه‌های جدید جاوا نیز پوشش داده شده است؟
بله، ویژگی‌های مدرن جاوا مانند Threadهای مجازی، تطبیق الگو و API جدید FFM در این مستندات به طور ویژه و با رویکردی کاربردی مورد بررسی قرار گرفته‌اند.
 
چگونه می‌توانم به این مستندات دسترسی پیدا کنم؟
این مستندات به صورت کامل در پلتفرم Codoloper منتشر شده و با یک جست‌وجوی ساده در اینترنت قابل دسترسی و مطالعه است. همینجا هم با کلیک روی مستندات در نویگیشن بار میتوانید به راحتی به آن دسترسی داشته باشید.
 
آیا این منبع برای آمادگی در مصاحبه‌های شغلی کافی است؟
این مستندات پایه‌های فنی و مفاهیم کلیدی را به خوبی پوشش می‌دهد و برای مرور سریع مفاهیم قبل از مصاحبه بسیار عالی است. با این حال، توصیه می‌شود آن را با حل مسائل الگوریتمی و پیاده‌سازی پروژه‌های واقعی تکمیل کنید.
وردپرس ۷.۰.۲: اگه آپدیت نکردی، سایتت الان در معرض خطره نوشته شده توسط عرفان دهقانی

وردپرس ۷.۰.۲: اگه آپدیت نکردی، سایتت الان در معرض خطره

۱۷ جولای ۲۰۲۶، تیم وردپرس یه آپدیت اضطراری منتشر کرد. نه یه آپدیت روتین — یه patch برای دو آسیب‌پذیری که الان به‌صورت فعال دارن ازشون برای حمله استفاده می‌شه.

اگه سایتت روی وردپرس 6.8.0 تا 7.0.1 داره اجرا می‌شه، این مقاله رو ادامه بده. اگه نه، باز هم بخون — چون احتمالاً یه سایت دیگه‌ای داری یا می‌شناسی که باید بدونه.

دو آسیب‌پذیری که باید بدونی

اول: SQL Injection در WP_Query

شناسه‌ی رسمی این آسیب‌پذیری CVE-2026-60137 هست. وردپرس پارامتر author__not_in رو که برای query کردن پست‌ها استفاده می‌شه، قبل از فرستادن به دیتابیس درست sanitize نمی‌کرد. یعنی یه مهاجم می‌تونست از طریق یه درخواست HTTP ساده، دستورات SQL دلخواه به دیتابیس بفرسته و اطلاعات رو بخونه یا تغییر بده — بدون هیچ لاگین یا دسترسی خاصی.

این باگ وردپرس 6.8.0 به بعد رو تحت تأثیر می‌ذاره.

دوم: REST API batch endpoint و اجرای کد از راه دور

شناسه‌ی رسمی این یکی CVE-2026-63030 هست و بدتره. endpoint مربوط به batch requests توی REST API وردپرس (/wp-json/batch/v1) یه مشکل route confusion داشت — یعنی یه درخواست بد‌شکل می‌تونست سیستم رو گول بزنه که یه callback غیرمجاز رو با permission اشتباه اجرا کنه.

وقتی این با SQL injection ترکیب می‌شه، نتیجه‌اش اجرای کد از راه دوره — بدون نیاز به لاگین، بدون نیاز به پلاگین خاص، روی یه وردپرس کاملاً پیش‌فرض. محققای Searchlight Cyber که این زنجیره رو کشف کردن، اسمش رو WP2Shell گذاشتن. یه proof-of-concept عمومی هم الان روی GitHub هست — یعنی هر کسی می‌تونه این حمله رو اجرا کنه.

این باگ وردپرس 6.9.0 به بعد رو تحت تأثیر می‌ذاره.

نسخه‌ات کجاست، چی باید بکنی

نسخهخطرآپدیت به
قبل از 6.8.0تحت تأثیر نیست
6.8.0 تا 6.8.5SQL injection6.8.6
6.9.0 تا 6.9.4SQL injection + RCE6.9.5
7.0.0 تا 7.0.1SQL injection + RCE7.0.2
7.1 betaSQL injection + RCE7.1 beta2

برای چک کردن نسخه: پایین هر صفحه‌ی admin وردپرس نسخه رو می‌بینی، یا از Dashboard → Updates برو.

چطور آپدیت کنی

از Dashboard → Updates برو و دکمه‌ی Update to 7.0.2 (یا نسخه‌ی مربوط به branch ات) رو بزن. وردپرس به‌خاطر شدت این آسیب‌پذیری، برای سایت‌های تحت تأثیر forced auto-update فعال کرده — ولی حتماً خودت هم تأیید کن که آپدیت انجام شده. auto-update همیشه کامل اجرا نمی‌شه.

بعد از آپدیت، یه بار به Dashboard → Updates برگرد و مطمئن شو نسخه‌ی جدید نصب شده.

اگه الان نمی‌تونی آپدیت کنی

اگه یه دلیل فنی هست که آپدیت فوری ممکن نیست (مثلاً نگران compatibility با پلاگین هستی)، دو اقدام موقت می‌تونی انجام بدی:

در WAF یا web server ات endpoint زیر رو block کن:

/wp-json/batch/v1
/?rest_route=/batch/v1

این دسترسی به batch endpoint رو می‌بنده و زنجیره‌ی RCE رو قطع می‌کنه. Cloudflare این rule رو از ساعت ۱۷:۰۳ UTC روز ۱۷ جولای برای همه‌ی کاربراش — حتی پلن رایگان — فعال کرده.

ولی این یه راه‌حل موقته، نه جایگزین آپدیت. با این آسیب‌پذیری‌ها، ساعت‌ها اهمیت دارن.

چرا این بار جدی‌تر از معموله

اکثر آسیب‌پذیری‌های وردپرس از پلاگین‌ها یا تم‌ها میان — نه از هسته‌ی خود وردپرس. این یکی متفاوته: مشکل توی core هست، یعنی هر نصب وردپرس تحت تأثیر روی هر سرور، با هر پلاگین و تنظیماتی، هدف بالقوه‌ایه. نیازی به هیچ تعاملی از طرف کاربر نیست، نیازی به guess کردن رمز نیست — یه درخواست HTTP ناشناس کافیه.

PoC عمومی بودن به این معنیه که حملات الان فعال‌ترن. اگه هنوز آپدیت نکردی، این رو جدی بگیر.

دیپلوی روی سرور ایران بدون اینترنت بین‌الملل یا نت ملی نوشته شده توسط عرفان دهقانی

دیپلوی روی سرور ایران بدون اینترنت بین‌الملل یا نت ملی

یه سناریو که هر توسعه‌دهنده‌ی ایرانی باهاش آشناست: سرور گرفتی، همه چیز رو آپلود کردی، 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 ات بدون مشکل بره بالاست — و مهم‌تر از اون، اگه یه روز نت قطع شد، می‌تونی بدون وابستگی به اینترنت خارجی آپدیت و نگهداری کنی. این آمادگی نباید ضروری باشه، ولی متأسفانه هست.