داستان خرید دامنه و هاست برای جنگو

من در حال طراحی وب سایتی هستم که کارفرمای اون در کاندا هست. ایشون ایرانی هستن و اونجا زندگی می کنن. چند وقت پیش با من تماس گرفت تا من وب سایتی براش طراحی کنم تا فیلم های آموزشی خودش رو اونجا بذاره. من وب سایت رو نوشتم و بعد از چند روز قرار شد تا دامنه و هاست بخریم تا من وب سایت رو آپلود کنم. امروز حدود ۱۰ ساعت درگیر این ماجرا بودم و قراره شما در عرض ۱۰ دقیقه مشکلاتی که من باهاش دست و پنجه نرم کردم رو به همراه راه حلش بدونید. خرید دامنه یه چندتا شرکت فروش دامنه هست که خیلی معروف هستن ولی محبوترینش در خارج از ایران godaddy هست. پروسه خریدن دامنه خیلی سر راست و ساده هست. اکانت میسازی، وارد وب سایت میشی، دامنه مورد نظرت رو سرچ میکنی و اگر در دسترس بود اقدام به خرید میکنی. چنتا نکته اینجا برای من جالب بود: دامنه دات کام رو گو ددی برای سال اول فقط یک دلار از شما می گرفت یعنی میشه گفت دامنه رو داشت مفد میداد. اما این تخفیف فقط برای سال اول بود. اگه دو ساله میخریدی ۴۰ درصد تخفیف میداد و همینطوری تخفیف کمتر میشد برای سال پنجم که تخفیفش خیلی کم بود در حدود ده درصد قیمت تمام شده دامنه حدود ۱۵۰ دلار کاندا بود! یعنی برای شما دون میپاشن که دامنه رو بخری بعد سالهای بعد که دامنه رو میخری باید قیمت کاملش رو بدی که این قیمت کامل نسبت به سایتهای دیگه بیشتر بود. ولی خوب اگر ایده ای داری که می خوای تست کنی خیلی راحت با یک دلار می تونی کارت رو شروع کنی.تقریبا بلافاصله بعد از خرید دامنه میشه ازش استفاده کرد. دامنه ای که ما خریدیم دات کام بود شاید دات کام های اینطوری هستن. همینطور برای خرید دامنه دات کام نیازی نیست تو هیچ سازمانی ثبت نام کنی. برای خرید دامنه دات آی آر باید توی ایرنیک ثبت نام کنی و کمی داستان داره و ۴۸ ساعت طول میشکه تا دامنه در دسترس قرار بگیره. نکته بعدی که برام جالب بود وقتی شخصی با ویزا کارت اقدام به خرید میکنه نیازی به رمز دوم و سوم و دهم و پویا و از این چیز شعرا نداره. فقط اطلاعات کارت رو وارد می کنی و پول از حسابت کم میشه. خوب این می تونه قطعا مشکل امنیتی داشته باشه یعنی اگه کسی اطلاعات کارتت رو داشته باشه عملا می تونه باهاش خرید انجام اما دقیقا نمی دونم چطوری این مشکل رو اونجا حل میکنن. توی گو ددی شما می تونید ایمیل یه شخص رو وارد کنید و بهش اجازه بدید که به اکانت شما دسترسی داشته باشه. این ویژگی به این خاطر خوب هست که دامنه رو کارفرما می تونه به اسم خودش ثبت کنه و من فقط بهش دسترسی داشته باشم. کارفرما می تونه در بخش Delegate Access اسم و ایمیل من رو اضافه کنه تا من هم به اکانت دسترسی داشته باشم. خرید هاستچون من وب سایت رو با پایتون و جنگو نوشتم و چون از خارج ایران می تونستم هاست یا سرور بخرم عملا دستم خیلی باز بود و از هر شرکتی هر سرویسی که دوست داشتم رو می تونستم انتخاب کنم. heroku خیلی تو دنیای پایتون و جنگو معرفه و من هم می خواستم از اینجا سرویس بخرم اما بعدا به ذهنم رسید که خیلی با PythonAnyWhere حال می کنم و واقعا سرویس خیلی خوب و سر راستی برای پایتون هست. اینجا هم باز دوباره فرآیند خرید خیلی راحته اکانت میسازی و سرویسی که می خوایی رو می خری.هاست جای هست که باید وب سایت رو بذاریم و باید بین دامنه و این هاست ارتباط برقرار کنیم تا وقتی کسی اسم وب سایت رو تایپ می کنه وب سایت لود بشه اینجا هست که کلی داستان به وجود می آید.وصل کردن دامنه به هاستاولین کاری که باید بکنیم این هست که در وب سایت PythonAnyWhere یعنی همون هاست خودمون یه وب اپ درست کنیم. وقتی که وب اپ رو درست می کنیم از ما میپرسه که دامنه شخصی خودمون رو وارد کنیم یا خودش یک دامنه ساختگی به ما میده شامل نام کاربری و آخرش هم یه pythonanywhere.com میچسبونه.چون ما خودمون دامنه داشتیم قطعا می خواستیم از اون استفاده کنیم. گزینه دوم یعنی custom domain رو انتخاب می کنیم و اسم دامنه رو وارد می کنیم. نکته ای که اینجا وجود داره باید نام دامنه رو کامل وارد کنیم. یعنی نباید وارد کنیم example.com بلکه باید وارد کنیم www.example.com اینکه نکته ای مهمی هست.بعد از اینکه وب اپ رو در PythonAnyWhere ساختیم یک چیزی به نام CNAME تولید میشه. این سی نیم در واقع اسم وب سایت ما در PythonAnyWhere هست. این یک نمونه از سی نیم هست:webapp-1406122.pythonanywhere.comکاری که ما باید بکنیم این هست که در سرویس دهنده دامنه خودمون یک رکورد www درست کنیم و این CNAME رو به عنوان مقدار اونجا وارد کنیم.اضافه کردن رکورد CNAMEاین CNAME داره به گو ددی میگه که وقتی شخصی www زد و بعدش اسم وب سایت رو زد درخواست رو بفرسته به webapp.xxxx.pythonanywhere خوب ما در pythonanywhere یک وب سایتی داریم که به این درخواست پاسخ بده.بدین طریق دامنه به وب سایت وصل میشه.نسخه HTTPSدامنهوقتی ما تو مروگر خودمون اسم یک دامنه مثل example.com رو وارد می کنیم به صورت پیش فرض درخواست از طریق پروتکل HTTPS ارسال میشه. اگر در دامنه یا هاست خودمون تنظیمات مربوط به SSL رو انجام نداده باشیم با یک صفحه در مرورگر ظاهر میشیم که میگه این وب سایت امن نیست چون از پروتکل HTTPS استفاده نمیکنه و وب سایت لود نمیشه. بعد از وصل کردن دامنه و هاست اولین چیزی که دیدم این پیغام بود. خوب توی همون صفحه ای که ظاهر شده دکمه هست که میزنی من تمام ریسک ها رو قبول می کنم و وب سایت لود میشه. اما خوب مشخه هر کاربری که با این صفحه روبرو بشه بلافاصله وب سایت رو ترک میکنه و این اصلا اتفاق خوبی نیست. برای حل این مشکل یا باید SSL certificated بخریم و اون رو روی دامنه تنظیم کنیم که توی PythonAnyWhere مستنداتی در این مورد هست و یا راه راحتش این هست که توی بخش امنیت PythonAnyWhere گزینه ای به شکل زیر رو تنظیم کنیم:تنظیم SSLاون دکمه مداد رو میزنیم و Auto-renew... رو انتخاب می کنیم. بعد از انجام دادن این کار دیگه پیغامی مبنی بر امن نبود سایت ظاهر نمیشه و وب سایت همونطور که باید لود بشه لود شد.نسخه لخت دامنه ?بعد از اینکه این عملیات رو انجام دادم می تونستم به وب سایت دسترسی داشته باشم. من هنوز وب سایت رو آپلود نکردم بلکه دامنه رو به هاست وصل کردم. تا اینجا هاست PythonAnyWhere داشت به من پاسخ میداد و صفحه ای به شکل زیر ظاهر میشد.پیغام پیش فرض pythonanywhereاین پیغام خوش آمدگویی PythonAnyWhere هست که نشون میده دامنه شما با موفقیت به وب اپی که روی PythonAnyWhere ساختید وصل شده. اما داستان نسخه لخت دامنه چیه؟ همه چیز تا اینجا خوب بود تنها کاری که باید انجام میدادم این بود که وب سایت رو بفرستم رو اپی که در PythonAnyWhere ساختم و کار من تموم میشد اما من به خاطر اینکه همیشه باید www بزنم تا وب سایت بالا بیاد ناراحت بودم. یعنی من دوست نداشتم که برای دسترسی به وب سایتی مثل example.com تایپ کنم www.example.com بلکه من مایل بودم، تا تایپ کنم example.com تا وب سایت بالا بیاد. این بود که بعدی کمی جستجو فهمیدم که به نسخه ای از دامنه که www نداره میگن دامنه لخت ?خوب بلافاصله شروع کردم به جستجو که بفهم چطور می تونم این ویژگی رو روی دامنه کارفرما ایجاد کنم. فهمیدم این کاری هست که سرویس دهنده دامنه باید فراهم کنه و ربطی به هاست نداره. خوب دامنه قرار لخت بشه پس این موضوع ربطی به هاست نداره. بعد از جستجو فهمیدم که توی گو ددی یه ویژگی هست به نام Forwarding این ویژگی اجازه میده نسخه بدون www وب سایت رو به نسخه www دآر اون وصل کنید. در بخش تنظیمات دی ان اس دامنه یک فرمی شبیه به فرم بالا هست که شما نسخه www دآر دامنه رو وارد می کنید. مثلا وارد می کنید www.example.com و وقتی که کاربر example.com رو وارد کرد به این نسخه یعنی همون www دآر ارجاع داده میشه. من همین کار رو انجام دادم چرا چون که نسخه www دآر دامنه من به درستی کار می کرد. وقتی اینکار رو انجام دادم پیغامی اومد که تنظیم شدن DNSها (بماند که DNS چیه) از چند دقیقه تا ۴۸ ساعت ممکنه زمان ببره. حالا یک ساعت منتظر شو دو ساعت منتظر شو نسخه لخت دامنه کار نکرد که نکرد!?من به جستجوی خودم ادامه دادم تا بفهمم آیا راهی هست که این کار رو انجام بدم یا نه. در خلال جستجوی خودم فهمیدم که بعضی از وب سایت ها هستن که کار وصل کردن نسخه کامل به نسخه لخت رو انجام میدن و چه چیزی بهتر از این که یک وب سایت این کار رو انجام بده. من دوتا وب سایت پیدا کردم ولی از NakedSSL برای اینکار استفاده کردم. انجام دادن این کار هم بسیار راحته عضو سایت میشی نسخه بدون www رو وارد می کنی و این وب سایت به شما یک آدرس آپی میده! کاری که باید انجام بدیم این هست که بریم توی سرویس دهنده دامنه (گو ددی) و یک رکورد A ایجاد کنیم و این دامنه رو به عنوان مقدار وارد کنیم مثل شکل زیر:افزودن رکورد Aبعد از اینکه رکورد A رو اضافه کردیم با آی پی که از NakedSSL گرفتیم منتظر میشم تا دی ان اس ها با آپی جدید تنظم بشن. و نکته جالب این بود که بلافاصله بعد از تنظیم شدن دی ان اس ها خود NakedSSL یه ایمیل به من زد و گفت همه چیز آماده است. من نسخه لخت دامنه رو تست کردم و نمردیم و نسخه لخت دامنه رو Up and Running کردیم. نتیجه گیریفرآیند وصل کردن دامنه به هاست می تونه مشکلاتی به همراه خودش داشته باشه. توی این فرآیند زیاد به داکیومنت های PythonAnywhere سر زدم و در انجمن های اون دیدم دقیقا مشکلاتی که برای من پیش اومده برای دیگران هم پیش اومده. با اینکه گو ددی این همه معرفه و کلی مشتری داره پشتیبانی اون یک ربات بود و اصلا نمیشد کسی رو پیدا کرد که سوال بپرسی که با وجود اینکه Forwarding رو انجام دادم چرا کار نمی کنه به خاطر همین من از یک وب سایت دیگه برای ارجاع دادن استفاده کردم. می تونیم نتیجه بگیریم که شرکت های کوچیک انگیزه و زمان کافی برای پیگیری درخواست های مشتری های خودشون رو دارن.