第十四节 — 部署形态
这一节回答:FinBayes 在用户本地如何部署?多种部署形态各自的拓扑是什么样?
三种部署形态
FinBayes 支持三种部署形态。第一阶段主推本地优先单机,混合与托管形态作为演化路径预留接口。
| 形态 | 第一阶段 | 描述 |
|---|---|---|
| 本地优先单机 | ✅ 主推 | 所有容器(含 State Store / Cache)都在用户本机;LLM / 数据 Provider 可云端可本地 |
| 本地 + 远程 Provider | ✅ 支持 | 容器仍本机,但 LLM 与数据 Provider 走云端 API(用户配置) |
| 未来托管部署 | 远期 | 容器迁移到云端服务;多用户共享;超出第一阶段范围 |
部署形态变化时 runtime 接口契约不变——这是可演化性质量属性的工程承接(详见架构目标与质量取舍章节)。
本地优先单机部署的物理拓扑
这张图表达什么:所有 FinBayes 容器与持久化都在用户本机;外部 Provider(云端 LLM / 数据 / Data Horizon)通过 HTTPS 访问;本地 LLM 是可选安装(用于 L2 降级或用户主动选择)。
这张图特意不表达什么:容器内部组件细节(在 CHAP-09 已展开);远程托管形态的拓扑(在下面单独描述)。
怎么读这张图:实线箭头是必要数据流,虚线箭头是可选数据流(如本地 LLM)。同一框内的组件共享主机资源。
部署形态对各容器的影响
| 容器 | 本地优先单机 | 本地 + 远程 Provider | 未来托管 |
|---|---|---|---|
| 入口适配 | 全部本机 | 全部本机 | Web API 迁云,其他容器(CLI / TUI)仍本机 |
| Core Runtime | 本机进程 | 本机进程 | 云端服务进程 |
| Provider Adapter Pool | 本机 | 本机 + 调云 LLM | 云端 |
| State Store | SQLite 本地文件 | SQLite 本地文件 | 远程数据库(PostgreSQL 候选) |
| Cache | 内存 LRU 或本地 Redis | 同左 | 远程 Redis 集群 |
| Config Store | 本地配置文件 | 本地配置文件 | 用户级账户存储 |
| Credential Store | OS Keychain | OS Keychain | 云端密钥管理 |
重要约束:所有形态共用同一 runtime 接口契约。从本地优先单机演化到远程托管时,应用代码不变——仅 Provider Adapter Pool 和 State Store 的实现替换。这是接口版本化的回报。
用户首次安装与初始化流程
关键设计:
- 用户至少要有一种 LLM 可用才能用 FinBayes 完整功能(云端或本地);都没有时进入 L3 / L4 受限模式(明示)
- 本地 LLM 安装是可选,不强制(增加部署门槛与下载量)
- 默认 Session 在初始化时自动创建(用户不需手动建第一个 Session)
配置文件与数据文件的路径约定
按 OS 平台不同,FinBayes 的本地文件遵循各 OS 的标准目录约定(XDG Base Directory Specification on Linux / macOS 标准 / Windows AppData):
| 平台 | 配置目录 | 数据目录 | 缓存目录 |
|---|---|---|---|
| macOS | ~/Library/Application Support/finbayes/config/ | ~/Library/Application Support/finbayes/data/ | ~/Library/Caches/finbayes/ |
| Linux | $XDG_CONFIG_HOME/finbayes/(默认 $HOME/.config/finbayes/) | $XDG_DATA_HOME/finbayes/(默认 $HOME/.local/share/finbayes/) | $XDG_CACHE_HOME/finbayes/(默认 $HOME/.cache/finbayes/) |
| Windows | %APPDATA%\finbayes\config\ | %APPDATA%\finbayes\data\ | %LOCALAPPDATA%\finbayes\cache\ |
不变量:
- 凭证类不进入这些目录的任何文件(凭证走 OS Keychain)
- 配置文件可被用户直接编辑(YAML 格式)
- 数据文件(State Store SQLite)不建议用户直接编辑(需用 FinBayes CLI 操作)
升级流程
| 升级类型 | 处理 |
|---|---|
| FinBayes 软件版本升级 | runtime 启动时检查 State Store schema 版本,按需运行 migration 脚本(schema 演化策略详见演化与版本管理章节) |
| 接口契约版本升级 | major 升级时拒绝过期客户端连接,提示用户升级;minor 升级保持向后兼容 |
| LLM Provider API 变化 | Provider Adapter 内部适配,runtime 业务代码不变 |
| 本地 LLM 模型升级 | 用户主动操作(Ollama pull);FinBayes 重新探测 Readiness |
回滚策略:State Store 在 schema migration 前自动备份(SQLite 文件复制),失败时回滚。详见数据存储划分章节。
卸载与数据清理
用户卸载 FinBayes 时:
| 数据类型 | 默认行为 | 用户可选 |
|---|---|---|
| 安装的二进制 / 程序文件 | 删除 | — |
| 配置文件 | 保留(方便重装) | 明示选择"完全删除" |
| 数据文件(State Store) | 保留 | 明示选择"完全删除"(不可恢复警告) |
| 缓存文件 | 删除 | — |
| OS Keychain 中的 Provider 凭证 | 删除 | — |
| 本地 LLM 模型(Ollama 下载的) | 不删(由 Ollama 管理) | 用户在 Ollama 中删除 |
关键约束:用户清空画像 ≠ 卸载 FinBayes ≠ 删除 State Store。三种动作明确区分,避免误操作。
部署形态相关的未决问题
未决但第一阶段不抢答:
- 远程托管形态下的多用户隔离(待第一阶段冷启动数据验证商业模式后定)
- 跨设备同步(用户在多台机器上的 FinBayes 状态是否同步)
- 企业部署形态(如团队共享 Watchlist / 团队级审计)
这些都在战略未决问题范围内(详见上位继承与不变量章节)。