前言
Zotero 的同步服务是基于 Webdav 运行,默认端口为 80,由于这个端口通常会被占用,因此我们需要使用其他端口来部署。同时,在拥有 ipv6 公网 ip 的情况下,由于许多 Docker 在 bridge+ports 映射的模式下经常只能监听 ipv4 地址,而无法监听 ipv6 地址,因此我们使用自定义镜像的方法,将 Apache 的监听端口由 80 改为 20000,这样就可以在不开启 docker 全局 ipv6 服务的前提下,使得 Zotero 的同步服务支持 ipv6。
创建项目
首先选择一个位置创建 zotero_webdav 目录。在这个目录里创建 Dockerfile,内容填写
FROM bytemark/webdav
RUN sed -i 's/Listen 80/Listen 20000/g' /usr/local/apache2/conf/httpd.conf
然后手动 build 镜像,使用
sudo docker build -t zotero-webdav .
接下来创建 docker-compose.yml,以 host 模式运行,内容如下
services:
zotero:
image: zotero-webdav
container_name: zotero_webdav
restart: unless-stopped
network_mode: host
environment:
AUTH_TYPE: Basic
USERNAME: your_username
PASSWORD: your_password
volumes:
- /your_path/zotero:/var/lib/dav
挂载目录按需修改即可。
启动 docker
在自己的 NAS docker 服务中导入 compose 并且创建 zotero_webdav 服务,至此 docker 就创建完成了。接下来可以查看端口是否正确监听,以及开放防火墙对应端口并且设置端口转发。
在 Zotero 中,选择 Edit->Settings->Sync,找到 File Syncing,勾选 Sync attachment files in My Library using WebDAV,URL 选择 http,填写自己的 ip 或者 DDNS 的对应端口,以及 docker compose 中的用户名和密码即可。
第一次连接时,Zotero 会提示目录 does not exist. Do you want to create it now? 确认并继续即可,现在 Webdav 同步服务已经成功开启了。

