agentd

阿里云 ESA 博客部署

我昨天把这个博客搬上了阿里云 ESA。

我本来想用 Cloudflare Pages。可读者主要在国内,Cloudflare 免费版在内地没有节点,企业版的中国网络也不带 Pages。

用下来,ESA 是国内最像 Cloudflare 的一个。免费版放个人博客够用,国内打开也快,推送后约 40 秒上线,证书自动续,到现在没花钱。最大的门槛是要备案,不过个人博客备案基本都能过,问题不大。

两边的免费版差在这几处

ESA 是阿里云的边缘安全加速,对标 Cloudflare,里面的「函数和 Pages」对应 Pages 和 Workers。下表是我对着两边 2026 年 10 月的官方文档整理的。

ESA 免费版 Cloudflare 免费版
中国内地节点 有,要求 ICP 备案 没有
公开的默认域名 没有,测试域名要 token 才能访问 <项目>.pages.dev
分支预览 非生产分支只构建,不部署 每个分支、每次提交都有预览地址
Git 平台 GitHub GitHub、GitLab
构建次数 没公布 每月 500 次
单项目文件数 2,000 20,000
函数免费请求 每账号每天 10 万次 每账号每天 10 万次
函数单次 CPU 时间 没公布 10 ms
KV 没有免费额度,按量付费 每天读 10 万次、写 1,000 次
对象存储、数据库 没有,对象存储要另开 OSS R2 存储 10 GB,D1 存储 5 GB
免费证书 Let’s Encrypt,到期前 30 天自动续签 Universal SSL,自动续签
接入方式 NS、CNAME 都免费 NS;Pages 的子域名可以从外部 CNAME 过来
免费站点数 每账号 1 个 文档没写上限

表中数据来自 ESA 的套餐对比、函数和 Pages、函数和 Pages 计费、免费版、使用限制、增值服务费;Cloudflare 的 Pages 限制、Workers 定价、Workers 限制、KV 定价、R2 定价、D1 定价、部分接入。均于 2026-10-03 读取。

最该看的是第一行。ESA 的加速区域有三个选项,选中国内地或全球都要求 ICP 备案。选全球(不包含中国内地)不用备案,但 ESA 不会用内地节点服务这个站,国内读者照样走境外,跟用 Cloudflare 没有区别。

文档里还有两条限制容易漏看。免费版的官方定位是「仅供个人、企业的非核心业务测试使用,不支持大流量业务」,带宽和请求速率有限制,具体数字没给。另一条对所有套餐都适用,遭受攻击,或者流量突增又没提前报备,域名会被切进沙箱,可用节点大幅减少,要恢复得买企业版。想要能预期的上限,最低一档付费的基础版是 9.9 元一个月,含 50 GB 流量。

搭起来是五步

  1. 准备一个已备案的域名。刚备案成功的,文档建议过 8 小时再添加站点。

  2. 在 ESA 控制台领免费版,添加站点,加速区域选中国内地或全球。接入方式有 NS 和 CNAME 两种,想让不带 www 的根域名也打开博客,就选 NS,因为根域名上有邮箱的 MX 记录时不能再加 CNAME。从别家 DNS 迁过来的,先把旧记录导进 ESA 逐条核对,邮箱的 MX 和 TXT 尤其要对上,再去注册商改 NS。

  3. 在仓库根目录放一个 esa.jsonc,告诉 ESA 怎么构建。下面是 Astro 博客用的配置。

    {
      "name": "agentd-blog",
      "installCommand": "npm install",
      "buildCommand": "npm run build",
      "assets": {
        "directory": "./dist",
        "notFoundStrategy": "404Page"
      }
    }

    Node 版本写在 package.json 的 engines.node,只写主版本号,比如 "22"。

  4. 在控制台的函数和 Pages 里导入 GitHub 仓库。私有仓库要搜名字才会出现。高级配置里的「静态资源目录」默认是空的,要填 ./dist。

  5. 把域名绑定到这个项目,申请免费证书,再加一条强制 HTTPS 的规则。

做完这些,以后每次推送到 main,ESA 都会自动构建发布。

可能卡住的三个地方

根域名可能绑不上。我按文档的域名绑定方式把根域名绑到项目时,接口一直返回 DependedByOthers,错误信息只让稍后重试,原因我没查清。后来的绕法是在根域名建一条开代理的 A 记录,源站随便填一个占位地址,请求交给 Pages 处理,不会回源。再用路由功能把这个主机名交给项目,同时关掉异常回源。免费版有 5 条路由额度。

Pages 绑定的域名,在记录列表接口 ListRecords 里查不到,ESA 把它存成了一条特殊记录。找不到它的时候,别再加一条同名记录。

没有能分享的预览地址。项目自带的测试域名从 2026 年 4 月起要 token 才能访问,非生产分支也只构建不部署。想让别人看草稿,得自己再建一个项目,绑一个子域名。

这篇文章也是这么发出来的,写完推送到 main,约 40 秒后就能在 agentd.cn 打开。