Skip to content

Releases: shuma12303/cf-deploy-panel

云端部署器 v1.1.1

Choose a tag to compare

@shuma12303 shuma12303 released this 21 Oct 12:24

云端部署器 v1.1.1

一次针对「部署可靠性」的专项修复:解决 面板提示部署成功、打开链接却打不开 / 打开是别人的网站 这一组问题。

由 数码解码 独立开发并维护。


一、这次到底修了什么

v1.1.0 及更早版本的部署链路,有三处与 Cloudflare 官方 wrangler 的实现不一致。三者叠加,会表现出三种典型症状:

你会看到的现象 真正的根因
xxx.pages.dev 返回 400 Bad Request 静态资源哈希用了 SHA-256,而官方用的是 BLAKE3
部署完打开是空白 / Worker 完全不生效 _worker.js 同时进了 manifest 和 _worker.bundle,而这两者互斥
打开链接看到的是别人的网站 项目名被 Cloudflare 自动改名(chongxin → chongxin-4k7),面板却仍用旧名字拼地址

v1.1.1 把这三条全部对齐官方实现,并在部署前后补上了多重校验 —— 宁可报错停下,也不再把失败包装成成功。


二、修复清单

1. 项目名被占用时,访问链接用错了名字(打开是别人的网站)

*.pages.dev 子域名是全球唯一的,不按账户隔离。

当你输入 chongxin 而该名字已被他人占用时,Cloudflare 不会报错,而是把项目建成 chongxin-4k7,真实名字放在返回对象的 name 字段里。旧版面板仍用你输入的 chongxin 拼访问地址,于是 https://chongxin.pages.dev/你的UUID 打开的是别人的项目——而部署其实已经成功了。

现在一律以 API 返回的真实项目名为准:upload-token、deployments、域名绑定、线上自检、返回给前端的链接全部同步,并在日志与结果里明确提示:

注意:项目名「chongxin」在 pages.dev 上已被占用,Cloudflare 实际分配为「chongxin-4k7」。
访问地址一律以「chongxin-4k7」为准。

2. 资源哈希算法对齐官方 BLAKE3

旧版用 SHA-256 计算 Pages 静态资源哈希,官方 wrangler 用的是:

blake3(base64(文件内容) + 扩展名).toString("hex").slice(0, 32)

算法不一致会导致 Cloudflare 无法命中资源,部署后的项目直接返回 400 Bad Request。

现已内置纯 JS 的 BLAKE3 实现(零外部依赖,不增加包体积),并与官方 blake3-wasm 做了逐字节比对,31 组固定用例全部一致。

3. _worker.js 不再进入 manifest

官方 wrangler 打包静态资源时会主动忽略 _worker.js——它由 _worker.bundle 承载,两者互斥(官方文档原文:Mutually exclusive with _worker.js. Cannot specify both)。

旧版把它同时写进 manifest 又提交 _worker.bundle,触发 Cloudflare 拒绝请求,这是「部署成功但项目 400 打不开」的直接原因。

现在按官方忽略清单过滤:

_worker.js  _redirects  _headers  _routes.json
functions  .DS_Store  node_modules  .git  .wrangler

而 _headers / _redirects / _routes.json 改为在部署表单里单独上传。

4. 跨账户自定义域名被拦截(错误码 1014)

旧版读取全部账户的 Zone,Account 与 Zone 各自独立取第一个,从不校验归属。当域名 Zone 与 Pages 项目不在同一 Cloudflare 账户时,Cloudflare 会拒绝这个跨账户 CNAME,访问返回 403 / error code 1014,而部署日志却显示"部署完成"。

现在:

  • Zone 列表带出所属账户(accountId / accountName)
  • 域名下拉按所选账户过滤
  • 部署前强制校验同账户,不匹配直接给出明确原因

5. CNAME 创建失败不再被静默吞掉

旧版 DNS 记录创建异常只记录一行"跳过",界面照样显示成功。

现在会先查询是否已存在同名 CNAME:

  • 记录已存在且指向正确 → 视为成功
  • 指向不一致或确实创建失败 → 部署直接报错并说明原因

6. 不再「假成功」(部署落点硬校验)

旧版只把 Cloudflare 的部署状态写进日志,界面依旧显示"部署完成"。

现在只要出现以下任一情况,直接报错:

  • 部署落在了预览环境(生产域名不会更新)
  • Cloudflare 侧状态为 failure / failed / canceled

7. 新增部署后线上自检

部署完成后立刻回访一次 项目名.pages.dev,把真实 HTTP 状态码与页面字节数写进日志:

线上自检: https://xxx.pages.dev/ → HTTP 200,8499 字节

这是发现「日志说成功、打开却是旧页面」最快的手段。

8. 新建模式不再静默接管同名项目

旧版填了一个已存在的项目名,会悄悄 PATCH 该项目,并把它的 KV 绑定改成新的命名空间——等于破坏别人正在跑的项目。

现在新建模式撞到同名 Pages 项目或同名 Worker 脚本会直接报错,提示换名或改用「更新现有项目」模式。

9. 复用 KV 时 UUID 未同步(会导致链接打不开)

旧版复用已有 KV 时会跳过初始化,KV 里仍是旧 UUID,而面板却用新 UUID 拼访问链接——链接必然失效。

现在会把新 UUID 合并写回 KV 配置,同时保留用户已设置的其他字段。

10. 多账户时 Zone 跨账户过滤失效

账户下拉在"多于 1 个账户"时停在空值,导致按账户过滤 Zone 的逻辑拿不到账户、把所有账户的域名都列出来——跨账户防护形同虚设。

现在默认选中第一个账户(与后端默认一致),跨账户域名不会再出现在下拉里。

11. 资源数为 0 时也走完整资产流程

压缩包里只有 _worker.js 时,现在仍会完整执行 check-missing → upsert-hashes,与官方 wrangler 完全一致。

12. 空源码防护

_worker.js 为空文件时直接报错,不再提交一个空模块。


三、兼容性

  • 向后兼容,无破坏性变更。除上述部署链路修复外,界面与操作方式与 v1.1.0 完全一致。
  • 已部署的面板可继续使用;重新上传本版本部署包即可生效,无需修改域名、KV 或项目配置。
  • ⚠️ v1.1.0 及更早版本部署出的 Pages 项目,若已处于 400 状态,需要用本版本重新部署一次才能恢复正常。

四、升级方式

方式一:面板内更新(推荐)

把本版本的 cf-deploy-panel-v1.1.1.zip 重新部署到原来的面板项目即可,覆盖部署,不影响已有配置。

方式二:wrangler

# 解压后进入目录
npx wrangler pages deploy . --project-name 你的面板项目名

五、怎么验证这次真的部署成功了

部署完成后,按顺序看这三处:

1. 日志里找线上自检

线上自检: https://你的项目.pages.dev/ → HTTP 200,8499 字节

字节数对不上,说明没落对地方。

2. 访问 /api/version

curl https://你的面板.pages.dev/api/version

返回 {"ok":true,"version":"v1.1.1"} 才算更新成功。

3. 验证部署出来的项目有没有 Worker 在跑

随便访问一个不存在的路径:

  • 返回 404 → 纯静态站,Worker 没生效
  • 返回项目内容 → Worker 正常
  • 返回和首页完全相同的字节数 → 这是个 SPA 在兜底,你的 Worker 没进去

六、测试

套件 内容 结果
tests/validate.mjs 静态校验、API 冒烟、部署防护、改名场景、前端登录记忆 69 项全通过
tests/hash-verify.cjs BLAKE3 与官方 blake3-wasm 逐字节对照 31 例全通过
tests/e2e-sim.mjs 真实 zip 走完整上传链路 11 项断言全通过

七、完整更新日志

见 CHANGELOG.md。

v1.0.0 云端部署器首发版

Choose a tag to compare

@shuma12303 shuma12303 released this 11 Oct 12:22

云端部署器 —— Cloudflare Pages 一键部署面板(由 数码解码 独立开发并维护)

主要能力

  • 一键把 Cloudflare Pages 项目部署到自己的账号(Global API Key 认证)
  • 支持上传 zip 压缩包完整解压后部署(含 _worker.js 高级模式项目)
  • 自定义项目名,自动生成合规名称
  • 部署结果可点击直达 + 一键复制
  • 本地部署历史记录

部署包说明

  • 附件 cf-deploy-panel.zip 含 5 个平铺文件:index.html / styles.css / app.js / _worker.js / README.md
  • 在 Cloudflare Pages 控制台直接上传该 zip 即可完成部署

© 数码解码 · 保留所有权利