- 决策文档:架构总览 / 代码源与构建平台选型 / CNB构建落地方案 / EdgeOne双区域 / Gitee / 阿里云ESA / 精简方案 - CNB 构建骨架:deploy/Dockerfile、bin/linux/hugo (84MB,linux/amd64 extended 0.128.2,供 CNB 容器 COPY 用) - scripts/setup-cnb-remotes.sh:双远端切换(CNB 主仓 + GitHub 备份) - .gitignore 补 .workbuddy/(工作数据不入库)
9.4 KiB
代码源与构建平台选型
回答的问题:「想简化是不是只能走 EdgeOne?」
结论先行:不是"只能",但在你当前的约束下,EdgeOne 是最省事的那一个。 而且真正要换的不是 CDN —— 是**「托管构建」**。EdgeOne 恰好一条顶两条(构建 + 分发), 这是 Cloudflare 和阿里云 ESA 都做不到的。
另外有一个会改变结论的数字:Gitee 免费版单仓库上限 500MB,而你的
.git是 588MB。 所以国内代码源的第一选择不是 Gitee,而是 CNB。
一、把问题重新定义一次
你说「之前是 GitHub Actions 部署,用得很稳,但账号被标记了」。
那么现在这一整套东西,本质是你自己复刻了一套 GitHub Actions:
| GitHub Actions 原来的角色 | 你现在用自建件替代 |
|---|---|
| github.com(代码托管) | 自建 Gitea |
| GitHub 的 runner(构建执行) | act_runner |
upload-artifact(产物传递) |
Gitea artifact → COS → 中转机 |
| Pages 直连(产物落地) | sync.sh → 又拍云 → 多吉云 |
所以要"简化回去",正确的问题是:找一个托管的构建服务,把这四个自建件一起替掉。
CDN 选谁(EdgeOne / CF / ESA / 多吉云)是另一个问题,它不解决构建复杂度。
二、三条硬约束(都核实过,不是印象)
| 约束 | 实测/官方值 | 影响 |
|---|---|---|
| 你的仓库体积 | .git 588MB / 955 提交;工作区 803MB |
决定代码源能不能装下 |
| 你的产物体积 | public 424MB / 3267 文件,最大单文件 12.8MB |
决定托管平台的文件数/单文件门槛 |
| Hugo 版本 | 0.128.2 | 托管构建需能指定版本 |
| 备案 | 鄂ICP备2022015735号-1 | 境内加速的前提,你已具备 |
三、★ 三个关键发现
发现 1:EdgeOne Pages 官方支持 Gitee / GitLab 作为 Git 源
官方文档原文:「Pages 目前支持 GitHub, GitLab, Gitee 等 Git 提供商的接入」。 第三方 Nitro 部署文档也写:「EdgeOne supports deployments from GitHub, GitLab, Gitee, and CNB」。
这条直接决定了「能不能找回 GitHub Actions 那种简单感」—— 能。 代码推到国内托管平台 → EdgeOne 自动拉取、自动构建、自动部署。不需要你自己的 runner。
发现 2:Gitee 免费版装不下你的仓库
Gitee 官方配额页(help.gitee.com/account/usage-quota):
| 项 | 社区版免费额度 |
|---|---|
| 单仓库容量 | ≤ 500 MB |
| 单文件 | ≤ 50 MB |
| 用户总仓库容量 | 5 GB |
你的 .git 是 588MB → 超了 17.6%。 推上去会被锁定推拉服务。
(Gitee 提供 git-repo-clean 瘦身工具可以降到 500MB 以下,但那是额外工作。)
发现 3:CNB 是更合适的国内代码源 —— 而且和 EdgeOne 有官方集成
CNB(Cloud Native Build,cnb.cool) 是腾讯的 AI Native Git 平台,社区版免费:
| 项 | 免费额度 |
|---|---|
| 仓库存储 | 100 GiB(你的 588MB 毫无压力) |
| 对象存储 | 100 GiB |
| 云原生构建 | 160 核时/月 |
| 云原生开发 | 1600 核时/月 |
| 登录方式 | 微信扫码 |
160 核时换算:4 核跑 10 分钟 = 4 × (10/60) ≈ 0.67 核时 → 一个月能跑 约 240 次构建。你今天按每月 60–90 次算,用掉不到 40%。
而且 EdgeOne 官方专门写了 CNB 插件文档(pages.edgeone.ai/document/using-cnb-plugin):
在 CNB 流水线里
npm run build→npx edgeone pages deploy -n <项目名> -t $EDGEONE_API_TOKEN
这条路官方背书,100% 可行。
四、四种组合对比
| 代码源 | 构建在哪 | 产物去向 | 自维护机器 | 免费额度 | 卡点 | |
|---|---|---|---|---|---|---|
| ① CNB + EdgeOne Pages ★ | CNB | CNB 流水线(托管) | EdgeOne 国际 + 国内 | 0 台 | 100GiB + 160 核时/月 + 500 构建/月 | 需绑微信/腾讯云账号 |
| ② Gitee + EdgeOne Pages | Gitee | EdgeOne Git 集成(4核6G) | EdgeOne 国际 + 国内 | 0 台 | 5GB / 500 构建/月 | 仓库必须先瘦身到 500MB 以下 |
| ③ GitLab.com + CF Pages | GitLab.com | CF 侧 | 仅 CF(产物拿不出来) | 0 台 | CF 500 次/月 | 境内无解;CF 国内访问慢 3 倍 |
| ④ 保留 Gitea + EdgeOne Pages | 自建 Gitea(mirror→CNB) | CNB | EdgeOne | 1 台(Gitea) | 同 ① | 没砍干净;但写作后台零改动 |
为什么推荐 ①:唯一一个同时满足「代码源在国内且装得下仓库」+「构建托管」+「境内外都能落」+「免费」的组合。
五、推荐形态
写作侧 构建(托管) 分发(托管)
┌────────────────────┐ ┌──────────────────────────┐ ┌──────────────────────────┐
│ write-server │ │ CNB(cnb.cool) │ │ EdgeOne 国际站 Pages │
│ (本地/服务器) │ push │ 免费 100GiB / 160 核时/月 │ │ → usj.cc 境外解析 │
│ 直接写 .md + git ├─────────▶│ │ │ │
│ 只改 remote URL │ │ .cnb.yml: │──▶│ EdgeOne 国内站 Makers │
└────────────────────┘ │ hugo --minify │ │ → 备案域名 境内解析 │
│ edgeone pages deploy │ │ │
或本地 hugo 后手动 push ─────▶│ (境外 + 境内 两个项目)│ └──────────────────────────┘
└──────────────────────────┘
.cnb.yml 骨架(复刻你现在 deploy.yml 做的事)
main:
push:
stages:
- name: 构建 Hugo 站点
image: klakegg/hugo:0.128.2-ext
script: |
hugo --minify --gc
- name: 部署境外
image: node:20
script: |
npx edgeone pages deploy ./public \
-n hugo-blog-overseas -t $EDGEONE_TOKEN_INTL -a overseas
- name: 部署境内
image: node:20
script: |
npx edgeone pages deploy ./public \
-n hugo-blog-cn -t $EDGEONE_TOKEN_CN -a global
⚠️
-a global(含中国大陆)目前只在国际站文档里明确,且官方文档自相矛盾。 另一条稳妥路径是国内站 Makers 单独建一个项目(账号体系与国际站独立), 绑你的备案域名。这个需要实测一次定论。
六、砍掉 / 保留
砍掉(9 项)
| 砍掉 | 原因 |
|---|---|
| act_runner | CNB 托管构建取代 |
| 广州中转机 | 产物直接落在 EdgeOne,不需要中转 |
sync.sh 轮询 |
同上 |
| 腾讯云 COS | 同上(砍 COS 这件事本身也随之结束) |
| Gitea artifact 链 | 那串 v3/v4 兼容坑一起消失 |
8 处 github.server_url 兼容分支 |
不再需要伪装成 GitHub |
| 又拍云 | EdgeOne 国内站直接 serve 境内 |
| 多吉云 | 同上(境内 CDN 层) |
| 三套通知里的两套 | 保留一套即可 |
发布链路:7 环节 → 3 环节(写作 → 构建 → 上线) 自维护机器:3 台 → 0 台 厂商:Gitea自建 + COS + 又拍云 + 多吉云 + EdgeOne + 失效的 GitHub → CNB + EdgeOne(同为腾讯体系)
保留
- Hugo + content + themes —— 完全不动
- blog-admin(artalk-cf) —— 本来就跑在 CF Workers,一行不改
- write-server —— 几乎不用改,只把
origin的 remote URL 指向 CNB。 CNB 是标准 git + 提供统一 HTTPS Token,lib/git.ts的git pull --rebase/git push逻辑照常工作
七、待确认(3 条,按重要性排序)
- EdgeOne 免费版的流量额度。官方「限制与配额」页没有列「流量」这一项;第三方说法互相矛盾(一处说 50GB/月,一处说不限量)。 按你的站点规模估算:单页 1–3MB,50GB/月 ≈ 2–5 万次浏览 —— 个人博客大概率够, 但那个 12.8MB 的 mp4 如果被反复播放会吃掉不少。这一条开工前必须先确认。
- CNB 是否可直接作为 EdgeOne Pages 的 Git 源导入。第三方文档说支持,官方只在插件路径里明确。 不影响可行性(走插件路径必然可行),只影响配置方式。
- 境内用国际站
-a global还是国内站 Makers 独立项目。一次实验可定论。
八、最小验证(成本极低,建议先做)
不用改任何现有东西,一次性验证整条链路是否成立:
- 建一个 CNB 仓库(微信扫码,2 分钟)
- 往里放一个最小 Hugo 站 + 上面的
.cnb.yml(或先放个 hello world) - 拿一个 EdgeOne API Token(你已经有),跑一次 push
- 看三件事:CNB 能不能构建 → 能不能部署到 EdgeOne → 国内机实测访问延迟
这一步跑通,等于确认了整条路;跑不通,损失是 20 分钟,不是 30 天。
本文档基于 2026-10-04 核实的官方文档与实测数据。所有配额均引自官方页面,第三方来源已标注。