从零把这个博客放到互联网上:GitHub Pages + 自定义域名
把仓库推到 GitHub、开通 Pages、配置 DNS、绑定域名、开启 HTTPS,一步一步走完,中途的坑和排查方法也一并记下。
这篇是给”已经拿到域名、但还没上线”的自己写的操作手册。整体分五步,每一步都有验证方法,上一步没验证通过,不要急着做下一步。
全貌:三条腿
先建立一个正确的心理模型:
- 代码仓库:文章和模板存在 GitHub 的仓库里
- 构建服务:GitHub Pages 把仓库里的 Jekyll 源码编译成静态 HTML
- 域名解析:把
你的域名指向 GitHub Pages 的服务器
三者缺一不可。常见故障大多是”仓库推了但 Pages 没开”或者”Pages 开了但 DNS 没生效”。
前提:本文假设你把站点放在用户主页仓库里,仓库名必须是
你的用户名.github.io。这样博客直接占用根路径,域名配置最简单。
第一步:把文件推上 GitHub
先在 GitHub 网页上新建一个空仓库,名字填 你的用户名.github.io,不要勾选”添加 README”。然后在本机执行:
cd 你的博客目录
git init
git add .
git commit -m "初始化博客"
git branch -M main
git remote add origin https://github.com/你的用户名/你的用户名.github.io.git
git push -u origin main
验证:刷新仓库页面,能看到 _config.yml、_posts、index.html 这些文件。
第二步:开启 Pages
进入仓库的 Settings → Pages:
- Source 选择
Deploy from a branch - Branch 选择
main,目录选/ (root) - 点击 Save
等 1~3 分钟,Pages 页面顶部会出现 Your site is live at https://你的用户名.github.io/。
这时先用 GitHub 给的地址访问一次。这一步能打开,说明仓库和构建没问题,后面再折腾域名才有意义。
如果 5 分钟还没好,去 Actions 标签页看
pages build and deployment的状态;红色叉号点进去看日志,最常见的原因是_config.yml语法错误。
第三步:配置 DNS
先明确你要用哪种地址。两种都配是最稳的做法:
方案 A:主域名 example.com(推荐)
在域名服务商的 DNS 管理页面,添加 4 条 A 记录,主机记录都填 @:
| 类型 | 主机记录 | 记录值 |
|---|---|---|
| A | @ | 185.199.108.153 |
| A | @ | 185.199.109.153 |
| A | @ | 185.199.110.153 |
| A | @ | 185.199.111.153 |
方案 B:子域名 www.example.com 或 blog.example.com
添加 1 条 CNAME 记录:
| 类型 | 主机记录 | 记录值 |
|---|---|---|
| CNAME | www | 你的用户名.github.io |
注意:CNAME 的记录值只写到
你的用户名.github.io,末尾不要加.,也不要加https://。
顺手加一条 www 跳转
如果你用主域名,通常会再加一条 www 的 CNAME 指向 你的用户名.github.io,然后在 Pages 设置里勾选强制跳转。GitHub 会自动把 www.example.com 301 到 example.com(或反过来,取决于你在 Pages 里填的主域名)。
配置完成后,用命令检查是否生效(DNS 一般 10 分钟到 1 小时):
nslookup example.com
nslookup www.example.com
第四步:绑定域名
- 仓库根目录新建一个文件
CNAME(没有后缀),只写一行:
example.com
- 回到 Settings → Pages → Custom domain,填
example.com,点 Save
保存后,GitHub 会自动把 CNAME 文件改写一遍(所以你本地看到的可能被覆盖,这是正常的)。
- 等 DNS 检查通过,勾选 Enforce HTTPS
验证顺序:
http://example.com能打开https://example.com能打开,且地址栏有小锁https://www.example.com会跳转到主站- 手机 4G 网络也能打开(排除本地缓存干扰)
第五步:把域名写进 _config.yml
这一步最容易被忘,忘了也不会报错,但分享到社交平台时缩略图会挂掉。
url: "https://example.com"
baseurl: ""
改完提交:
git add _config.yml
git commit -m "配置正式域名"
git push
常见问题排查
打开是 404
- 仓库是不是叫
用户名.github.io?拼写是否完全一致? - Pages 的 Source 是不是选了
main分支的/ (root)? - 仓库里有没有
index.html或index.md?
打开显示的是 README
Jekyll 会把仓库根目录的 README.md 当成首页,除非你已经有了 index.html。本站就带了 index.html,如果它不在,检查是不是被误删了。
域名打不开,GitHub 地址正常
几乎都是 DNS 问题。用 nslookup 看解析结果对不对;如果服务商支持,把 TTL 调小(比如 600 秒)再等一会儿。
提示 “Domain is not properly formatted”
CNAME 文件里只能有一行纯域名,不能有 https://、不能有路径、不能有逗号。
HTTPS 选项是灰的
说明 GitHub 还没完成域名验证,通常再等几十分钟即可。如果超过 24 小时,检查 DNS 里有没有多余的 AAAA 记录或冲突的 CNAME。
上线之后
- 每推送一次
main分支,GitHub 会自动重新构建,通常 1 分钟内生效 - 在 Settings → Pages 页面可以看到每次构建的状态
- 提交文章前建议先本地预览(见
docs/部署指南.md的”本地预览”一节)
写完这些,网站就算是真正属于你了。
本文采用 CC BY-NC-SA 4.0 许可协议。 转载请注明作者与出处。