这个项目能做什么
PKV Sync 允许用户运行自己的 Obsidian 笔记库同步服务,而不是依赖于托管的云服务。它以一个单一的二进制文件形式发布,该文件将元数据存储在一个 SQLite 数据库中,并将每个笔记库作为裸 Git 仓库进行管理,因此无需集群、对象存储或托管服务。README 文件以英语编写,项目采用 AGPL-3.0-only 许可证。
README 中描述的核心功能包括:
- 多用户、多笔记库同步,通过认证设备进行,并具有每个笔记库的推送锁和幂等重试功能。
- 实时推送:通过 Server-Sent Events 实现亚秒级的小编辑推送,同时保留轮询作为备用方案。
- Git 作为真相来源:每个笔记库都是一个裸 Git 仓库,提供每个文件的历史记录、统一的差异比较以及在插件和管理面板中的单文件恢复功能。
- 冲突处理:插件不会悄悄覆盖本地编辑;冲突会以 .conflict-* 文件的形式出现,并提供一键式解析器。
- 管理面板支持五种语言(英语、简体中文、繁体中文、日语、韩语),用于管理用户、设备令牌、笔记库、邀请、活动以及 Blob 垃圾回收,并为破坏性操作提供确认对话框。
- MCP 读/写工具通过 stdio、独立的 Streamable HTTP 或服务器进程上的嵌入式 /mcp 路由暴露,旨在用于 AI 可读的笔记库。
- 安全默认设置:管理员创建密码的设置级密码策略、一次性令牌密钥、上传和 MCP 响应的大小限制,以及对已撤销令牌的实时 SSE 流重新验证。
部署方面,推荐使用 Docker Compose 结合 Caddy,通过 Let's Encrypt 实现 HTTPS 终止,而服务器在内部监听 127.0.0.1:6710。设置需要一个具有 A/AAAA 记录的域名,并且端口 80 和 443 可达。步骤包括使用 genkey 命令生成部署密钥,创建包含服务器、存储、网络和 MCP 部分的 config.toml,编辑 Caddyfile 以适应域名,运行 docker compose up -d,然后创建第一个管理员,并将插件 zip 安装到笔记库的 .obsidian/plugins/pkv-sync/ 文件夹中。原生安装、反向代理调参(Caddy、Nginx、Traefik)、public_host 语义、备份/恢复以及磁盘加密均在部署强化指南中有详细说明。
MCP 模式包括嵌入式模式(通过配置标志启用,在主服务器端口上挂载 /mcp,共享 TLS 终止、反向代理、部署密钥和持有者令牌强制执行)和独立模式(运行一个绑定到指定地址的单独进程,适用于气隙设置或独立扩展)。
Obsidian 插件将本地文件作为真相来源,并读取/写入磁盘上的普通笔记库。非敏感设置和同步索引存储在插件的 data.json 中,而登录状态、活跃的持有者设备令牌、部署密钥和设备身份则存储在 Obsidian 的设备本地存储中。设备令牌在使用时续期,闲置 90 天后过期,并具有 365 天的绝对寿命;在同一设备上重新登录会轮换活跃令牌。日常功能包括命令面板、文件历史、并排差异比较、冲突解析、选择性 .obsidian 同步、设备管理和自我更新,这些都在用户手册中有详细记录。
加密状态:README 表明,版本 1.0 尚未提供原生端到端加密,服务器可以读取笔记库内容。原生每个笔记库的 E2EE 计划作为 1.x 路线图上的可选模式,因为加密会牺牲服务器端功能,例如历史差异、三向自动合并、内联 SSE 负载和 MCP 读/写。作为一种变通方法,可以对笔记库分层使用 git-crypt,这样标记的路径会作为密文 Blob 到达服务器,而文件名在服务器上仍然是明文;持有密钥的客户端仍然可以使用标准的 git clone 和 materialize 命令。README 还建议在实际部署中使用 HTTPS、限制 trusted_proxies、加密数据磁盘和加密备份。
发布和状态:README 列出了关于插件使用、服务器管理、CLI 参考、升级说明、部署强化、OpenAPI 规范、MCP 设置、LLM 维护的 Wiki 工作流程以及从 Obsidian Sync 迁移的文档。每个 GitHub 版本都会发布 Linux amd64/arm64 二进制文件、Windows x64 二进制文件、多架构 GHCR Docker 镜像、Obsidian 插件 zip 文件以及 SHA256SUMS。版本 1.5.1 被描述为对管理面板和插件进行视觉重构,并与 CI 文档保护一起进行了文档对齐;版本 1.5.0 涵盖了审计修复和性能工作,包括与 Git 对象生命周期相关的 Blob 保留、路径验证、速率限制、非阻塞 SSE 关闭、允许列表中的 .obsidian 同步以及批量 Git 读取。公共 REST API、CLI、存储布局、插件包和 Docker 镜像都按照 semver 进行版本控制,OpenAPI 规范是兼容性合同;0.x 的 SQLite 数据库不能原地升级到 1.0.0。开发命令包括 cargo fmt、clippy 和 test,以及插件的 typecheck、vitest 和 build,CI 会在 Linux 和 Windows 上运行 Rust 矩阵、插件检查、Docker 构建以及发布二进制文件的冒烟测试。
评论
0 评分人数达到10人后显示
登录后参与讨论。