CalDAV网络服务器Baikal

什么是 Baikal ?

Baikal 是一个免费的开源自托管 CalDavCardDav 服务器,适用于想要管理其数据并确保其数据是私有的用户。

Baikal和群晖套件中的 Synology Calendar 是类似的应用;

什么是 CalDav ?

CalDav 是一种互联网标准和协议,用于跨设备和服务同步日历。它通常用于在您的日历应用程序、网络邮件、设备和服务之间同步您的日历事件。

什么是 CardDav?

CardDavvCard 是地址簿客户端/服务器协议和标准,也是 WebDav 的扩展,允许用户在兼容的服务器上存储、同步和共享他们的联系人数据。CardDAV 协议由 IETF 开发,并于 20118 月发布为 RFC 6352

安装

建数据库

老苏用了群晖自带的 MariaDB 10 数据库。

phpMyAdmin 中创建名为 baikal 的空数据库。

为便于说明,假设数据库密码为 123456,但实际上可能是用的 9YdLh!Y#qK6v

安装镜像

在群晖上以 Docker 方式安装。

在注册表中搜索 baikal ,选择第一个 ckulka/baikal,版本选择 nginx

docker 文件夹中,创建一个新文件夹 baikal,并在其中建两个子文件夹,分别是 configdata

文件夹 装载路径 说明
docker/baikal/config /var/www/baikal/config 存放设置
docker/baikal/data /var/www/baikal/Specific 存放数据

端口

本地端口不冲突就行,不确定的话可以用命令查一下

1
2
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 容器端口
13281 80

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 新建文件夹 baikal 和 子目录
mkdir -p /volume2/docker/baikal/{config,data}

# 进入 baikal 目录
cd /volume2/docker/baikal

# 运行容器
docker run -d \
--restart always \
--name baikal \
-p 13281:80 \
-v $(pwd)/config:/var/www/baikal/config \
-v $(pwd)/data:/var/www/baikal/Specific \
ckulka/baikal:nginx

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
version: "2"

services:
server:
image: ckulka/baikal:nginx
container_name: baikal
restart: always
ports:
- "13281:80"
volumes:
- ./config:/var/www/baikal/config
- ./data:/var/www/baikal/Specific

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 baikal 和 子目录
mkdir -p /volume2/docker/baikal/{config,data}

# 进入 baikal 目录
cd /volume2/docker/baikal

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

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:13281 就能看到主界面

关于 WebDAV authentication type 有三个选项

  • Basic:应该是指基本用户验证;
  • Digest:消息摘要式身份验证;
  • Apache:使用 Apache 模块(例如 LDAPKerberosSASL)提供高级身份验证方法;

老苏选择了最简单的 Basic 认证,一方面是对 Apache 等不熟悉,也没找到相关资料,另一方面考虑到 CalDAV 客户端对认证的要求,比如 AgenDAV 就支持 Basic

Admin password 要记牢,后面登录后台会用到;

默认数据库使用的是 SQLite

如果多人一起用,MariaDB 性能会更高一些,这个看你应用的情况

如果数据库端口用的是 3306,可以不用带端口,但老苏用了 MariaDB 10

如果设置没问题的话,就可以点 start using baikal 开始使用了

先要登录,这里用到了我们前面设置的 Admin password

Authenticate 登录成功后会看到 Dashboard 主界面

进入 User and resources 菜单

Add User 新建一个用户

点开 Setup info,这里有 CalDAV 客户端登录时会用到 URI 和刚刚创建的用户账号、密码

到这里服务的设置就完成了

使用

Android

老苏是小米手机,自带的 日历 就支持自定义的 CalDAV 服务

打开 日历 应用,点右上角的三个点进入 设置

进入 日程导入

Caldav账号导入

添加 CalDAV 账号

添加完成后,除了 小米日历 外,还有我们刚添加的 Default calendar

Default calendar 这个名字在客户端改不了,需要到服务端修改

现在 创建日程 时,日历账户 可以选择默认账号了

iOS

iOS 设备上,进入设置 –> 日历 –> 帐户 –> 添加帐户,选择 其他

添加 CalDAV 账户

需要注意的是,iOS 不支持 http 协议,会显示 CalDAV 账号验证失败

所以要做反代处理,没有什么特殊设置

在日历中,暂时还没有,需要先 添加日历

随便建了一个

现在有 CalDAV 上有日历了

新建日程时已经可以选择 CalDAV 服务上的新日历了

参考文档

sabre-io/Baikal: Baïkal is a Calendar+Contacts server
地址:https://github.com/sabre-io/Baikal

ckulka/baikal-docker: Dockerfile for a ready-to-go Baikal server
地址:https://github.com/ckulka/baikal-docker

Installation using Docker - baikal
地址:https://sabre.io/baikal/docker-install/