部署与发布
站点是构建产物,不是手写页面:node site/build.mjs 把仓库 markdown 编译到 site/dist/,再由 Cloudflare Workers 静态资产托管。site/dist/ 已进 .gitignore,永远由 CI 或本地重新生成。
0. 现状
| 项 | 值 |
|---|---|
| 构建命令 | node site/build.mjs(零 npm 依赖) |
| 产物 | site/dist/,当前 75 页 + 样式 / favicon / 404 / robots / _headers |
| Worker 名 | literary-lab |
| 账号 | 83b40c9065a6f4631f4ab6cda824a21a(Cloudflare 账号 ID) |
| 托管方式 | Workers 静态资产(assets-only),html_handling=auto-trailing-slash,not_found_handling=404-page |
| 线上地址 | <https://lab.talkincode.net>(自定义域;workers_dev: false,无 workers.dev 入口) |
| 自动流水线 | .github/workflows/deploy.yml(push main → 门禁 → 构建 → deploy;缺 secret 时跳过) |
1. 首次上线(本地,一次性)
make site # 构建 + 站内死链自检
npx wrangler dev # 可选:本地预览 http://localhost:8787
npx wrangler deploy # 部署;workers_dev 已关闭,只输出自定义域
部署会打印最终地址(当前只有 lab.talkincode.net 一个入口);如无自定义域,把 workers_dev 改回 true 才会出现 workers.dev 地址。
2. 让 push 自动发布
需要两个仓库 secret。只在这里设置一次,不要写进代码、不要贴进聊天记录。
- Cloudflare Dashboard → My Profile → API Tokens → Create Token
- 模板选 Edit Cloudflare Workers,或自定义权限:
Account → Workers Scripts:Edit - 账号限定为当前账号,区域留空(不需要 Zone 权限,除非之后绑自定义域)
- 写进 GitHub secrets:
gh secret set CLOUDFLARE_API_TOKEN --repo talkincode/literary-lab
gh secret set CLOUDFLARE_ACCOUNT_ID --repo talkincode/literary-lab --body 83b40c9065a6f4631f4ab6cda824a21a
- 验证:随便推一个 commit,看 Actions 里
deploy工作流的最后一步是否变为「部署到 Cloudflare Workers」。
没有 secret 时不会红:部署步骤自动跳过并留一条 warning,内容门禁与构建照常跑——所以本地开发、PR 校验不受影响。
3. 回滚与下线
npx wrangler deployments list # 看历史版本
npx wrangler rollback # 回滚到上一版
npx wrangler delete --name literary-lab # 彻底下线
4. 可选:绑定自定义域名
talkincode.net 已在同一账号下。若要把站点放到 lab.talkincode.net:
// wrangler.jsonc
"routes": [{ "pattern": "lab.talkincode.net", "custom_domain": true }]
再 npx wrangler deploy,Cloudflare 会自动建 DNS 记录与证书。这会改动 DNS,属于独立决策,需要单独确认后再做。
5. 内容变更后的固定流程
make check # 结构 / 引文 / 摘录 / INDEX 是否最新
make site # 构建 + 死链自检
npx wrangler dev # 本地看一眼
git push # CI 门禁通过后自动发布
6. 发布范围
site/build.mjs 的 walk() 里有排除表:tools/、templates/、.github/、node_modules/、dist/。要让某个内部文件上线,把它从排除表里拿掉并在路由表里加一条;反过来,任何新增目录默认不会被发布。
7. 已知限制
- 站内搜索:无。74 页靠导航 + 目录 +
INDEX.md消化,暂不值得引入前端依赖。 - 评论:无。研究结论的讨论走仓库 issue。
- 构建时间戳写进页脚(每次构建变化),因此每次部署都会产生完整的新资产,而非增量。