← 报告站

报告站发布流程:从写一篇到上线

2026-10-29 · Pages / 运维 / 工作流

这个站托管在 Cloudflare Pages:内容部署到 Cloudflare 边缘节点,和家里那台机器无关。家里的电脑只负责“发布”这一个动作,发布完关机也不影响访问。

它和 DSH 远程入口的区别

地址内容在哪需要家里开机吗
report.lzysygtc.xyzCloudflare 边缘(静态文件)不需要
dsh.lzysygtc.xyz本机 DSH,经 cloudflared 隧道需要,且隧道要连着

目录结构

report-site/
  build.mjs        构建脚本,零依赖
  deploy.ps1       构建 + 上传一条龙
  static/          style.css / _redirects(短链) / _headers(noindex 与安全头)
  reports/         每篇报告一个目录
    <slug>/
      meta.json      { title, date, summary, tags[] }
      fragment.html  正文片段,套壳与样式自动加
      其它文件       图片等,一起上传
  dist/            构建产物,上传的就是它

发一篇新报告

1. 建目录,名字用 日期-slug,例如 reports/2026-11-02-some-topic/。

2. 写 meta.json:

{
  "title": "标题",
  "date": "2026-11-02",
  "summary": "一句话摘要,显示在首页卡片上",
  "tags": ["标签1", "标签2"]
}

加 "hidden": true 可以临时不上首页,但页面本身仍然可访问。

3. 写 fragment.html:只写正文片段,不要 <html>/<head>,外壳、导航、页脚由构建脚本生成。可用 h2/h3/p/ul/table/pre/code/img,样式已内置。

4. 图片:放进同一目录,用相对路径 <img src="shot.png">,会被一起复制上传。

发布

cd D:\Users\jiaoq\Downloads\deepseek\report-site
.\deploy.ps1

脚本内部做两件事:node build.mjs 生成 dist/,然后 npx wrangler pages deploy dist --project-name=report-site --branch=main 上传。

Token 已存在用户级环境变量 CLOUDFLARE_API_TOKEN(权限:Account → Cloudflare Pages → Edit,Zone → DNS → Edit,仅限 lzysygtc.xyz),脚本自动读取,不用每次配置。

只想本地预览不发布:node build.mjs 后用浏览器打开 dist/index.html。

验证

curl -s -o NUL -w "%{http_code}" https://report.lzysygtc.xyz/
curl -s -o NUL -w "%{http_code}" https://report.lzysygtc.xyz/<slug>/

首页 200、报告页 200、错路径 404,就说明部署生效。Pages 的 CDN 缓存很短,通常几秒内就能看到新内容。

短链

static/_redirects 里维护,一行一条:

/gh   https://github.com/   302

用 302 而不是 301,避免浏览器长期缓存导致以后改不动。上限:静态 2000 条、动态 100 条。

踩过的坑

  • 绑定自定义域后一直 pending:Pages 没有自动创建 DNS 记录。手动加 report → report-site-eh1.pages.dev 的 CNAME(开启代理)后,状态立刻转 active。
  • 本机访问报“DNS 名称不存在”:加记录之前 ISP 递归 DNS 缓存了 NXDOMAIN,而其他公共 DNS 已经能解析。等负缓存过期(通常几分钟)或换网络即可,不需要改任何配置。
  • 首次部署报 project does not exist:Pages 项目要先创建,wrangler pages project create report-site --production-branch=main。
  • 单文件别超 25 MiB:更大的放 R2 公开桶,页面里引用即可。

不想用命令行

把 dist 整个文件夹拖到控制台 Workers & Pages → Create → Pages → Upload assets,效果一样。