EdgeOne 部署规划设计
版本 0.2(实施记录)· 2026-09-25 · 状态:阶段1已实施——部署成功,大陆验收不达标(平台政策原因),待用户决策 目标:为研报静态站增加腾讯云 EdgeOne Pages 发布通道,形成
pages.dev(海外/备份)+ EdgeOne(大陆主力)双通道,解决 GitHub Pages 已移除、pages.dev 大陆可达性不稳的问题。 上位文档:publishing.md(发布矩阵总览)。
0. 阶段1 实施记录(2026-09-25)
部署事实:
- 命令:PAGES_SOURCE=skills edgeone makers deploy data/output/site -n xgb-wiki-site --json(注意 edgeone pages 已废弃;--area 默认 global=大陆+海外,无需指定)
- 项目:xgb-wiki-site,Project ID makers-kvbfvyfny1yr,部署 ID dppv26k6phri(Production 环境),控制台 https://console.cloud.tencent.com/edgeone/pages/project/makers-kvbfvyfny1yr/deployment/dppv26k6phri
- 内容:--no-content 稳妥版(1693 文件/46MB),线上抽查确认研报页带"正文未包含"标记 ✓
- 访问 URL:https://xgb-wiki-site-qgkowg18.edgeone.cool?eo_token=...&eo_time=...(带 token 预览链接)
关键发现(推翻本规划前提):
1. ~~*.edgeone.app 免备案公开默认域~~ —— 实测 xgb-wiki-site.edgeone.app 返回 404(泛解析 CNAME 到 pages.openedge.sched.ovscdns.com,但无项目绑定该主机名);Makers CLI 部署只产出 token 门控的 .edgeone.cool 预览链接。
2. 官方域名管理文档明确:默认域名在中国大陆只能通过系统生成的预览链接访问,链接 3 小时有效(过期 401),控制台"项目概览→预览"按钮可续;非大陆网络可直接访问;大陆稳定访问必须绑定已 ICP 备案的自定义域名(https://pages.edgeone.ai/zh/document/domain-overview)。
3. 本机环境注意:Clash 类代理 fake-IP 模式劫持全部 DNS(含指定公共 DNS),实测真实 IP 须走 DoH(doh.pub)+ curl --resolve。
阶段1验收结论:① 部署成功、内容一致 ✓;② 大陆免 token 直连 ✗(平台政策,非网络问题)——按 §4 终止性条款,方案在默认域形态下不达标。出路二选一:(a) 用户有已备案域名 → 绑定自定义域名走大陆节点;(b) 无备案域名 → EdgeOne 通道仅作海外/预览备用(pages.dev 地位对调),或终止本通道。
1. 背景与动机
| 现状 | 问题 |
|---|---|
线上唯一通道 = Cloudflare Pages(xgb-wiki-site.pages.dev),push master 由 CI 自动发布 |
pages.dev 生产域名当前大陆直连可达,但属非承诺的灰色可达(Cloudflare 无国内节点,随时可能劣化) |
| GitHub Pages / Workers 通道已先后移除 | workers.dev 被 DNS 污染/SNI 阻断实证;github.io 大陆时通时断 |
本地手动通道 scripts/deploy/deploy_site.py 仅 wrangler 单目标 |
无 --target 参数,扩展点已具备 |
为什么是 EdgeOne Pages:腾讯云静态托管(对标 Cloudflare Pages),免费档、免服务器、默认域 *.edgeone.app 免 ICP 备案、腾讯国内边缘节点在大陆访问质量上是目前所有选项中最稳的一档。
不选 EdgeOne CDN 站点接入(另一条产品线):那需要自建公网源站;本项目动态部分依赖内网 MySQL,不可暴露,静态托管才是正解。
2. 方案总览
flowchart LR
subgraph 构建(一次)
B["python scripts/build/build_static_site.py<br/>--days 90 [--no-content]<br/>→ data/output/site/(约13MB/1600文件)"]
end
subgraph 发布通道
CF["Cloudflare Pages<br/>xgb-wiki-site.pages.dev<br/>(CI 自动 + 本地 wrangler)"]
EO["EdgeOne Pages<br/>xgb-wiki-site.edgeone.app<br/>(本设计新增)"]
end
B -->|"npx wrangler pages deploy(现状)"| CF
B -->|"edgeone pages deploy(新增)"| EO
原则:一次构建、多通道分发——两通道吃同一份 data/output/site/ 产物,保证内容一致,禁止各建各的构建。
3. 关键设计决策
3.1 接入方式:本地 CLI 起步,CI token 演进
先辨析腾讯的三个易混工具(截至 2026-09):
| 工具 | 面向 | 能力 | 与本项目的关系 |
|---|---|---|---|
edgeone CLI(npm i -g edgeone) |
EdgeOne Pages 静态托管 | edgeone pages deploy <目录> 上传构建产物,产出 *.edgeone.app |
✅ 部署主路径(本节方案 A/B 的载体) |
| EdgeOne Pages MCP(官方 MCP Server) | EdgeOne Pages 静态托管 | 把 HTML 文件/文件夹发布为网站,供 AI agent 调用(Cursor/Claude/ZCode 等可配) | ✅ 可选替代:配到本机 MCP 后由 agent 端到端"构建→部署",效果等价 CLI |
| EdgeOne Skill(CodeBuddy/ClawHub 等 AI 插件) | EdgeOne CDN 站点运维 | 域名接入向导、缓存刷新/预热、证书管理、安全防护(IP 拉黑/模板审计)、流量周报/日志分析 | ⚠️ 不做 Pages 部署(其"站点接入"是 CDN 接入、需自有源站)。互补价值在阶段4+:自定义域名接入与证书、部署后缓存刷新、流量简报当作大陆访问质量监控 |
(EdgeOne Skill 与 Pages MCP 授权均为浏览器 OAuth,不向 AI 暴露 SecretId/SecretKey;变更类操作执行前需确认。)
| 方案 | 说明 | 结论 |
|---|---|---|
| A. 本地 CLI 上传(阶段1采用) | npm i -g edgeone → edgeone login(浏览器授权)→ edgeone pages deploy data/output/site --project-name xgb-wiki-site |
✅ MVP 最快路径,与现有 wrangler 手动通道同构,内容版本完全可控 |
| B. CI + API Token(阶段2) | GitHub Actions 中用 EDGEONE_API_TOKEN(Secrets)调 CLI/API 上传,push master 双通道自动发布 |
✅ 目标态;前提:验证 CLI 支持 token 环境变量鉴权(登录态不进 CI),实现时核对官方文档 |
| C. Git 仓库集成 | EdgeOne 控制台绑定 GitHub 私有仓库自动构建 | ❌ 不采用:私有库需授权给腾讯侧;构建环境要装 Python 3.13 + 拉取 85MB db,慢且重;内容策略(--no-content)失控 |
3.2 域名策略
- 阶段1 用默认域:项目命名
xgb-wiki-site→xgb-wiki-site.edgeone.app,免备案直接用 - 注意区分:
*.edgeone.app(正式默认域,公开可访问)≠*.edgeone.cool(预览临时域,带?eo_token=全站鉴权,仅预览用) - 阶段3(可选)自定义域名:绑定自有域名需 CNAME 到 EdgeOne;启用中国大陆节点必须已有 ICP 备案。无备案域名则止步默认域(
edgeone.app本身腾讯已备案,大陆可直接访问)
3.3 内容策略(⚠️ 需用户拍板的决策点)
pages.dev 通道当前发布全量版(含付费研报正文,用户此前已授权该模式发布到海外)。EdgeOne 是国内云,对版权/合规内容的平台审查显著严于 Cloudflare,全量付费正文放国内 CDN 存在被处置风险。
| 选项 | 内容 | 建议 |
|---|---|---|
| 稳妥版(建议默认) | EdgeOne 通道用 --no-content(标题/题材/个股/观点结构在,正文摘要去掉或截断) |
大陆主力通道保安全,看正文走 pages.dev |
| 全量版 | 与 pages.dev 完全一致 | 用户明确授权后可切换,一行参数 |
实现上无需二选一死:deploy_site.py 加 --content/--no-content 作用到各通道的映射参数即可。
3.4 deploy_site.py 改造设计
python scripts/deploy/deploy_site.py [--days 90] [--no-content] [--target auto|cf|edgeone|all]
auto = 交互式选择;all = 双通道
- 构建一次 → 按 target 依次分发;单通道失败不阻塞其他通道(报告失败项、退出码非 0,支持
--target edgeone单独重试) - edgeone 分发 =
edgeone pages deploy data/output/site --project-name xgb-wiki-site(命令语法以实测为准,CLI 升级可能调整) - 前置检查:
edgeone --version不存在时提示npm i -g edgeone;登录态失效时提示edgeone login(wrangler OAuth 多实例并发 CSRF 的教训同样适用:单实例操作,避免并发部署)
3.5 CI 集成设计(阶段2)
.github/workflows/deploy-site.yml 追加步骤(在现有 Cloudflare 步骤之后):
- name: 发布到 EdgeOne Pages
run: npm install -g edgeone && edgeone pages deploy data/output/site --project-name xgb-wiki-site
env:
EDGEONE_API_TOKEN: ${{ secrets.EDGEONE_API_TOKEN }} # 机制待实测确认
双通道串行部署、互不阻塞(continue-on-error + 最后汇总),避免一个平台故障导致整体 CI 红。
4. 实施计划与验收
| 阶段 | 内容 | 验收标准 |
|---|---|---|
| 0 准备 | edgeone.ai 注册(腾讯云账号)/ npm i -g edgeone / edgeone login |
CLI 登录态就绪 |
| 1 MVP | 本地:build → CLI 部署 → 拿到 xgb-wiki-site.edgeone.app;大陆直连实测(curl/浏览器无代理) |
① 域名 200 可访问;② 大陆直连可达(核心验收,不可达则本方案终止,回退评估自定义域名或其他通道);③ 内容抽查与构建产物一致 |
| 2 脚本化 | deploy_site.py 加 --target;docs 同步;跑通 --target all |
双通道一键发布可重复执行 |
| 3 CI | 验证 token 鉴权 → workflow 加 EdgeOne 步骤 + Secrets | push master 双通道自动更新,CI 绿 |
| 4 可选 | 自定义域名(需备案域名)、Pages Functions 动态能力(如未来 NL 查询要真后端)、访问控制/WAF 规则 | 按需 |
5. 风险与对策
| 风险 | 对策 |
|---|---|
edgeone.app 默认域大陆可达性不达预期 |
阶段1 设为终止性验收点;不达标不投入后续阶段 |
| 免费额度(流量/构建次数)政策变动或超限 | 个人站量级(13MB/次、日常访问)远低于免费档;部署频率受数据同步节奏约束;超限再评估付费 |
| 付费正文在国内平台的合规处置风险 | 默认走 --no-content 稳妥版(§3.3),全量版需用户每次明确授权 |
| CLI 浏览器登录态过期/多实例冲突 | 部署脚本前置检查登录态;单实例操作;CI 阶段切换 token 鉴权 |
| ~1600 文件目录上传耗时/失败重传 | CLI 目录上传实测;失败重跑(Pages 增量上传按文件哈希,重传成本低) |
| 三方 CLI 命令变更 | deploy_site.py 中 EdgeOne 命令集中一处,便于跟进 |
6. 与现有发布矩阵的关系
实施完成后矩阵为:
| 通道 | 域名 | 定位 | 触发 |
|---|---|---|---|
| Cloudflare Pages | xgb-wiki-site.pages.dev | 海外访问 / 全量版 / 备份 | CI(push master)+ 本地 |
| EdgeOne Pages | xgb-wiki-site.edgeone.app | 大陆主力(内容策略见 §3.3) | 本地(阶段2 后 CI) |
| ~~GitHub Pages~~ | ~~seuzxh.github.io/xgb-wiki-site~~ | 已移除 | — |