DAViCal 介绍与选型指南
DAViCal 是基于 PHP+PostgreSQL 的自托管 CalDAV/CardDAV/iSchedule 日历与通讯录服务器;本文联网溯源官网、GitLab 与 GitHub/PyPI,梳理其定位、架构、功能与发布节奏,并与 Radicale/Baïkal/Xandikos 量化对比给出选型建议。
DAViCal 介绍与选型指南
目标:本文基于 DAViCal 官网、GitLab 仓库、官方源码包与第三方平台(GitHub/PyPI)的联网溯源,梳理 DAViCal 的产品定位、架构设计、功能特性、发布节奏,并与 Radicale、Baïkal、Xandikos 三款同类 CalDAV/CardDAV 服务器做量化选型对比,帮助读者判断是否选用 DAViCal。本文为选型篇,所有事实均标注来源与查询日期,不含本地实测。
一、环境信息
本文不依赖本地环境,溯源渠道与版本基线如下(查询日期均为 2026-11-01):
- 溯源渠道:
- DAViCal 官网
https://www.davical.org/(首页、下载页目录列表) - GitLab API:
davical-project/davical、davical-project/awl仓库元数据与 tag - DAViCal 1.1.13 官方源码包(
davical_1.1.13.orig.tar.xz)内INSTALL、ChangeLog、COPYING、config/example-config.php文件 - GitHub API:
Kozea/Radicale、sabre-io/Baikal、jelmer/xandikos仓库元数据 - PyPI:
xandikos包版本与发布日期
- DAViCal 官网
- 版本基线:
| 组件 | 版本 | 来源 |
|---|---|---|
| DAViCal | 1.1.13(GitLab tag r1.1.13,2026-05-11;官网下载页文件时间戳 2026-05-12) | GitLab API / 官网下载页 |
| AWL(Andrew's Web Libraries,配套 PHP 库) | 0.65(与 DAViCal 1.1.13 同日发布) | GitLab API / 官网下载页 |
| Radicale | 3.9 | GitHub |
| Baïkal | 0.10.1 | GitHub |
| Xandikos | 0.4.10(2026-10-17 发布于 PyPI) | PyPI |
二、软件概述
2.1 DAViCal 是什么
DAViCal(名称由 DAV(WebDAV)与 iCal(iCalendar)拼合而来)是一款日历共享服务器,实现了 CalDAV 协议,用于把 iCalendar 格式的日历资源存放在远端共享服务器上,供多客户端协同维护。官网对它的定义是 "A CalDAV Store"(来源:官网首页,查询日期 2026-11-01)。
技术上,DAViCal 是 PHP 应用 + PostgreSQL 数据库的组合:日历数据(事件、通讯录、权限、用户)全部存放在关系型数据库中,通过 Apache 承载的 PHP 代码对外提供 DAV 协议服务。官网明确列出其三个基本特征:GPL 自由软件、使用 SQL 数据库存储事件数据、支持通过 WebDAV 的向后兼容只读/读写访问(来源:官网首页,查询日期 2026-11-01)。
除日历外,DAViCal 同时实现 CardDAV(通讯录)与 iSchedule(会议调度/空闲忙碌查询),官方首页列举了与之互操作的客户端:Mozilla Calendar(Sunbird/Lightning)、Evolution、Mulberry、Chandler,以及 Apple iCal 与 iOS 等闭源产品(来源:官网首页,查询日期 2026-11-01)。
💡 技术拓展:本文涉及的协议族不止 CalDAV 一个,常见 DAV 系协议对比——
协议 标准 定位 WebDAV RFC 4918 基于 HTTP 的通用文件读写与元数据管理,CalDAV/CardDAV 的底座 CalDAV RFC 4791 在 WebDAV 上扩展日历集合(VCALENDAR)、时间查询 REPORT、调度 CardDAV RFC 6352 在 WebDAV 上扩展通讯录集合(VCARD)与联系人搜索 iSchedule RFC 9610 系列 基于 HTTP 的跨域会议调度消息投递(DAViCal 支持部分实现) DAViCal 是四者全支持的实现,这也是它与后文多数竞品的核心差异之一。
2.2 关键事实速览
| 项目 | 内容 | 来源 |
|---|---|---|
| 项目定位 | 自托管 CalDAV/CardDAV/iSchedule 服务器(日历与通讯录存储) | 官网首页 |
| 发起人 | Andrew McMillan(新西兰),2007 年前后创建,版权标注 2007–2014 | 官网首页 Credits |
| 治理模式 | 2014 年春起转为社区支持模型(community support model) | 官网首页 |
| 许可证 | GPL v2(部分内嵌代码继承第三方许可证) | 源码包 COPYING |
| 主仓库 | GitLab davical-project/davical | 官网首页链接 |
| 社区热度 | 112 stars / 142 forks,最近活动 2026-10-20 | GitLab API(查询 2026-11-01) |
| 运行栈 | Apache + PHP(含 pgsql、xml/expat 扩展)+ PostgreSQL | 官方 INSTALL |
| 依赖下限 | Apache 1.3.x/2.x.x、PHP ≥ 5.4、PostgreSQL ≥ 8.2(INSTALL 标注的最低版本) | 官方 INSTALL |
| 配套库 | AWL(libawl-php),提供配置解析、认证、Web UI 框架 | 官方 INSTALL |
| 发行渠道 | 官网 tar.xz 源码包 + Debian 仓库(INSTALL 注明"DAViCal is in Debian Sid") | 官网下载页 / INSTALL |
2.3 发展历史与发布节奏
官网下载页保留了完整的历史版本文件时间戳,可据此还原近年的发布节奏(来源:官网 /downloads/ 目录列表,查询 2026-11-01):
| 版本 | 发布时间 | 备注 |
|---|---|---|
| 1.1.9.3 | 2020-04-14 | — |
| 1.1.10 | 2021-03-02 | — |
| 1.1.11 | 2022-10-04 | 同日发布 AWL 0.63 |
| 1.1.12 | 2023-03-14 | 同日发布 AWL 0.64 |
| 1.1.13 | 2026-05-12 | 当前最新稳定版,同日发布 AWL 0.65 |
解读:DAViCal 属低频维护型项目,约 1–3 年一个大版本,但源码包内 ChangeLog 显示 2023–2025 年间持续有 PHP 8.2 适配、LDAP 增强、iSchedule 修复、日期范围扩展到公元 1–9999 年等提交(来源:1.1.13 源码包 ChangeLog),GitLab 最近活动 2026-10-20,项目并未停滞。选型时应把它理解为"稳定但缓慢"的传统软件,而非快速迭代的现代项目。
三、核心架构
3.1 分层结构
依据官方源码包目录结构与 INSTALL 文档,DAViCal 的运行时由四层构成:
- 接入层(Apache + PHP):以独立虚拟主机部署,
DocumentRoot指向htdocs/。入口脚本按功能划分:caldav.php为 CalDAV/CardDAV 协议端点,index.php/admin.php为 Web 管理界面,setup.php为安装自检与配置向导,另有freebusy.php、rss.php等辅助端点(来源:源码包 INSTALL / htdocs 目录)。 - 协议层(inc/ 方法分发):
inc/目录采用每个 DAV 方法一个文件的极简分发设计,如caldav-PROPFIND.php、caldav-PUT-vcalendar.php、caldav-REPORT-freebusy.php、caldav-REPORT-cardquery.php、caldav-ACL.php、caldav-MKCOL.php等,请求方法直接映射到同名处理文件(来源:1.1.13 源码包 inc/ 目录)。 - 支撑库(AWL):libawl-php 提供 YAML/PHP 配置解析、会话与认证框架、管理界面渲染等通用能力,与 DAViCal 同仓组织(
davical-project/awl)、同日发布(来源:GitLab / 官网下载页)。 - 存储层(PostgreSQL):全部状态入数据库。
dba/目录包含create-database.sh(建库建角色)、davical.sql/awl-tables.sql(schema)、base-data.sql(初始数据)、patches/(升级补丁)、update-davical-database(升级维护脚本)(来源:源码包 dba/ 目录)。
💡 技术拓展:同类服务器的存储后端选择并不唯一——
方案 代表 特点 关系数据库(PostgreSQL) DAViCal 事件解析入库、可 SQL 审计、支撑大用户量,运维成本最高 关系数据库(SQLite/MySQL) Radicale、Baïkal 单机轻量或通用 DB,规模适中 文件系统 + Git Xandikos 每资源一文件、可版本化,无数据库依赖 DAViCal 选择 PostgreSQL 是其"重后端"路线的根因:权限、调度、告警都依赖数据库能力,代价是安装链最长。
3.2 数据模型与角色设计
- 一切皆表:用户(
usr)、主体(principal,用户/组/资源位统一抽象)、日历与通讯录集合(collection)、事件(event,存 iCalendar 原文并解析出时间索引列)、权限(acl)、属性(property)等全部落在同一个 PostgreSQL 库中,官方 INSTALL 甚至直接用psql davical -c 'select username, password from usr;'来演示初始管理员密码的读取(来源:源码包 INSTALL)。 - 双数据库角色:
davical_dba(DDL 属主,schema 升级用)与davical_app(应用运行时连接,仅 DML 权限),通过create-database.sh与update-davical-database建立和演进,实现"应用账号拿不到改表权"的最小权限分离(来源:源码包 dba/ 脚本)。 - 多域多实例:配置按域名隔离于
/etc/davical/<domain>-conf.php,一套代码可挂多个虚拟主机、各自连不同数据库,官方定位即"每个域一个 DAViCal 实例"(来源:INSTALL / example-config.php)。
3.3 认证体系
认证驱动以可组合的"驱动链"实现,官方源码 inc/ 中可见 drivers_ldap.php、CAS 支持(AWL 层)、Kerberos 支持(ChangeLog 2024-04 记录"LDAP 密码回退即使 Kerberos 激活"),以及本地 PostgreSQL 存储口令(ChangeLog 2024-04 记录"用户凭据成败缓存")。即:本地口令、LDAP/AD、CAS 单点登录、Kerberos 四类账号来源均可用,并可把用户与组从 LDAP 定时同步(scripts/cron-sync-ldap.php)(来源:源码包 ChangeLog / scripts 目录 / example-config.php)。
3.4 权限模型
DAViCal 的 ACL 基于 CalDAV 的 26 位特权位掩码实现,scripts/davical-cli 源码中定义了完整预设组合:读写(read-write)、只读(read)、读+调度(read-schedule)、空闲忙碌可见(freebusy)、默认权限(default)等;支持用户间委托读写、组共享、以及"仅可见忙闲"这类精细粒度,官网首页将"基本读写委托 + 多人先后读写同一日历 + 会议调度与空闲时间展示"列为核心能力(来源:官网首页 / 源码包 scripts/davical-cli)。
四、功能特性
下表按功能域汇总 DAViCal 1.1.13 的特性,均出自官网首页、官方 INSTALL 与源码包 config/example-config.php(查询/核对日期 2026-11-01):
| 功能域 | 特性 | 依据 |
|---|---|---|
| 协议 | CalDAV(RFC 4791)、CardDAV(RFC 6352)、iSchedule 调度、WebDAV 向后兼容访问(可选只读) | 官网首页 / example-config.php readonly_webdav_collections |
| 协议 | 同步 REPORT(sync-collection)、时间范围/属性过滤查询、空闲忙碌查询 | 源码包 inc/caldav-REPORT-*.php |
| 共享 | 26 位 ACL 特权、委托读写、组共享、仅忙闲可见 | 源码包 scripts/davical-cli 权限常量 |
| 调度 | 会议邀请收发、空闲时间展示、告警提醒(邮件),refresh-alarms.php 定时触发 | 官网首页 / 源码包 scripts/ |
| 账号 | 本地口令、LDAP/AD 认证与用户/组同步、CAS、Kerberos、口令找回 | ChangeLog / inc/drivers_ldap.php / example-config.php |
| 管理 | Web 管理界面(用户/主体/集合/权限/告警编辑)、setup.php 安装自检 | INSTALL / htdocs |
| 集成 | 外部日历绑定(订阅远端只读集合,external_refresh 默认 60 分钟)、RSS 输出、整集合 .ics 下载(get_includes_subcollections) | ChangeLog 2024-02 / 官网首页 Leho Kraav 贡献项 / example-config.php |
| 可观测 | 分模块调试日志(dbg request/response/ALL + 按 IP/用户过滤)、审计钩子(log_caldav_action)、Prometheus 风格指标开关 | example-config.php |
| 多租户 | 按域名的多实例配置(/etc/davical/<domain>-conf.php)、管理界面域名/端口收敛(restrict_admin_domain/port) | INSTALL / example-config.php |
| 国际化 | 界面多语言翻译(po/ 目录,官网致谢翻译贡献者) | 官网首页 Credits / 源码包 po/ |
五、快速开始(最小可用示例)
⚠️ 注意:本文为选型篇,以下命令与配置摘自 DAViCal 1.1.13 官方源码包 INSTALL 文档(核对日期 2026-11-01),未在本篇实测;完整可复现的逐步部署与验证见本专栏的部署类文档。
官方 INSTALL 给出的最小安装路径(Debian 系):
# 1. 安装软件包(Debian Sid 仓库提供 davical 与依赖)
apt-get install davical
# 2. 初始化数据库(需以有建库权限的数据库用户执行,脚本会调用 AWL 的 dba 脚本)
dba/create-database.sh
# 3. 编写配置文件 /etc/davical/<domain>-conf.php,官方示例最小集:
<?php
// $c->domainname = "calendar.example.net";
// $c->admin_email = 'admin@example.net';
// $c->system_name = "DAViCal CalDAV Server";
$c->pg_connect[] = 'dbname=davical port=5432 user=general';
?>
# 4. Apache 虚拟主机:DocumentRoot /usr/share/davical/htdocs,
# 并设置 php_value include_path /usr/share/davical/inc:/usr/share/awl/inc
# 5. 浏览器访问管理界面,以 admin 登录;
# 初始密码取 usr 表 password 字段中 '**' 之后的部分:
psql davical -c 'select username, password from usr;'
要点解读(均据 INSTALL):
- DAViCal 占用较深的 URL 路径层级,官方建议独立虚拟主机部署,而非塞进其他应用的 web 根目录。
collections_always_exist默认为 true:无需 MKCALENDAR 即可直接写入日历,官方明确这是为兼容 Evolution、Sunbird/Lightning 等不支持创建日历集合的客户端。- PostgreSQL 可与 Web 服务器分机部署,官方在安全与扩展性场景下推荐这样做。
六、适用场景与限制
6.1 适用场景
- 多用户共享日历的团队/机构:数据库存储 + 26 位 ACL + 组模型,支持"同一日历多人先后读写"与精细委托,是四款候选中权限粒度最细的(来源:官网首页 / 源码包权限常量)。
- 需要会议调度与忙闲查询:iSchedule 与 freebusy 原生支持,配合邮件告警提醒,适合有协同排会需求的场景。
- 已有 LDAP/AD 与 PostgreSQL 运维体系:认证可直接挂企业目录并同步用户组,数据库可复用现有 PG 集群做备份/监控。
- 隐私敏感的自托管:数据全部在自己 PostgreSQL 内,无外部依赖服务。
- 多域名日历托管服务:按域隔离配置的多实例设计源自其早期在托管服务商(Sarenet)的生产环境。
6.2 限制与风险
- 安装链最长:需手工完成 PostgreSQL 角色/schema 初始化、
pg_hba.conf访问控制、Apache 虚拟主机、PHP include_path 与扩展(pgsql、xml/expat)配置,无一条式自动化脚本;对不熟 PHP+PG 组合的运维是主要门槛(来源:INSTALL 全文结构)。 - 数据库绑定 PostgreSQL:不支持 MySQL/SQLite,无法像 Radicale/Baïkal 那样零依赖起步。
- 无官方二进制发行渠道:官网仅提供 tar.xz 源码包与 Debian 仓库渠道(来源:官网下载页),既无跨发行版通用安装包,也无可直接拉取的官方交付制品,标准化打包需自行封装。
- 发布节奏慢:1–3 年一个大版本(见 2.3 节),新特性等待期长;社区规模小(GitLab 112 stars)。
- 自带 CLI 工具陈旧:
davical-cli为 Sarenet 遗留 Perl 脚本,硬编码 FreeBSD 路径与西班牙语日志,需适配后才能用(来源:脚本头部 IMPORTANT NOTES 注释)。 - 无内置日历前端:它只是"存储",用户需另配 Thunderbird/Apple 日历/移动端客户端或前端应用。
- 管理界面偏传统:Web UI 基于 AWL 框架,功能完整但交互风格老旧,无现代 SPA 体验。
七、同类选型对比
7.1 候选一览
- DAViCal 1.1.13:PHP + PostgreSQL 的重型 CalDAV/CardDAV/iSchedule 服务器,权限与调度能力最全(本文主角)。
- Radicale 3.9:Python 单文件部署流派代表,SQLite/文件系统存储,站内已有完整文档族:《Radicale 介绍与选型指南》。
- Baïkal 0.10.1:PHP + SQLite/MySQL 的轻量方案,带管理面板,基于 sabre/dav:《Baïkal 介绍与选型指南》。
- Xandikos 0.4.10:Python 实现,以文件系统 + Git 存储日历/通讯录,无数据库依赖(来源:PyPI / xandikos.org,查询 2026-11-01)。
7.2 能力与架构量化对比
| 维度 | DAViCal 1.1.13 | Radicale 3.9 | Baïkal 0.10.1 | Xandikos 0.4.10 |
|---|---|---|---|---|
| 语言/运行时 | PHP(Apache/mod_php) | Python 3 | PHP(sabre/dav) | Python 3 |
| 存储后端 | PostgreSQL(全量入库) | SQLite / 文件系统 | SQLite / MySQL | 文件系统 + Git |
| CalDAV | ✅ | ✅ | ✅ | ✅ |
| CardDAV | ✅ | ✅ | ✅ | ✅ |
| iSchedule/会议调度 | ✅(邀请/忙闲/邮件告警) | ❌ | ❌ | ❌ |
| 空闲忙碌查询 | ✅ 原生 | ❌ | ❌ | ❌ |
| 权限粒度 | 26 位 ACL + 组 + 委托 | 集合级读写 + 用户/正则规则 | 用户 + 集合权限 + 组 | htpasswd 基础权限 |
| LDAP/AD | ✅ 认证 + 用户/组同步 | 仅认证 | ✅ 认证 | ❌ |
| 单点登录 | CAS / Kerberos | ❌ | ❌ | ❌ |
| Web 管理界面 | ✅ | ✅ | ✅(含安装向导) | ❌ |
| 多域多实例 | ✅(按域配置文件) | 多列表/规则 | 单实例为主 | ❌ |
| 邮件提醒/告警 | ✅(refresh-alarms 定时) | ❌ | ❌ | ❌ |
| 外部日历订阅绑定 | ✅(只读 BIND,60 分钟刷新) | ✅(well-known 同步) | ✅(日历订阅) | ❌ |
| 部署复杂度 | 高(PG schema + Apache + PHP 扩展) | 低(pip/单包) | 低–中(PHP+SQLite) | 低(pip,无 DB) |
7.3 社区活跃度与版本节奏
以下数据均于 2026-11-01 通过 GitHub/GitLab API 与 PyPI 查询:
| 指标 | DAViCal | Radicale | Baïkal | Xandikos |
|---|---|---|---|---|
| 主仓库 | GitLab davical-project/davical | GitHub Kozea/Radicale | GitHub sabre-io/Baikal | GitHub jelmer/xandikos |
| Stars / Forks | 112 / 142 | 5167 / 544 | 3355 / 324 | 613 / 57 |
| 最近活动 | 2026-10-20 | 2026-11-01 | 2026-10-19 | 2026-11-01 |
| 最新稳定版 | 1.1.13(2026-05-11) | 3.9 | 0.10.1 | 0.4.10(2026-10-17) |
| 发布节奏 | 约 1–3 年/版(1.1.11 2022-10、1.1.12 2023-03、1.1.13 2026-05) | 高频(2026-11-01 仍有提交) | 中频 | 极高频(2026-07 至 10 连发 0.4.4→0.4.10 六版) |
| 许可证 | GPL v2 | GPL v3 | GPL v3 | GPL v3 |
解读:社区热度 Radicale ≈ Baïkal ≫ Xandikos ≫ DAViCal;但 fork 数与 DAViCal 接近的"高定制存量"特征(112★/142 forks 的倒挂结构)说明它拥有稳定的生产使用群体,只是少有点赞文化。发布节奏上 DAViCal 最慢、Xandikos 最快。
7.4 选型建议
- 需要会议调度、忙闲共享、邮件提醒、LDAP 组同步、细粒度 ACL 委托 → 选 DAViCal:这四款中唯一把 iSchedule/freebusy/alarm 做成完整闭环的,权限模型也最接近企业日历。
- 个人/小团队,想 10 分钟跑起来 → 选 Radicale(pip 即装)或 Baïkal(带管理面板),避免 DAViCal 的 PG schema/Apache/PHP 扩展手工链。
- 已有 MySQL 或只要 PHP 栈不想碰 PostgreSQL → 选 Baïkal。
- 想要"日历即 Git 仓库"的版本化与纯文件运维 → 选 Xandikos。
- 机构级多域名托管、500+ 用户、需要 SQL 审计日历数据 → 选 DAViCal,其全入库设计在此场景无可替代。
- 无法接受 1–3 年一次大版本、期望快速修复与新特性 → 慎选 DAViCal,其 ChangeLog 显示维护活跃但发版克制。
八、参考链接
- DAViCal 官网:https://www.davical.org/(首页/下载页,查询 2026-11-01)
- DAViCal Wiki(配置项最全的文档地):http://wiki.davical.org/
- GitLab 主仓库:https://gitlab.com/davical-project/davical
- AWL 配套库仓库:https://gitlab.com/davical-project/awl
- 官方下载页(历史版本时间戳):https://www.davical.org/downloads/
- 邮件列表:https://lists.sourceforge.net/mailman/listinfo/davical-general;IRC:irc.oftc.net
#davical - 协议标准:RFC 4791(CalDAV)、RFC 6352(CardDAV)、RFC 4918(WebDAV)、RFC 9610(CalDAV Schedule)
- 站内相关:《Radicale 介绍与选型指南》、《Baïkal 介绍与选型指南》