- 决策文档:架构总览 / 代码源与构建平台选型 / 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/(工作数据不入库)
200 lines
9.4 KiB
Markdown
200 lines
9.4 KiB
Markdown
# 代码源与构建平台选型
|
||
|
||
> 回答的问题:**「想简化是不是只能走 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 核实的官方文档与实测数据。所有配额均引自官方页面,第三方来源已标注。*
|