第 7 章:部署上线 + 开源
开源版部署目标
用户 clone 下来,改个 .env,docker-compose up 就能跑。
最低配置: 只需要一个 GLM_API_KEY。端口、聚合时间、评分阈值都有默认值。
这个"低门槛"是刻意设计的 — 开源项目如果部署门槛高,README 写得再好也没人用。
Docker 部署设计
单容器,把 FastAPI 应用和 SQLite 数据库打在一起跑。数据目录通过 volume 映射到宿主机。
为什么不分多个容器?因为开源版是给技术人群用的 — 他们能理解 Docker,但不想为了一个工具去维护 PostgreSQL + Redis 的容器编排。单容器是对用户最友好的选择。
开源什么,不开源什么
| 开源 | 不开源 |
|---|---|
| 核心聚合逻辑(aggregator) | SaaS 用户系统 |
| 全部 5 个爬虫 | 支付模块 |
| AI 分析 + 评分 | 防薅羊毛策略 |
| RSS/日报生成 | 管理后台 |
| Docker 部署配置 | 运营数据 |
| 完整配置文件(sources.json) | 渠道分发(邮件/语音) |
原则:核心功能全开源,商业化功能不开源。
选 AGPL 协议保护 — 个人/企业内部用完全自由,但拿去做 SaaS 服务给别人用必须也开源。这在陷阱第 6 章里讨论过。
开源前的准备工作
发布到 GitHub 之前做了这些事:
- 代码清理 — 把 SaaS 版独有的代码(用户系统、支付、管理后台)全部移出,确保开源版独立可运行
- README 编写 — 部署步骤、配置说明、功能截图、常见问题
.env.example— 所有可配置项罗列出来,必填项标(required)- GitHub Actions — 每次 push 自动构建 Docker 镜像推到 Docker Hub
sources.json— 信息源配置独立成文件,用户可以自行增删数据源- License 文件 — AGPL-3.0
一个容易忽略的点: 开源版和 SaaS 版共享核心代码(聚合器、爬虫、AI 分析),但目录结构不同。确保改了开源版的 bug 能同步到 SaaS 版,反之亦然。
部署踩坑
国内服务器 Docker 镜像拉取
Docker Hub 从国内访问经常超时。解决方案:
- README 里提供配置国内镜像加速的说明
- GitHub Actions 自动导出
.tar离线包 docker-compose.yml里注明了哪些镜像需要
数据持久化
SQLite 文件和音频文件(TTS 功能生成的)要挂载到宿主机。如果只是 Docker 内部存储,容器重启数据就丢了。
首次运行的初始化
数据库表是 SQLAlchemy 自动创建的(create_all),用户不需要手动建表。但第一次聚合需要等几分钟(AI 分析比较慢),不要以为是卡住了。