报告站发布流程:从写一篇到上线
这个站托管在 Cloudflare Pages:内容部署到 Cloudflare 边缘节点,和家里那台机器无关。家里的电脑只负责“发布”这一个动作,发布完关机也不影响访问。
它和 DSH 远程入口的区别
| 地址 | 内容在哪 | 需要家里开机吗 |
|---|---|---|
report.lzysygtc.xyz | Cloudflare 边缘(静态文件) | 不需要 |
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,效果一样。