Files
blog/代码源与构建平台选型.md
T
zqlit e0218b42bb docs: 迁 CNB 前的架构决策文档 + 构建骨架
- 决策文档:架构总览 / 代码源与构建平台选型 / 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/(工作数据不入库)
2026-10-04 12:40:17 +08:00

200 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 代码源与构建平台选型
> 回答的问题:**「想简化是不是只能走 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 做的事)
```yaml
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 条,按重要性排序)
1. **EdgeOne 免费版的流量额度**。官方「限制与配额」页**没有列「流量」这一项**;第三方说法互相矛盾(一处说 50GB/月,一处说不限量)。
按你的站点规模估算:单页 1–3MB,50GB/月 ≈ 2–5 万次浏览 —— 个人博客大概率够,
但**那个 12.8MB 的 mp4 如果被反复播放会吃掉不少**。这一条开工前必须先确认。
2. **CNB 是否可直接作为 EdgeOne Pages 的 Git 源导入**。第三方文档说支持,官方只在插件路径里明确。
不影响可行性(走插件路径必然可行),只影响配置方式。
3. **境内用国际站 `-a global` 还是国内站 Makers 独立项目**。一次实验可定论。
---
## 八、最小验证(成本极低,建议先做)
不用改任何现有东西,**一次性验证整条链路是否成立**:
1. 建一个 CNB 仓库(微信扫码,2 分钟)
2. 往里放一个最小 Hugo 站 + 上面的 `.cnb.yml`(或先放个 hello world)
3. 拿一个 EdgeOne API Token(你已经有),跑一次 push
4. 看三件事:**CNB 能不能构建** → **能不能部署到 EdgeOne** → **国内机实测访问延迟**
这一步跑通,等于确认了整条路;跑不通,损失是 20 分钟,不是 30 天。
---
*本文档基于 2026-10-04 核实的官方文档与实测数据。所有配额均引自官方页面,第三方来源已标注。*