
简介
什么是 DAViCal ?
DAViCal是一个开源的服务器,用于日历共享,基于CalDAV协议实现,旨在存储日历资源(采用iCalendar格式)在远程共享服务器上。支持多种客户端的访问。
主要特点
DAViCal是基于CalDAV协议的日历共享服务器,支持存储iCalendar格式的日历资源。- 支持多日历管理和共享,每个日历可设置不同的访问权限,实现多人协作。
- 支持事件的隐私设置,如私有事件和保密事件,可以控制信息显示范围。
- 支持日历中的提醒和报警功能,以及空闲/忙碌时间的查询。
- 与广泛的
CalDAV客户端兼容,如Mozilla Lightning、Apple iCal、iOS设备等。 - 支持读写访问,允许多个用户读取和编辑日历条目。
应用场景
- 个人数据同步:在手机、电脑、平板等多个设备间无缝同步您的个人日历和联系人。
- 家庭共享:为家庭成员创建共享日历,方便安排家庭活动。
- 小团队协作:在小团队内部共享项目日历和客户联系方式。
- 替代商业服务:作为注重隐私和数据所有权的用户的终极解决方案。

DAViCal 提供了强大而灵活的日历共享解决方案,非常适合需要共享和协作的用户或团队。
安装
在群晖上以 Docker 方式安装。
官方没有提供 Docker 镜像,但社区贡献了优秀的解决方案。考虑到 DAViCal 本身只是个服务,而且界面比较丑,所以直接集成了 AgenDAV 作为 Web 客户端
文章传送门:CalDAV网页客户端AgenDAV
DAViCal 现在涉及到数据库、主服务和 Web 界面三个容器,配置较为复杂。推荐使用 docker-compose 进行部署
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 登录到您的群晖,执行下面的命令:
# 新建文件夹 davical 和 子目录
mkdir -p /volume1/docker/davical/data
# 进入 davical 目录
cd /volume1/docker/davical
# 将 docker-compose.yml 放入当前目录
# 一键启动
docker-compose up -d

如果日志中看到
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.yml中DAVICAL_ADMIN_PASS所设置的)
登录后的主界面

新建账号并授权

- 选择
User Functions-->Create Principa菜单 - 在
Username中填入新的用户,例如laosu - 在
Change Password和Confirm Password中填入用户的密码 - 填写
Fullname、Email 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
2846

被折叠的 条评论
为什么被折叠?



