迁移通知
本站内容正在逐步向 https://www.weiran.ink 迁移,更新内容请到新站查找。
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
文件中配置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
文件里面的那个,包括名字,当然这个可以后期修改;