这个博客最近刚搬了一次家:托管从阿里云 ESA 换到了腾讯云的 EdgeOne Pages,代码放在 CNB 仓库。整个过程踩了几个坑,值得记录下来。

为什么换 EdgeOne Pages

ESA 用着没问题,但博客源码的版本管理和发布是割裂的——改完文件要手动同步到 ESA。换到 EdgeOne Pages 之后链路变成:

text
写 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 即可,但要有这个心理准备。

验证生效:

bash
# 查解析是否已指向 EdgeOne
nslookup www.hanyuxin.cn

# 验证 HTTPS 与内容
curl -sI https://www.hanyuxin.cn/ | head -3

CI 配置:把 Token 放进密钥仓库

流水线用 CNB 的 .cnb.yml,部署用 EdgeOne 官方 CLI:

yaml
main:
  push:
    - stages:
        - name: 构建
          script: npm ci && npm run build
        - name: 部署
          script: edgeone makers deploy ./dist -n bokeyunying

问题在于 EDGEONE_API_TOKEN 不能明文写在仓库里。CNB 的做法是建一个独立的私有密钥仓库(比如 bokeyunying-secrets),把环境变量放在里面,再由流水线引用:

yaml
envs:
  - secret-repo: hanyuxin/bokeyunying-secrets  # 密钥仓库

这样主仓库可以开源,密钥只有流水线能读到。

小结

  • EdgeOne Pages 的免费预览域名只是"试用装",正式使用必须绑自定义域名
  • 绑域名 = 控制台加域名 + 改一条 CNAME,证书自动签发
  • 密钥独立仓库,主仓库保持干净
  • 切换 DNS 前想清楚旧站怎么办

搬家之后,写文章的动线变成了纯粹的三步:npm run new → 写 → push。剩下的交给流水线。