DAViCal 介绍与选型指南

DAViCal 是基于 PHP+PostgreSQL 的自托管 CalDAV/CardDAV/iSchedule 日历与通讯录服务器;本文联网溯源官网、GitLab 与 GitHub/PyPI,梳理其定位、架构、功能与发布节奏,并与 Radicale/Baïkal/Xandikos 量化对比给出选型建议。

DAViCalDAViCalCalDAVCardDAV日历PHPPostgreSQL自托管2026/11/01

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 包版本与发布日期
  • 版本基线:
组件版本来源
DAViCal1.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 / 官网下载页
Radicale3.9GitHub
Baïkal0.10.1GitHub
Xandikos0.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 系协议对比——

协议标准定位
WebDAVRFC 4918基于 HTTP 的通用文件读写与元数据管理,CalDAV/CardDAV 的底座
CalDAVRFC 4791在 WebDAV 上扩展日历集合(VCALENDAR)、时间查询 REPORT、调度
CardDAVRFC 6352在 WebDAV 上扩展通讯录集合(VCARD)与联系人搜索
iScheduleRFC 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-20GitLab 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.32020-04-14—
1.1.102021-03-02—
1.1.112022-10-04同日发布 AWL 0.63
1.1.122023-03-14同日发布 AWL 0.64
1.1.132026-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 的运行时由四层构成:

  1. 接入层(Apache + PHP):以独立虚拟主机部署,DocumentRoot 指向 htdocs/。入口脚本按功能划分:caldav.php 为 CalDAV/CardDAV 协议端点,index.php/admin.php 为 Web 管理界面,setup.php 为安装自检与配置向导,另有 freebusy.php、rss.php 等辅助端点(来源:源码包 INSTALL / htdocs 目录)。
  2. 协议层(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/ 目录)。
  3. 支撑库(AWL):libawl-php 提供 YAML/PHP 配置解析、会话与认证框架、管理界面渲染等通用能力,与 DAViCal 同仓组织(davical-project/awl)、同日发布(来源:GitLab / 官网下载页)。
  4. 存储层(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,规模适中
文件系统 + GitXandikos每资源一文件、可版本化,无数据库依赖

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.13Radicale 3.9Baïkal 0.10.1Xandikos 0.4.10
语言/运行时PHP(Apache/mod_php)Python 3PHP(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 查询:

指标DAViCalRadicaleBaïkalXandikos
主仓库GitLab davical-project/davicalGitHub Kozea/RadicaleGitHub sabre-io/BaikalGitHub jelmer/xandikos
Stars / Forks112 / 1425167 / 5443355 / 324613 / 57
最近活动2026-10-202026-11-012026-10-192026-11-01
最新稳定版1.1.13(2026-05-11)3.90.10.10.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 v2GPL v3GPL v3GPL 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 介绍与选型指南 - Quzuo