博客主站仍是 https://zl4629.xyz。两者共用一台机器上的 Caddy,但站点根目录分开。
01为什么不在服务器跑 FastAPI
本机开发时,大屏后端读 parquet 很方便。服务器只有大约 1.6G 内存,还已经跑着博客面板和 Caddy。
如果再常驻一个 Python 服务:
- 内存更紧。
- 进程挂了页面就挂。
- 和“只展示”的目标不匹配。
所以最终方案是:
本地 DuckDB / 脚本
-> 导出 overview.json / charts.json ...
-> 上传 /var/www/oss-sc-dw
-> Caddy file_server前端不再请求 /api/*,改为读 ./data/*.json。
02和博客如何共存
博客 Caddy 块大致是:
zl4629.xyz {
root * /var/www/luminary
file_server
}大屏只追加,不改原块:
oss.zl4629.xyz {
root * /var/www/oss-sc-dw
encode gzip
file_server
@data path /data/*
header @data Cache-Control "no-cache"
}DNS 需要一条 oss 的 A 记录指向服务器。Caddy 会按主机名自动申请证书,方式和主站一致。
03发布检查清单
- 本地确认
deploy/static-site/data/charts.json等文件齐全。 - 上传到
/var/www/oss-sc-dw。 caddy validate --config /etc/caddy/Caddyfile。systemctl reload caddy。- 服务器上
curl -I https://oss.zl4629.xyz/与curl -I https://zl4629.xyz/都返回 200。
我实际操作时,主站和大屏都保持了 200。配置前会备份 Caddyfile。
04更新数据时怎么做
数仓重新跑完后:
- 再导出一轮 JSON。
- 覆盖服务器
/var/www/oss-sc-dw/data。 - HTML/JS 若有改动一并覆盖。
不需要重启业务采集,也不需要在服务器装 DuckDB。
05取舍
静态方案换来的是稳定和省资源,丢掉的是“服务器上点一下重算”。
对作品展示来说,这个交换划算;如果以后要在线重算,再单独加内网任务,不和公网展示进程绑在一起。
06相关文章
- 项目主文:开源供应链数仓:从公开数据到可解释风险大屏
- 口径笔记:供应链指标为什么容易吵