CalDAV网络服务器DAViCal

简介

什么是 DAViCal ?

DAViCal 是一个开源的服务器,用于日历共享,基于 CalDAV 协议实现,旨在存储日历资源(采用 iCalendar 格式)在远程共享服务器上。支持多种客户端的访问。

主要特点

  • DAViCal 是基于 CalDAV 协议的日历共享服务器,支持存储 iCalendar 格式的日历资源。
  • 支持多日历管理和共享,每个日历可设置不同的访问权限,实现多人协作。
  • 支持事件的隐私设置,如私有事件和保密事件,可以控制信息显示范围。
  • 支持日历中的提醒和报警功能,以及空闲/忙碌时间的查询。
  • 与广泛的 CalDAV 客户端兼容,如 Mozilla LightningApple iCaliOS 设备等。
  • 支持读写访问,允许多个用户读取和编辑日历条目。

应用场景

  • 个人数据同步:在手机、电脑、平板等多个设备间无缝同步您的个人日历和联系人。
  • 家庭共享:为家庭成员创建共享日历,方便安排家庭活动。
  • 小团队协作:在小团队内部共享项目日历和客户联系方式。
  • 替代商业服务:作为注重隐私和数据所有权的用户的终极解决方案。

图片来自:https://www.cmdschool.org/archives/3745

DAViCal 提供了强大而灵活的日历共享解决方案,非常适合需要共享和协作的用户或团队。

安装

在群晖上以 Docker 方式安装。

官方没有提供 Docker 镜像,但社区贡献了优秀的解决方案。考虑到 DAViCal 本身只是个服务,而且界面比较丑,所以直接集成了 AgenDAV 作为 Web 客户端

文章传送门:CalDAV网页客户端AgenDAV

DAViCal 现在涉及到数据库、主服务和 Web 界面三个容器,配置较为复杂。推荐使用 docker-compose 进行部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
services:
# shared database
postgres:
image: postgres:15-alpine
container_name: davical-db
restart: unless-stopped
volumes:
- ./data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres

# caldav server
davical:
image: fintechstudios/davical
container_name: davical-server
ports:
- 4082:80
depends_on:
- postgres
environment:
PGHOST: postgres
PGPASSWORD: davical
RUN_MIGRATIONS_AT_STARTUP: "true"
ROOT_PGUSER: postgres
ROOT_PGPASSWORD: postgres
DAVICAL_ADMIN_PASS: laosu123
healthcheck:
test:
- CMD
- curl
- -X
- OPTIONS
- -u
- admin:laosu123
- -f
- http://localhost/caldav.php
interval: 10s
timeout: 5s
retries: 5
start_period: 30s

# web gui for caldav server
agendav:
image: ghcr.io/nagimov/agendav-docker:latest
container_name: davical-web
ports:
- 4089:8080
environment:
- AGENDAV_SERVER_NAME=davical
- AGENDAV_TITLE=laosu Calendar
- AGENDAV_CALDAV_SERVER=http://davical/caldav.php/admin
- AGENDAV_TIMEZONE=Asia/Shanghai
- AGENDAV_LANG=en
- AGENDAV_LOG_DIR=/tmp/

关于环境变量的简单说明

服务 环境变量 说明
postgres POSTGRES_PASSWORD PostgreSQL 数据库的密码,设置为 postgres
POSTGRES_USER PostgreSQL 数据库的用户,设置为 postgres
davical PGHOST PostgreSQL 数据库的主机名,设置为 postgres(服务名)。
PGPASSWORD 用于连接 PostgreSQL 的用户密码,设置为 davical
RUN_MIGRATIONS_AT_STARTUP 启动时运行数据库迁移,设置为 "true"
ROOT_PGUSER 具有创建用户和数据库权限的 PostgreSQL 用户,设置为 postgres
ROOT_PGPASSWORD ROOT 用户的密码,设置为 postgres
DAVICAL_ADMIN_PASS DAViCal 管理员的密码,设置为 laosu123
agendav AGENDAV_SERVER_NAME Agendav 服务器名称,设置为 davical
AGENDAV_TITLE Agendav 界面的标题,设置为 laosu Calendar
AGENDAV_CALDAV_SERVER CalDAV 服务器的 URL,设置为 http://davical/caldav.php/admin
AGENDAV_TIMEZONE 设置时区,设置为 Asia/Shanghai
AGENDAV_LANG 设置语言,设置为 en(英语)。
AGENDAV_LOG_DIR 日志目录,设置为 /tmp/

然后通过 SSH 登录到您的群晖,执行下面的命令:

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 davical 和 子目录
mkdir -p /volume1/docker/davical/data

# 进入 davical 目录
cd /volume1/docker/davical

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

如果日志中看到

1
2
davical-server | [Tue Nov 25 09:16:07.896444 2025] [:crit] [pid 1] (38)Function not implemented: AH00141: Could not initialize random number generator
davical-server exited with code 1

说明你的群晖主机的内核版本太低( Linux kernel < 3.16),除了换机器,没找到其他的办法

运行

服务启动需要一些时间,因为它需要初始化数据库和执行迁移。您可以通过 docker logs davical-server 查看 davical 服务的日志

DAViCal

在浏览器中输入 http://群晖IP:4082 就能看到 DAViCal 的登录界面

  • 用户名admin
  • 密码laosu123 (您在 docker-compose.ymlDAVICAL_ADMIN_PASS 所设置的)

登录后的主界面

新建账号并授权

  • 选择 User Functions –> Create Principa 菜单
  • Username 中填入新的用户,例如 laosu
  • Change PasswordConfirm Password 中填入用户的密码
  • 填写 FullnameEmail Address 等信息
  • Privileges granted 中选择 Read/Write 按钮配置权限
  • 单击 Create 完成用户的创建

现在可以在手机客户端中导入日历

  • 日历同步和导入 –> CalDAV 账号
  • 你输入之前创建的用户名和密码
  • 然后输入连接 http://192.168.0.199:4082/caldav.php/laosu/calendar/,其中 laosu 为用户的账号
  • 如果没有错误提示,则你可以根据向导创建你的日历
  • 创建日历成功后,可使用另外一个 CalDAV 客户端读取当前创建的日历,如果能读到则所有配置成功

AgenDAV

在浏览器中输入 http://群晖IP:4089 就能看到 AgenDAV 的登录界面

可以用管理员 admin/laosu123 或者我们新建的账号 laosu/123456 登录

登录后,您就可以在网页上管理您的日历了

参考文档

DAViCal - DAViCal Home
地址:https://www.davical.org/

DAViCal Project / DAViCal · GitLab
地址:https://gitlab.com/davical-project/davical

fintechstudios/davical-docker: Standalone DAViCal docker image (based on official PHP image)
地址:https://github.com/fintechstudios/davical-docker