Baikal 0.10.1 介绍与选型指南
Baikal 认知篇:轻量 CalDAV+CardDAV 服务器的架构、功能特性与量化选型对比(Radicale/Davis/Nextcloud),核心论断经 0.10.1 实例实测验证,信息溯源 2026-10-30。
Baikal 0.10.1 介绍与选型指南
目标:面向「想把日历(CalDAV)与通讯录(CardDAV)同步服务收回自己服务器」的读者,讲清 Baikal 是什么、架构如何、功能边界在哪,并给出与 Radicale、Davis、Nextcloud 的量化选型对比。软件定位与版本信息全部联网溯源自官方渠道(查询日期 2026-10-30),架构与协议行为均在本地 Baikal 0.10.1 真实实例上实测验证,部署过程见《Baikal 0.10.1 Docker Compose 部署指南》。
一、环境信息
本篇为认知篇,主体信息联网溯源,核心论断以本地实测佐证;取证口径如下:
- 软件名称:Baikal(官方文档站 sabre.io/baikal,GitHub 仓库 sabre-io/Baikal,官网域名 baikal-server.com 重定向至 sabre.io/baikal)
- 当前最新稳定版:0.13.0(GitHub Releases Atom 流
github.com/sabre-io/Baikal/releases.atom实查,feed 更新时间 2026-10-18T17:54:31Z,0.13.0 条目时间 2026-10-19;查询日期 2026-10-30) - 本文实测版本:0.10.1(2024-11-10 发布,官方 tar 包
baikal-0.10.1.tar.gz,包内composer.json实查依赖php: ^8.1、sabre/dav: ~4.7.0) - 开源许可:GNU GPL v3(官网「It is released under the GNU GPL v3 license」原句;本地实例 Web Admin 后台 License and credits 区域同步显示 GPL v3)
- 运行语言与依赖:PHP 实现,基于 sabre/dav 4.7 框架;数据库支持 SQLite / MySQL / PostgreSQL 三选一(官网原句:The data can be stored in a MySQL, a PostgreSQL or an SQLite database)
- 社区热度:GitHub 星数 3.4k(shields.io 徽章
img.shields.io/github/stars/sabre-io/Baikal.json返回3.4k,查询日期 2026-10-30) - 版本节奏(GitHub Releases Atom 近 8 个版本实查,查询日期 2026-10-30):0.13.0(2026-10-19)、0.12.1(2026-08-05)、0.12.0(2026-08-03)、0.11.1(2025-11-30)、0.11.0(2025-11-29)、0.10.1(2024-11-10)、0.9.5(2024-03-20)、0.9.4(2023-11-15)
- 主要信息来源:sabre.io/baikal 官网、GitHub Releases Atom、shields.io 徽章 API、本地 0.10.1 实例(配置文件、数据库、HTTP 协议实测)
二、软件概述
Baikal 是一个用 PHP 编写的轻量级 CalDAV + CardDAV 服务器,由 fruux GmbH(sabre/dav 框架的维护方)与 Net Gusto 联合开发,现由 sabre-io 组织在 GitHub 上社区维护。官方对它的定位是一句话(sabre.io/baikal 首页原文):
Baïkal is a lightweight CalDAV+CardDAV server. It offers an extensive web interface with easy management of users, address books and calendars.
翻译过来:Baikal 是一个轻量的 CalDAV+CardDAV 服务器,提供完善的 Web 管理界面,可以轻松管理用户、地址簿和日历。它解决的痛点与所有自托管 DAV 服务端一致——把 Thunderbird、DAVx⁵、Apple 日历/通讯录等客户端默认托管在 Google、iCloud、Microsoft 侧的日程与联系人数据收回自己的服务器。官网明确列出的客户端兼容清单:iOS、macOS、Android 上的 DAVx⁵、Mozilla Thunderbird,「以及一切支持 CalDAV/CardDAV 的应用」。
与同领域的 Radicale(Python 系极简路线,见《Radicale 介绍与选型指南》)相比,Baikal 的差异化标签非常清晰:内置一个功能完整的管理后台。用户、日历、地址簿、数据库切换、管理员密码都能在浏览器里点出来,而不必手改配置文件;代价是需要一个 PHP 运行环境与一个(可选的)外部数据库。
💡 技术拓展:CalDAV/CardDAV 与 WebDAV 的关系。三者是「基础协议 + 领域扩展」的关系:WebDAV(RFC 4918)定义了通用的资源集合读写;CalDAV(RFC 4791)在其上定义了日历集合与 iCalendar 事件的语义(含忙闲查询、邀约调度);CardDAV(RFC 6352)定义了地址簿与 vCard 联系人的语义。Baikal 底层使用 sabre/dav 一次性实现了这三个协议,一个服务入口(
dav.php)同时承载两类数据。
三、核心架构
以下架构信息均在本地 Baikal 0.10.1 实例上验证(配置文件实读、HTTP 请求实测、数据库实查),非纯文档转述。
3.1 运行形态:PHP 应用 + Web 服务器 + 单数据库
Baikal 本体是一个标准 PHP 应用,解压即用,运行时由三类角色组成:
- Web 服务器 + PHP-FPM:对外提供 HTTP/HTTPS 服务,官方部署包内置 Apache 与 nginx 两种重写规则(
.well-known/caldav、.well-known/carddav重定向到dav.php); - PHP 应用目录:程序与数据分离——程序在安装目录,可变数据集中在
config/(配置)与Specific/(数据库文件等)两个目录,这两个目录就是升级与备份的全部对象; - 数据库:SQLite(零依赖,默认)/ MySQL / PostgreSQL 三选一,全部表结构由官方 SQL 文件定义。
实测确认的关键行为:配置在每次请求时重新解析。实测直接修改配置文件(把数据库后端从 SQLite 切到 MySQL)后不重启任何进程,下一个请求立即按新配置执行——这意味着配置变更「改完即生效」,也意味着配置文件语法错误会立即影响所有请求。
3.2 URL 入口与协议层结构
本地实例实测(curl PROPFIND,路径为文档示意域名):
curl -s -u root:q1w2e3r4 -X PROPFIND -H 'Depth: 1' \
https://dav.example.com/dav.php/ | grep -oE '<d:href>[^<]+</d:href>'
实测回显:
<d:href>/dav.php/</d:href>
<d:href>/dav.php/principals/</d:href>
<d:href>/dav.php/calendars/</d:href>
<d:href>/dav.php/addressbooks/</d:href>
协议层是标准 sabre/dav 的三层树:principals/(用户主体)、calendars/(每个用户一个日历家目录,内含 default/ 默认日历与 inbox/、outbox/ 调度集合,实测创建用户后自动生成)、addressbooks/(每个用户一个通讯录家目录,内含 default/ 地址簿)。每个用户可以在自己的家目录下继续创建多个日历/地址簿(实测 MKCALENDAR 创建第二个日历返回 201 Created,重复创建返回 405 Method Not Allowed)。
.well-known 重定向实测(RFC 6764 服务发现):
curl -s -i https://dav.example.com/.well-known/caldav | grep -i '^location'
实测回显:
Location: https://dav.example.com/dav.php
3.3 认证与数据模型
- Web 管理后台认证:登录名固定为
admin,密码在初始化向导中设置。实测在源码中确认:管理员密码以sha256('admin:' + auth_realm + ':' + password)存入配置文件;实测复算sha256('admin:BaikalDAV:q1w2e3r4')与配置文件中的哈希逐字符一致。 - DAV 协议认证:走
users数据表,密码以 Digest 兼容格式md5(username:realm:password)存储(auth_realm默认BaikalDAV)。实测:管理后台创建用户root/q1w2e3r4后,数据库中digesta1字段值与md5('root:BaikalDAV:q1w2e3r4')计算结果逐字符一致;HTTP 层以Authorization: Basic头通过验证。 - 数据表结构:0.10.1 的 SQLite 库实测共 14 张表:
users、principals、calendars、calendarinstances、calendarobjects、calendarchanges、calendarsubscriptions、addressbooks、cards、addressbookchanges、groupmembers、locks、propertystorage、schedulingobjects——即 sabre/dav 官方标准 schema,日历与通讯录各一套「实体表 + 变更表」,另加锁表、属性表与调度表。
3.4 插件体系
实测读取 0.10.1 运行环境中装配的插件清单:CalDAV、CardDAV 两大协议插件之外,默认启用了 ICSExportPlugin(日历整体导出 ICS)、VCFExportPlugin(地址簿整体导出 VCF)、Sync(sync-collection 增量同步)、Schedule(邀约调度,配合 invite_from 发件地址发邮件)、Sharing(日历/地址簿共享)。实测验证了两个导出插件:
curl -s -o /dev/null -w '%{http_code} %{content_type}\n' -u root:q1w2e3r4 \
'https://dav.example.com/cal.php/calendars/root/teamcal/?export'
实测回显:
200 text/calendar;charset=UTF-8
地址簿侧 ?export 返回 200 text/directory;charset=UTF-8(VCF 格式)。这两个端点在做数据迁移时非常实用。
四、功能特性
以下特性均在 0.10.1 实例上实测确认(操作方式与回显详见姊妹篇):
| 功能域 | 实测结论 |
|---|---|
| CalDAV 日历 | 完整支持:PROPFIND 枚举、MKCALENDAR 建日历、PUT/GET 事件、REPORT calendar-query 过滤查询、If-Match ETag 并发控制(过期 ETag 实测返回 412) |
| CardDAV 通讯录 | 完整支持:MKCOL 建地址簿、PUT/GET vCard、REPORT addressbook-query、?export 整簿导出 |
| 增量同步 | sync-collection REPORT 可用,实测返回 sync-token(形如 http://sabre.io/ns/sync/2),客户端可按 token 增量拉取变更 |
| Web 管理后台 | Dashboard(版本/服务状态/用户/日历/事件/通讯录统计)、用户管理(增删改、按用户管理日历与地址簿)、系统设置、数据库设置四个板块,实测全程可用 |
| 多用户隔离 | 实测跨用户读操作返回外层 207 但资源级 d:status 为 403 Forbidden,写操作直接 403——数据按所有者严格隔离 |
| 邀约邮件 | 配置 invite_from 发件地址后,IMIP 插件通过系统邮件通道(如 msmtp)发送会议邀请 |
| 数据库三选一 | SQLite 开箱即用;MySQL/PostgreSQL 通过导入官方 db.sql 后切换配置文件生效,均实测通过 |
五、快速开始(最小可用示例)
完整部署见《Baikal 0.10.1 Docker Compose 部署指南》,此处给出「装完之后的第一小时」最小路径:
- 初始化向导:浏览器打开
https://dav.example.com/admin/install/,第一步设置管理员密码(本文示例账号admin/q1w2e3r4),第二步选数据库(SQLite 默认路径即可,实测向导页标题为「Baïkal Database setup」),第三步向导页明确提示「Baïkal is now installed, and its database properly configured. For security reasons, this installation wizard is now disabled.」——完成后安装器自动写死Specific/INSTALL_DISABLED标记文件防止重放。 - 登录后台:
https://dav.example.com/admin/,用admin/q1w2e3r4登录,Dashboard 实测回显(节选):
About this system | Version | This systems runs Baïkal 0.10.1
Services | Web admin On | CalDAV On | CardDAV On
Statistics | Registered users 3 | Number of calendars 6 | Number of events 3 | Number of address books 5 | Number of contacts 3
- 建用户:Users → + Add user,实测填写 username/displayname/email/password 后回显「User root has been created.」,新用户自动获得
default日历与default地址簿。 - 协议自检:一条命令验证 DAV 入口(输入与回显见 3.2 节),返回 207 即服务可用。
- 接客户端:Thunderbird 日历、DAVx⁵、iOS 日历均填服务器地址 + 用户名密码即可;实测
.well-known发现路径已内置,客户端只需填根地址。
六、适用场景与限制
适合:个人与小团队的私有日历/通讯录同步;需要浏览器里点出用户与权限管理、不想手改配置文件的 PHP 技术栈用户;需要 MySQL/PostgreSQL 做集中备份与接管的场景;已有 nginx/Apache 想挂一个子路径或子域名的存量服务器。
限制(全部实测或官方文档确认):
- 没有命令行工具:0.10.1 不提供任何 CLI(对比 Radicale 的
radicale-admin),用户增删、密码重置只能走 Web 后台或直接操作数据库;也没有管理 REST API,一切管理动作都是表单 POST。 - 升级是手工活:官方升级路径是「下载新包 → 替换程序目录 → 保留 config/ 与 Specific/ → 核对
configured_version」,没有自动迁移器;0.10.1(2024-11)到 0.13.0(2026-10)跨越了 0.11/0.12/0.13 三条线,跨版本升级需逐版核对升级说明。 - 版本节奏偏慢:Releases 时间线显示 2024-11 到 2025-11 有约一年的空档(0.10.1 → 0.11.0),虽已恢复活跃(2026 年连发 0.12/0.13),但对比 Nextcloud 的月度节奏仍属「低频稳定」路线。
- 实测发现的管理缺陷:0.10.1 Web 后台「Database settings」页从 SQLite 切换到 MySQL 会触发 PHP 异常(形态构建与校验逻辑读值时机不一致,实测异常全文与根因见《Baikal 0.10.1 配置参数详解》常见问题节),切库需直改配置文件——已在文中给出完整可用流程。
- 单实例架构:无官方集群方案,多实例共享同一数据库不被官方支持;高可用只能靠数据库层与反向代理层自己做。
七、同类选型对比
与同定位产品做量化对比(社区数据为查询日快照,来源 shields.io 徽章 API 与各 GitHub 仓库,查询日期 2026-10-30;Radicale 数据同步自其官方仓库与 PyPI):
| 维度 | Baikal 0.10.1 | Radicale 3.9 | Davis | Nextcloud(日历/联系人模块) |
|---|---|---|---|---|
| 开源许可 | GPL-3.0 | GPL-3.0+ | MIT(GitHub LICENSE) | AGPL-3.0 |
| 技术栈 | PHP ^8.1 + sabre/dav ~4.7 | Python ≥3.9 单进程 | PHP(基于 sabre/dav 二次封装) | PHP 全栈(LAMP) |
| 外部数据库 | SQLite/MySQL/PostgreSQL 三选一 | 不需要(纯文件存储) | SQLite/MySQL | 需要 MariaDB/PostgreSQL |
| Web 管理后台 | 完整(用户/日历/地址簿/数据库/设置) | 简易内置页 | 有,较简 | 完整(全家桶级) |
| 命令行工具 | 无 | radicale-admin 等 | 无 | occ(功能全面) |
| 管理用 REST API | 无 | 无 | 无 | OCS API |
| 共享与协作 | Sharing 插件(日历/地址簿共享)+ 调度邀约 | owner/自定义规则 | 基础 | 丰富(共享/闲忙/会议室) |
| GitHub stars(2026-10-30 快照) | 3.4k(sabre-io/Baikal) | 5.2k(Kozea/Radicale) | 762(tchapi/davis) | 37k(nextcloud/server) |
| 版本节奏 | 低频(2024-11→2025-11 空档后恢复) | 持续(3.9.0 于 2026-10-25 发布) | 低频 | 高频(月度级) |
| 适合谁 | 要 Web 后台的 PHP 用户、多库选型需求 | 极简派、低配设备、协议纯净 | sabre/dav 生态集成者 | 已用 Nextcloud 全家桶的团队 |
选型建议:
- 想要「浏览器里点出来的管理后台」+ 数据库可选 → Baikal,本篇与姊妹篇覆盖其完整生命周期;
- 追求最少依赖、装完即忘、设备性能紧张 → Radicale(零数据库依赖是同档位独有优势,对比详见《Radicale 介绍与选型指南》);
- 已在用 Nextcloud 做文件与协作 → 直接启用其 Calendar/Contacts 应用,不要再引入独立 DAV 服务(对比见《Nextcloud 介绍与选型指南》);
- 是 sabre/dav 生态的 PHP 开发者、想把 DAV 能力嵌进自己的应用 → Davis 或直接基于 sabre/dav 库开发(Baikal 本身就是这条路线的标杆成品)。
八、参考链接
- 官网与文档:https://sabre.io/baikal/
- 安装文档(多渠道):https://sabre.io/baikal/install/
- GitHub 仓库:https://github.com/sabre-io/Baikal
- Releases(版本时间线来源):https://github.com/sabre-io/Baikal/releases
- sabre/dav 框架:https://sabre.io/dav/
- 社区维护部署形态(官方 README 引用):https://github.com/ckulka/baikal-docker
- CalDAV 协议标准:https://datatracker.ietf.org/doc/html/rfc4791
- CardDAV 协议标准:https://datatracker.ietf.org/doc/html/rfc6352
- WebDAV 服务发现(本文明细:
.well-known重定向实测):https://datatracker.ietf.org/doc/html/rfc6764
站内相关阅读:
- 《Baikal 0.10.1 Docker Compose 部署指南》
- 《Baikal 0.10.1 配置参数详解》
- 《Baikal 0.10.1 管理与运维实战》
- 《Radicale 介绍与选型指南》:同领域 Python 系极简方案的全景对比
- 《Nextcloud 介绍与选型指南》:全家桶路线的参照系