QNAP NAS 用 Docker 部署 Radicale

Radicale是一个开源的CalDAVCardDAV服务器,用来存放待办事项、任务、联系人一类的东西。

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 StationGUI 没有提供这些功能。搜索了大概半个小时,也没有找到类似的变通办法,只能是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/dataconfig文件夹,是手动创建的。
  • health-cmd一行,为了适应SSL,手动加了https
  • pids-limit在QNAP中不支持,去掉了
  • config文件夹下应该有config文件,其格式可以看这里
  • config文件中配置SSL证书位置,可以放到挂载的文件夹中,注意路径要写容器内的路径
  • config文件配置的用户密码文件,也可以放在这两个文件夹中挂载进去

以后,即使Docker全部完蛋了,只要/share/Container/Volumes/Radicale/dataconfig文件夹还在,重新下载一个并且用上面的命令再次运行就好了。

一般,能想到用radicale的都是有相关经验的人,也在其他地方有正在使用中的日历软件并且积累了不少数据。

正常来说,应该都能拿到*ics,文件,此时有一个很简单的,文档中没有说的办法来把数据替换成现有的(注意不是导入而是替换):

  1. 在Radicale中新建一个日历;
  2. 下载原来的ics文件,保证访问正常;
  3. 拿到Radicale中此日历的url,一般是https://cloud.tiger2doudou.com:端口号/用户名/一串UUID/这样的;
  4. 把你的ics文件拿到一个有curl命令的地方,执行:curl -u '用户名:密码' -X PUT https:刚才的URL --data-binary @ICS文件路径.ics
  5. 如果ics文件格式没问题,可以看到新建的日历除了URL,已经被整个替换成了ics文件里面的那个,包括名字,当然这个可以后期修改;
  6. 可以把新的事项加进去了。
  • 最后更改: 2020/08/25 07:49