Radicale是一个开源的CalDAV
和CardDAV
服务器,用来存放待办事项、任务、联系人一类的东西。
QNAP NAS 理论上可以添加 QNAP Club 源直接安装 Radicale,但是安装的版本没有SSL,运行貌似也不容易(反正我是打不开登录界面也不知道怎么配置),所以还不如在Container Station
上面自己来一个。
平时自己玩过几次Docker,都是当虚拟机用,但这一次可以说是生产环境,再把数据全写到Docker里面就太心大了,必须挂载到外面来,保证整个Docker没了也不会丢数据。
按这个原则,找到了这个Docker镜像,直接提供了把配置和数据挂载出来的方法:
docker run -d --name radicale \
-p 127.0.0.1:5232:5232 \
--read-only \
--init \
--security-opt="no-new-privileges:true" \
--cap-drop ALL \
--cap-add CHOWN \
--cap-add SETUID \
--cap-add SETGID \
--cap-add KILL \
--pids-limit 50 \
--memory 256M \
--health-cmd="curl --fail http://localhost:5232 || exit 1" \
--health-interval=30s \
--health-retries=3 \
-v ~/radicale/data:/data \
-v ~/radicale/config:/config:ro \
tomsquest/docker-radicale
但是这个配置显然是过于复杂了,Container Station
的 GUI 没有提供这些功能。搜索了大概半个小时,也没有找到类似的变通办法,只能是ssh
进去,命令行的干活。好在命令行的结果也会反映在GUI中,当然那些复杂的选项仍然是不显示的。
过几次尝试,合理的命令是:
docker run -d --name radicale \
-p 5232:5232 \
--read-only \
--init \
--security-opt="no-new-privileges:true" \
--cap-drop ALL \
--cap-add CHOWN \
--cap-add SETUID \
--cap-add SETGID \
--cap-add KILL \
--memory 256M \
--health-cmd="curl --fail https://localhost:5232 || exit 1" \
--health-interval=30s \
--health-retries=3 \
--restart=always \
-v /share/Container/Volumes/Radicale/data:/data \
-v /share/Container/Volumes/Radicale/config:/config:ro \
tomsquest/docker-radicale
其中:
127.0.0.1
/share/Container/Volumes/Radicale/data
和config
文件夹,是手动创建的。health-cmd
一行,为了适应SSL,手动加了httpspids-limit
在QNAP中不支持,去掉了config
文件夹下应该有config
文件,其格式可以看这里config
文件中配置SSL证书位置,可以放到挂载的文件夹中,注意路径要写容器内的路径config
文件配置的用户密码文件,也可以放在这两个文件夹中挂载进去以后,即使Docker全部完蛋了,只要/share/Container/Volumes/Radicale/data
和config
文件夹还在,重新下载一个并且用上面的命令再次运行就好了。
一般,能想到用radicale的都是有相关经验的人,也在其他地方有正在使用中的日历软件并且积累了不少数据。
正常来说,应该都能拿到*ics
,文件,此时有一个很简单的,文档中没有说的办法来把数据替换成现有的(注意不是导入而是替换):
ics
文件,保证访问正常;https://cloud.tiger2doudou.com:端口号/用户名/一串UUID/
这样的;ics
文件拿到一个有curl
命令的地方,执行:curl -u '用户名:密码' -X PUT https:刚才的URL --data-binary @ICS文件路径.ics
ics
文件格式没问题,可以看到新建的日历除了URL,已经被整个替换成了ics
文件里面的那个,包括名字,当然这个可以后期修改;