سرویس صفحات (Pages) یکی از خدمات گیتهاب است که به شما اجازه میدهد فایلهای استاتیک خود را مستقیماً از یک ریپو منتشر کنید و عملاً یک وبسایت رایگان داشته باشید. تنظیم دامنه شخصی برای گیتهاب باعث میشود که این وبسایت رایگان شما با یک آدرس زیبا و حرفهای، در دسترس کاربران قرار گیرد. در این مقاله توضیح داده میشود که چرا تنظیم دامنه سفارشی برای سرویس GitHub Pages ضروری است، چه مشکلاتی را حل میکند و دقیقاً چه مراحلی باید طی شود.
فهرست مطالب:
آشنایی با صفحات گیتهاب
سرویس صفحات گیتهاب یا GitHub Pages یکی از خدمات گیتهاب است که به شما اجازه میدهد فایلهای HTML یا CSS یا JavaScript و سایر فایلهای استاتیک خود را مستقیماً از یک مخزن (Repository) منتشر کنید و عملاً یک وبسایت رایگان داشته باشید.
مزایای صفحات گیتهاب را میتوان در رایگان بودن، سرعت راهاندازی، پشتیبانی از SSL، امکان اتصال دامنه شخصی و ارتباط یکپارچه با git و اکشنهای گیتهاب دانست. عدم پشتیبانی از محتوای داینامیک و زبانهای سمت سرور، مهمترین محدودیت این سرویس به شمار میرود. این سرویس فقط برای وبسایتهای استاتیک طراحی شده است و نمیتوانید کدهای PHP، پایتون یا Node را روی آن میزبانی کنید. یعنی مثلاً نمیتوانید یک سایت وردپرسی یا جنگو را روی GitHub Pages میزبانی کنید، اما میتوانید خروجی استاتیک یک سایت را روی آن قرار دهید.
به عنوان مثال، از صفحات گیتهاب میتوانید در موارد زیر استفاده کنید:
- ایجاد یک وبسایت شخصی یا رزومه آنلاین
- مستندسازی پروژههای نرمافزاری
- ساخت وبلاگهای استاتیک
- میزبانی صفحات معرفی محصولات
- انتشار پروژههای فرانتاند
- نمایش نمونهکارهای برنامهنویسی
چرا از آدرس پیشفرض گیتهاب استفاده نکنم؟
اگر سایتی را روی سرویس GitHub Pages راهاندازی کرده باشید، احتمالاً آدرسی شبیه به این میبینید:
https://username.github.io/repository-name
این آدرس نه حرفهای است و نه برای برند شخصی یا کسبوکار مناسب است. در واقع، این آدرس چند مشکل اساسی دارد:
- غیرحرفهای: در CV یا کارت ویزیت عجیب به نظر میرسد
- وابسته به GitHub: اگر هاستینگ را عوض کنید، آدرس هم عوض میشود
- مشکل SEO: موتورهای جستجو ممکن است محتوا را duplicate تشخیص دهند
- بدون برند: هیچ هویت مستقلی برای سایت شما ایجاد نمیکند
چرا دامنه سفارشی برای گیتهاب؟
تصور کنید آدرس سایت پورتفولیوی شما به جای آدرس طولانی
username.github.io/portfolio
یک آدرس کوتاه مانند example.ir باشد! تأثیر اول روی کارفرما یا مشتری کاملاً متفاوت است. دامنه سفارشی نشان میدهد که برای حضور آنلاین خود سرمایهگذاری کردهاید.
یکی دیگر از مزایای دامنه سفارشی، استقلال از سرویس هاستینگ است. اگر روزی تصمیم بگیرید از گیتهاب به نتلیفای، ورسل یا هر سرویس دیگری بروید کافی است فقط رکوردهای DNS دامنه خود را تغییر دهید. کاربران شما همان آدرس قدیمی را میزنند و به سایت جدید میرسند، بدون اینکه متوجه شوند!
دامنه سفارشی مثل یک آدرس دائمی است. هاستینگ مثل خانهای است که میتوانید عوض کنید؛ اما آدرس ثابت میماند.
مراحل تنظیم دامنه شخصی برای گیتهاب
۱) ایجاد رکوردهای NS موردنیاز
برای اتصال دامنه به سرویس GitHub Pages، به سه نوع DNS record نیاز دارید که باید از پنل تنظیمات دامنه خود، آنها را ایجاد کنید.
در صورتی که دامنه خود را از تأمینکنندگان خارجی خریداری کردهاید، در کنترل پنل دامنه میتوانید رکوردهای مختلف را ایجاد کنید. چنانچه از سرویسدهندههای CDN نظیر کلودفلر استفاده میکنید، باید این رکوردها را از طریق پنل CDN خود ایجاد کنید.
۱-۱) رکوردهای A برای دامنه اصلی
در کنترل پنل دامنه یا CDN خود، این چهار IP را به عنوان A Record اضافه کنید:
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
۱-۲) رکوردهای AAAA برای دامنه اصلی
خود گیتهاب توصیه میکند ۴ رکورد از نوع AAAA نیز به IPهای نسل ۶ متصل کنید:
2606:50c0:8000::153
2606:50c0:8001::153
2606:50c0:8002::153
2606:50c0:8003::153
۱-۳) رکورد CNAME برای www
برای اینکه www.example.ir هم کار کند، یک رکورد از نوع CNAME نیز نیاز دارید. در فیلد Name باید www وارد کنید و در فیلد Target نیز باید آدرس ریپوی گیتهاب مدنظر (با الگوی username.github.io) را وارد کنید. دقت کنید که به جای username از نام کاربری گیتهاب خود استفاده کنید.
۱-۴) تأیید مالکیت دامنه
برای این که گیتهاب از مالکیت شما نسبت به دامنه مطمئن شود، یک رکورد از نوع TXT نیز باید بسازید که برای هر دامنه و اکانت، مقدار منحصر بهفردی دارد. جهت دسترسی به اطلاعات این رکورد، به قسمت تنظیمات Pages در حساب کاربری گیتهاب خود بروید.
نکته مهم: اگر از Cloudflare استفاده میکنید، حتماً حالت Proxy را غیرفعال کنید (آیکون ابری را خاکستری نگه دارید). گیتهاب برای صدور گواهی SSL باید به IP واقعی سرور دسترسی داشته باشد.
در پایان این مرحله، باید ۱۰ رکورد DNS مشابه تصویر داشته باشید:

۲) تنظیم دامنه سفارشی در گیتهاب
این مرحله مهمترین قسمت است و بدون آن، حتی با DNS درست، سایت شما کار نخواهد کرد.
- وارد ریپوی مدنظر خود در گیتهاب شوید.
- روی تب Settings کلیک کنید.
- از منوی سمت چپ، گزینه Pages را انتخاب کنید.
- در بخش Custom domain، آدرس دامنه خود را وارد کنید (مثلاً example.ir).
- روی Save کلیک کنید.
- منتظر بمانید تا گیتهاب یک فایل CNAME در پوشه اصلی ریپوی شما بسازد.
گیتهاب پس از ذخیره، یک فایل به نام CNAME در روت مخزن شما میسازد که داخلش فقط آدرس دامنه شما نوشته شده است. این فایل به گیتهاب میگوید که این مخزن صاحب دامنه example.ir است. بدون این فایل، گیتهاب نمیتواند تشخیص دهد که درخواستهای ورودی به کدام سایت تعلق دارند.
۳) دریافت گواهی SSL رایگان
پس از ذخیره دامنه سفارشی در گیتهاب، گزینهای به نام Enforce HTTPS ظاهر میشود. این گزینه کارهای زیر را انجام میدهد:
- یک گواهی SSL رایگان از Let’s Encrypt صادر میکند،
- تمام ترافیک HTTP را به HTTPS ریدایرکت میکند.
دقت کنید که گاهی تا ۲۴ ساعت طول میکشد تا این گزینه فعال شود. اگر گزینه Enforce HTTPS خاکستری و غیرفعال بود، احتمالاً رکوردهای DNS شما هنوز propagate نشدهاند. پس صبر کنید و دوباره چک کنید.
۴) توضیحات تکمیلی
بعد از تنظیم دامنه شخصی برای ریپوی username.github.io، از این به بعد آدرس دلخواه شما برای این مخزن استفاده میشود. در مثال ما، آدرس سفارشی ما example.ir خواهد بود.
username.github.io => example.ir
البته میتوانید سایر ریپوهای خود را نیز به صورت نسبی آدرسدهی کنید. فرض کنید که یک ریپوی دیگر با نامک my-test-repo دارید. بعد از انجام مراحل بالا میتوانید از طریق آدرس زیر به این مخزن هم دسترسی داشته باشید:
github.com/username/my-test-repo => example.ir/my-test-repo
مشکلات متداول
خطای ۴۰۴ بعد از تنظیم DNS
اگر بعد از تنظیم رکوردهای DNS با خطای ۴۰۴ مواجه شدید، احتمالاً دامنه سفارشی خود را در تنظیمات گیتهاب تنظیم نکردهاید. DNS صحیح است، اما گیتهاب نمیداند این دامنه به کدام ریپو تعلق دارد. پس مرحله ۲ را دنبال کنید.
گزینه SSL کار نمیکند
- مطمئن شوید Cloudflare Proxy غیرفعال است.
- DNS باید کاملاً propagate شده باشد.
- صبر کنید! گاهی تا ۲۴ ساعت زمان میبرد.
فایل CNAME پس از هر push حذف میشود
اگر فایل CNAME پس از هر دیپلوی یا push حذف میشود، آن را دستی به روت مخزن اضافه کنید و در فرآیند build خود مطمئن شوید که این فایل کپی میشود.
سوالات متداول
-
آیا دامنه سفارشی برای صفحات گیتهاب رایگان است؟
خود سرویس صفحات گیتهاب رایگان است، اما باید دامنه را از یک ثبتکننده دامنه (مثل ایرانیک، گوددی، نیمچیپ و …) خریداری کنید. گواهی SSL که گیتهاب صادر میکند کاملاً رایگان است.
-
آیا میتوان از زیردامنه برای گیتهاب استفاده کرد؟
بله. میتوانید از blog.example.ir یا هر زیردامنه دیگری به عنوان دامنه سفارشی استفاده کنید. کافی است یک رکورد CNAME برای آن زیردامنه به username.github.io اضافه کنید.
-
آیا میتوان چند repo گیتهاب را به یک دامنه وصل کرد؟
هر دامنه یا زیردامنه فقط میتواند به یک مخزن متصل شود. برای چند سایت مختلف، از زیردامنههای مختلف استفاده کنید.
این مطلب با استفاده از مستندات رسمی تنظیم دامنه شخصی برای صفحات گیتهاب نوشته شده است که جهت مطالعه بیشتر میتوانید به صفحه رسمی آن در گیتهاب مراجعه کنید.
اگر سوالی دارید یا در تنظیمات مشکلی پیش آمد، در بخش نظرات بنویسید.