部署到个人网站
状态:FeedLens 已经放进个人网站的本地副本(
projects/feedlens/),首页“项目实践”里加了入口卡片,并打成了可以直接上传的 zip。整站在本机预览验证过。还没有上传到 Cloudflare——上传需要登录你的账号,这一步由你来做。
个人网站是 Cloudflare Pages 上的 qiqixu.pages.dev,每次通过“Create deployment”直接上传整站。上线后的地址是 https://qiqixu.pages.dev/projects/feedlens/。
这次实际做了什么
以你提供的整站压缩包为底,在副本上做了两处改动,原压缩包没有动:
| 改动 | 位置 | 说明 |
|---|---|---|
| 新增 FeedLens 静态展示包 | projects/feedlens/(34 个文件,约 0.5 MB) |
与已有的 projects/mtr-easyride/ 并列。每页页脚有“← 返回个人网站”,指向首页的项目区 |
| 首页新增一张项目卡片 | index.html |
放在 MTR EasyRide 卡片的下面。沿用原卡片的结构和样式类,只追加了 4 行样式、一段卡片 HTML 和中英文各 5 条文案;原有内容一行没删 |
验证:原网站 48 个文件除 index.html 外逐字节未变;FeedLens 目录内 791 个相对链接和资源全部能解析;首页中英文切换、卡片跳转、返回链接、手机宽度下的布局都在浏览器里看过。
产物:
- 整站目录:
dist/qiqixu-site/ - 可上传的压缩包:
dist/qiqixu-product-portfolio-full-site-with-feedlens.zip
上传:在 Cloudflare 控制台打开 qiqixu 这个 Pages 项目,点 “Create deployment”,上传上面的压缩包(或整个 dist/qiqixu-site/ 目录)。直接上传的每次部署都是整站快照,所以传的必须是完整网站,不能只传 feedlens/。
以后更新 FeedLens(重新训练或改了文档之后):
.venv/bin/python scripts/export_static.py --out dist/qiqixu-site/projects/feedlens --home-up 2
(cd dist/qiqixu-site && zip -r -X -q ../qiqixu-product-portfolio-full-site-with-feedlens.zip . -x "*.DS_Store")
--home-up 2 表示输出目录往上两层是个人网站的根目录,用来生成“返回个人网站”的链接。如果你之后改了个人网站的其他内容,请以最新的整站目录为底重新放入 projects/feedlens/,不要用这里的旧副本覆盖。
下面是通用说明:静态包里有什么、其他部署方式、以及如何做成实时推理。
能放上去什么,不能放什么
Cloudflare Pages 托管的是静态文件,不能运行 Python 和 PyTorch,所以:
| 内容 | 能否放到 Pages | 说明 |
|---|---|---|
| 项目介绍页、文档中心 | 能 | 纯静态 HTML |
| 应用的界面 | 能,但是静态展示版 | 没有后端,不做实时推理 |
| 模型推理 | 不能 | 需要一台能跑 Python 的机器 |
| 模型权重(131 MB) | 不能 | 超过 Pages 单文件 25 MiB 的限制,也没有必要放 |
静态展示版怎么保持诚实:示例输入的结果是导出时真的调用一次模型得到的输出,预先存成 JSON;页面顶部有横幅写明“没有连接模型服务、不是实时推理”,每张结果卡带“预先计算”戳记;输入示例以外的文字会被拒绝,并提示在本地启动应用。它展示的是模型真实的输出(包括判断错的那几条),只是不能现场算。
生成静态展示包
.venv/bin/python scripts/export_static.py # 输出到 dist/feedlens/
产物(约 0.5 MB,三十多个文件):
dist/feedlens/
├── index.html 项目介绍页
├── docs/ 文档中心
├── assets/ 样式与图标
└── app/ 应用的静态展示版
├── index.html
└── data/ status.json、examples.json(预先计算的模型输出)、eval.json(评测结果)
全部使用相对路径,目录名就是网站上的子路径。想换成别的路径,改 --out:
.venv/bin/python scripts/export_static.py --out dist/projects/feedlens
本地预览(与线上相同的子路径结构):
.venv/bin/python -m http.server 8001 --directory dist
然后打开 http://127.0.0.1:8001/feedlens/。
放到 Cloudflare Pages
取决于你的网站现在是怎么部署的。以下步骤基于 Cloudflare Pages 的常规用法,界面上的具体名称请以 Cloudflare 当前的文档为准。
情况一:网站连着一个 Git 仓库(推送即部署)
把 dist/feedlens/ 整个复制到网站仓库里会被发布的那个目录下(纯静态站点通常是仓库根目录或 public/;用了框架的话是框架的静态资源目录,例如 public/ 或 static/),提交并推送:
cp -R dist/feedlens <你的网站仓库>/<发布目录>/feedlens
部署完成后访问 https://qiqixu.pages.dev/feedlens/。
情况二:网站是直接上传的(没有连 Git)
直接上传的每次部署都是整站快照,新上传的内容会替换掉原来的全部文件。所以要上传的是“你的整个网站 + feedlens/ 子目录”,不能只传 feedlens/:
- 在本地准备好网站的完整目录,把
dist/feedlens/复制进去; - 在 Cloudflare 控制台里找到这个 Pages 项目,新建一次部署并上传整个目录;或者用命令行:
npx wrangler pages deploy <你的整站目录> --project-name <你的 Pages 项目名>
情况三:不想动现有网站
单独建一个 Pages 项目,只放 FeedLens,再从个人网站链过去:
npx wrangler pages deploy dist/feedlens --project-name feedlens
部署后的地址是 https://<项目名>.pages.dev/(项目名可能已被占用,需要换一个)。
在个人网站首页加一个入口
这一步已经做了(见本页开头)。卡片的文案写在个人网站 index.html 的翻译字典里,键名以 feedlens 开头,中英文各一份;想改措辞直接改那里。重新训练导致结论变化时,记得同步修改卡片上的那句评测结论。
更新
重新训练或改了文档之后:
.venv/bin/python -m feedlens.evaluate --systems all # 如果模型变了
.venv/bin/python scripts/export_static.py # 重新导出(会重新调用模型计算示例)
然后按上面的方式重新部署。
想要线上实时推理
需要一台能运行 Python 的服务器(约 1 GB 内存即可,不需要 GPU),在上面启动 uvicorn app.server:app,再把静态站点里“看在线示例”的链接指过去:
FEEDLENS_APP_URL=https://<你的应用地址>/ .venv/bin/python scripts/build_site.py
这一步没有做过,也没有测过公网环境下的并发和安全性。目前的后端没有访问频率限制,直接暴露到公网前需要补上。
本页由 docs/13-deploy.md 生成。