把博客搬到 EdgeOne Pages:CNB 流水线与自定义域名实战
这个博客最近刚搬了一次家:托管从阿里云 ESA 换到了腾讯云的 EdgeOne Pages,代码放在 CNB 仓库。整个过程踩了几个坑,值得记录下来。
为什么换 EdgeOne Pages
ESA 用着没问题,但博客源码的版本管理和发布是割裂的——改完文件要手动同步到 ESA。换到 EdgeOne Pages 之后链路变成:
写 Markdown → git push → CNB 构建 → EdgeOne Pages 自动发布
版本管理和发布合二为一,回滚就是 git revert,这才是一个静态博客该有的样子。
免费预览域名是个"试用装"
部署成功后 EdgeOne 会给一个形如 xxx-yyy.edgeone.cool 的免费域名。这里有个容易踩的坑:
这类域名是带时效的预览链接,必须携带 eo_token 和 eo_time 参数访问,而且 token 会过期。
具体表现为:
- 直接访问裸域名 → 401 / 404
- 把带参数的链接分享给别人 → 过几小时对方打开就是失效页
- 官方明确说明这类域名无法配置为永久公开链接
所以免费域名只适合部署完成后"看一眼"自检,正式对外必须绑定自定义域名。
绑定自定义域名的正确姿势
以 www.hanyuxin.cn 为例,两步:
第 1 步:EdgeOne 控制台添加域名。 在项目的「自定义域名」里填入域名,如果提示验证归属,按提示去 DNS 服务商加一条 TXT 记录。添加成功后控制台会给一个 CNAME 目标值,形如 xxxx.dns.edgeone.site。
第 2 步:切换 DNS 解析。 在 DNS 服务商处把 www 的 CNAME 记录改为 EdgeOne 给的目标值,TTL 一般 600 秒。生效后 HTTPS 证书自动签发,不需要手动申请。
⚠️ 如果
www之前指向别的站点(我这里原来跑着一个 Vue 博客),切解析的那一刻旧站就下线了。源码还在,想切回改回 CNAME 即可,但要有这个心理准备。
验证生效:
# 查解析是否已指向 EdgeOne
nslookup www.hanyuxin.cn
# 验证 HTTPS 与内容
curl -sI https://www.hanyuxin.cn/ | head -3
CI 配置:把 Token 放进密钥仓库
流水线用 CNB 的 .cnb.yml,部署用 EdgeOne 官方 CLI:
main:
push:
- stages:
- name: 构建
script: npm ci && npm run build
- name: 部署
script: edgeone makers deploy ./dist -n bokeyunying
问题在于 EDGEONE_API_TOKEN 不能明文写在仓库里。CNB 的做法是建一个独立的私有密钥仓库(比如 bokeyunying-secrets),把环境变量放在里面,再由流水线引用:
envs:
- secret-repo: hanyuxin/bokeyunying-secrets # 密钥仓库
这样主仓库可以开源,密钥只有流水线能读到。
小结
- EdgeOne Pages 的免费预览域名只是"试用装",正式使用必须绑自定义域名
- 绑域名 = 控制台加域名 + 改一条 CNAME,证书自动签发
- 密钥独立仓库,主仓库保持干净
- 切换 DNS 前想清楚旧站怎么办
搬家之后,写文章的动线变成了纯粹的三步:npm run new → 写 → push。剩下的交给流水线。