带有GitHub页面的自定义域

564 阅读4分钟

自定义域名与GitHub页面

我在GitHub Pages上托管我的博客。我想用自己的域名而不是github.io 子域名。

GitHub的文档很有帮助。即便如此,我还是花了些功夫才搞清楚所有的细节,所以我打算分享我学到的东西。

这些说明是针对使用 "顶点域 "的,例如:fernandocorreia.dev 。当使用一个子域(如www.fernandocorreia.dev )时,设置会有些不同。同样,GitHub 的文档非常有用,很好地解释了这些区别。

第一步:Let's Encrypt的DNS条目

如今,每个网站都需要一个SSL证书,这样才不会被浏览器屏蔽。

GitHub Pages与Let's Encrypt集成,代表你获得SSL证书,这样你的网站就能被安全访问。这非常有帮助,因为你不需要为证书付费,也不需要处理创建和设置的细节问题,这可能是相当复杂的。

到你的域名DNS提供商那里,按照这个模式添加一个CAA记录:

DOMAIN CAA 0 issue “letsencrypt.org”

例如,请看这张图片,显示我是如何在我的DNS提供商(Namecheap)上创建该记录的。

CAA record for GitHub Pages and Let’s Encrypt on Namecheap

提示:如果你已经在GitHub上配置了域名(在下一步解释),在继续之前,只需从GitHub Pages仓库中删除你的CNAME 文件:

rm CNAME
git add .
git commit -m "Remove custom domain"
git push

第二步:在 GitHub 上设置域名

下一步是在 GitHub 仓库的设置页面上,在 "GitHub 页面 "部分输入自定义域名。

说白了,在我的例子中就是在这个网址上:https://github.com/fernandoacorreia/fernandoacorreia.github.io/settings。

在 "自定义域名 "栏中输入域名,然后按保存(见下图):

GitHub Pages custom domain setting

这将创建一个提交,在仓库的根部添加一个名为CNAME 的文件,像这样:

❯ cat CNAME
fernandocorreia.dev

第三步:将你的域名指向 GitHub 页面

完成后,回到你的域名DNS提供商处,用这些IP地址添加4条A记录:

185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153

这将使你的域名指向 GitHub Page 的服务器。

请看这个例子,我是如何在Namecheap上设置的:

A records for GitHub Pages on Namecheap

你可以使用dig 命令来检查这些设置是否生效:

❯ dig fernandocorreia.dev +noall +answer
fernandocorreia.dev.	1799	IN	A	185.199.110.153
fernandocorreia.dev.	1799	IN	A	185.199.111.153
fernandocorreia.dev.	1799	IN	A	185.199.109.153
fernandocorreia.dev.	1799	IN	A	185.199.108.153

提示:出于安全考虑,GitHub 建议只有仓库的设置中设置了域名(上一步)后再做此操作。这就是为什么我们要在 DNS 设置和 GitHub 设置之间来回跳转。

第4步:在GitHub页面上强制执行HTTPS

回到 GitHub 仓库的设置页面,打开 "GitHub 页面 "下的 "Enforce HTTPS "字段。

GitHub Pages HTTPS setting

提示:如果该字段被禁用(即不能更改),请等待几分钟,让你的DNS变化得到传播,刷新设置页面,再试一次。

第5步:将变化拉到GitHub仓库

如果你使用静态网站生成器(如Hugo),请拉动GitHub Pages仓库的最新提交,以便它拉动最近创建的CNAME 文件。

如果你忘了这么做,当静态网站生成器修改了你的 GitHub Pages 仓库中的文件,而你试图将这些修改推送到 GitHub 时,你会得到一个合并冲突。在这种情况下,从上游获取并重新建立。

例如,在我的例子中,我的 GitHub Pages 仓库是我的静态网站仓库的一个子模块,所以这对我来说是可行的。

❯ cd public
❯ git pull

试用它

在这一点上,你的DNS提供商应该将你的域名指向GitHub Pages,GitHub Pages也应该知道这一点,而且它应该已经创建了一个SSL证书。你就可以尝试像这样访问你的网站了。

就这样吧!我希望这有帮助。我充分意识到,这些专业术语对你来说可能是新的,你可能不知道到底如何配置你的DNS供应商,如何排除DNS设置的故障,或处理错综复杂的git子模块和合并冲突。希望这些说明和提示能成为你在遇到麻烦时上网查询的起点。我也没能在第一次尝试时就得到正确的答案。

参考资料

这些网页对我弄清楚我到底要做什么有很大帮助: