对部署到Github Pages上的博客配置自定义域名
前言
发现之前用来搞 galgame 网盘转存网站的被我废弃掉之后,多出来一个闲置的域名
就打算把我的 Hexo 博客绑定到上面,要不然每次都要
ergou10086.github.io来访问自己的博客,域名太长了。
自定义域名其实是一件比较简单的事情啊,比把hexo部署到服务器简单得多
效果就是如下了
这里实际上你的 仓库名.github.io 这个域名并没有失效啊,只是指向了这个你自定义的域名
输入 仓库名.github.io 这个域名是会自动跳转到你自定义的域名下的,这个很重要,给需要分配子page和子域名的人说一下
购买域名
这里笔者使用的是阿里云,可能别的更便宜,我的 .cn 后缀域名现在一年要 42 块,有点贵。。。
另外还有很多人推荐的godaddy也可以。本篇以阿里云为例。
- 首先注册阿里云账号,如果有淘宝账号的,可以直接登录。
- 登录以后,先进行实名认证(购买域名要用到,但是域名申请备案时候还要搞一遍,那个是工信部申请备案的模板,关于如何实名验证,这里就跳过了)。
这里进入购买域名的位置
在这搜索你想要注册的域名,建议买没有人用过的,买别人用过的一是贵,二是需要涉及过户
域名其实不贵啊,.cn和 .top
我都比较推荐,.xyz我看也不少人用,我的比较贵,42一年
备案通常情况下你看他说需要好几天,最慢的其实就是申请备案要搞的那个备案申请模板,有了那个模板几分钟我的就下来了我记得。
建议网站上线之后把备案信息放在你的网站页脚处。
配置域名绑定
win+R快捷键打开“运行”窗口,输入cmd运行命令行控制台。
ping 你的仓库名.github.io 就能看到 GitHub Page
给你绑的是什么 ip 了
这里其实涉及到一些 GitHub Page 的一些配置信息,详情可以访问 GitHub文档,我其实就是照着这个配置的
https://docs.github.com/zh/pages/configuring-a-custom-domain-for-your-github-pages-site
进入域名解析列表并对购买的域名进行解析
控制台,有个域名与网站,进去
点击解析配置相应的配置
配置两条解析
- 主机记录 www;记录类型
CNAME;设置解析请求需要高级的版本,自动默认;记录值
你的仓库名.github.io;TTL这个默认就是10分钟- GitHub Pages 要求用户通过 CNAME 记录将自定义域名的
www子域名指向其默认域名(*.github.io)。 - 这样配置后,当用户访问
www.yourdomain.com时,域名系统会将请求转发到 GitHub 服务器,由 GitHub 处理并返回网站内容。 - GitHub Pages 的服务器 IP 地址可能会动态变化,使用 CNAME 记录无需手动更新 IP,GitHub 会自动维护其默认域名与实际 IP 的映射关系,避免因 IP 变动导致网站无法访问。
- GitHub Pages 要求用户通过 CNAME 记录将自定义域名的
- 主机记录 @;记录类型
A;设置解析请求需要高级的版本,自动默认;记录值
上面ping出的IP地址;TTL这个默认就是10分钟
- 通过 A 记录指向 IP,确保根域名直接访问正常。
- 根域名(如
yourdomain.com)无法直接使用 CNAME 记录,因此需要通过 A 记录指向 GitHub Pages 的 IP 地址。这里是为了兼容不支持 CNAME 的场景 - 通过
ping yourrepo.github.io可以获取 GitHub Pages 当前的服务器 IP(可能返回多个 IP,需全部配置),确保根域名能正确解析到服务器。
- 若需启用 HTTPS,需在 GitHub Pages 中配置自定义域名并等待其自动颁发 SSL 证书(需确保解析记录已生效)。
关于记录类型其实有些话要说,你看很多人配置,配置主机记录 @的时候用的也是记录类型
CNAME,然后记录值
你的仓库名.github.io,其实这个是无所谓的,在这里我用的是上面ping出的IP地址,主机记录www的配置也可以写成
你ping出的域名,然后记录类型写成A
这俩写法都可以,所以我交叉着用了
你可以点击生效检测,看看你的DNS生效了吗,没生效的情况大部分的备案没过
配置 GitHub 指向你的域名
到这里阿里云上的配置就结束了
新建 CNAME 文件
我们需要新建一个 CNAME 文件,注意是 文件 需要把文件后缀名消掉
如果不做这一步,每次hexo d部署到
github上以后,对应仓库的域名设置里的域名会被重置回原来username.github.io,你需要再次设置成你的域名,很麻烦。
配置 apex 域
这里是 GitHub 文档给出的配置教程
https://docs.github.com/zh/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site
可以参考一下
配置好了以后,登录github,进入到博客站点对应的仓库,对域名进行设置:
进入 GitHUb Pages
不要吐槽的我用的汉化插件,我英语是真不行
自定义域的部分输入你的域名,这里会自动进行 DNS 解析,我这里第一次失败是因为我挂着梯子
到此,域名就与你的博客站点绑定上了。
输入你的域名查看能不能正常跳转
Https
如果GitHub上可以开启Https直接开启即可,如果不能的话可以在阿里云申请一个免费的SSL证书
为了部署到云服务器上配置自定义域名
我以一个二级域名为例子了
配置域名解析
首先登录阿里云控制台,进入域名控制台,配置域名解析
然后配置域名解析,配置一条 A 记录,主机记录填写你的二级域名前缀,记录值填写你的云服务器公网 IP
保存解析,等待 5-10
分钟让解析生效,然后通过ping blog.yourdomain.cn验证是否指向服务器
IP
然后这里就可以开始着手配置云服务器了
部署到云服务器
根据二级域名建站
首先确保你的云服务器(以CentOS为例子)具备基础运行环境:
1 | # 更新系统包(Ubuntu/Debian) |
然后找到你的 Hexo
配置文件_config.yml,修改一些部署的配置
找到deploy部分,新增云服务器部署配置,我保留原 GitHub
Pages 配置,然后部署到云服务器同时会部署到GitHub Pages,不影响原访问
1 | deploy: |
我使用宝塔去做相关的配置了,也就是使用 Nginx 建站
然后编辑其中的配置,我把我的配置列出来进行参考
1 | server |
其中不少宝塔相关的内容,核心的就是那个重定向
1 | location / { |
Hexo 是基于单页路由的静态博客,直接刷新非首页(如文章页)会触发 Nginx
404,这行规则会让 Nginx
优先查找对应文件,找不到则重定向到index.html,由 Hexo
前端路由处理,彻底解决刷新 404 问题。
然后宝塔的目录有安全策略,它被设置了不可修改 / 删除的特殊属性
别忘了重启重载nginx配置
出现这一步说明建站成功了
配置对应的仓库
创建一个新的文件夹,作为仓库
然后在云服务器上初始化 git 仓库,注意清空该文件夹,因为 Git 默认禁止向非裸仓库(即有工作区的仓库)推送代码
1 | # 初始化git仓库 |
--bare表示创建的是 裸仓库
然后配置 Git 钩子(hooks)
执行下面的命令,在自动生成的blog.git/hooks
目录下,也就是我们创建的作为仓库的文件夹,创建一个新的钩子文件
1 | vim /edr/ergoutreegal/repo/blog.git/hooks/post-receive |
然后为这个钩子编辑这样的一个命令
1 | git --work-tree=/www/wwwroot/blog.ergoutreegal.cn --git-dir=/edr/ergoutreegal/repo/blog.git checkout -f |
主要用于代码推送到服务器 git 仓库后,自动将代码同步到网站运行目录,前面是指定 Git 的工作目录,即网站实际运行的目录,然后后面是指定 Git 仓库的裸仓库目录
将文件保存(方法参加上文)后,赋予该文件可执行权限:
1 | chmod +x /edr/ergoutreegal/repo/blog.git/hooks/post-receive |
然后可以开始着手配置 SSH 免密登录
1 | # 替换成你的服务器 IP,测试 SSH 连接 |
配置 SSH 免密登录
本地生成 SSH 密钥
1 | # 一路回车,默认生成 C:\Users\你的用户名\.ssh\id_rsa(私钥)和 id_rsa.pub(公钥) |
然后把本地公钥复制到服务器
再次测试 SSH
连接:ssh root@152.136.245.180,能免密登录说明配置成功。







