1126 字
6 分钟
Zotero自建WebDAV同步服务

Zotero的同步分为两层,条目数据同步和附件文件同步。条目数据走官方服务器,免费同步,而附件同步则要么走官方的付费同步,要么使用WebDAV同步(Zotero官方不建议通过网盘同步数据库)。

官方的同步价格高昂,所以笔者选择WebDAV同步方式。但是,走WebDAV也并不是免费的。笔者曾使用坚果云进行免费同步,但是由于坚果云免费版每月只有1GB上传/3GB下载配额,笔者有时迁移数据库则显得不太够用。因此,笔者选择自建WebDAV服务用于Zotero文件同步。当然,具体服务端的配置则是使用了Hermes Agent辅助配置。

基本原理与条件#

本方案主要是在自有服务器中,通过Apache开一个WebDAV客户端,然后让Zotero走Tailscale进行读写。

正式开始前需要准备:

  • 一台安装了Docker的服务器(NAS、云服务器甚至旧电脑)
  • 一个 Tailscale 账号,服务器上安装好 tailscale 并登录
  • 需要同步的电脑上装好 Zotero

配置方法#

开启 Tailscale HTTPS#

Tailscale 能给你的机器发一个 Let’s Encrypt 证书,这样 Zotero 连上来是 https:// 加密的,不需要自己买域名、配证书。

  1. 打开 Tailscale Admin Console → DNS 页
  2. 打开 MagicDNS(让每台设备有 xxx.ts.net 域名)
  3. 打开 HTTPS Certificates(Tailscale 自动签发和续期证书)

做完后,在服务器上执行 tailscale status 能看到类似:

100.x.y.z my-server your-server linux -

机器名就是你的子域名前缀。

创建目录和配置文件#

在服务器上建目录(路径随意,以下用 ~/zotero-webdav):

Terminal window
mkdir -p ~/zotero-webdav-build ~/zotero-webdav

~/zotero-webdav-build/ 放构建文件(Dockerfile + 配置),~/zotero-webdav/ 是数据目录。

写Dockerfile#

文件 ~/zotero-webdav-build/Dockerfile

# 官方 Apache httpd WebDAV 服务器(零第三方代码)
FROM httpd:2.4-bookworm
# 启用 WebDAV 和认证所需的模块(官方镜像自带,默认注释掉)
RUN sed -i '/^#LoadModule dav_module/s/^#//' conf/httpd.conf \
&& sed -i '/^#LoadModule dav_fs_module/s/^#//' conf/httpd.conf \
&& sed -i '/^#LoadModule auth_basic_module/s/^#//' conf/httpd.conf \
&& sed -i '/^#LoadModule authn_file_module/s/^#//' conf/httpd.conf \
&& sed -i '/^#LoadModule authz_core_module/s/^#//' conf/httpd.conf \
&& sed -i '/^#LoadModule authz_user_module/s/^#//' conf/httpd.conf
# 挂入 WebDAV 站点配置
COPY dav.conf conf/extra/dav.conf
RUN echo 'Include conf/extra/dav.conf' >> conf/httpd.conf
# 数据目录(docker run 时挂载宿主目录)
RUN mkdir -p /var/lib/dav/data && chown -R www-data:www-data /var/lib/dav
EXPOSE 80/tcp

写 dav.conf(Apache 的 WebDAV 站点配置)#

文件 ~/zotero-webdav-build/dav.conf

# WebDAV 配置:/dav/ -> /var/lib/dav/data/
# 认证方式必须用 Basic(Zotero 7/8 的 Digest 认证会报 Permission Denied)
DavLockDB /var/lib/dav/DavLock
# Alias 不带尾斜杠,同时匹配 /dav 和 /dav/
Alias /dav /var/lib/dav/data/
<Directory /var/lib/dav/data/>
Dav On
Options Indexes
AuthType Basic
AuthName "Zotero WebDAV"
AuthUserFile /usr/local/apache2/user.passwd
Require valid-user
</Directory>

构建镜像#

Terminal window
cd ~/zotero-webdav-build && docker build -t zotero-webdav:local .

创建登录账号密码#

WebDAV 需要账号密码(Basic 认证),用 Apache 的 htpasswd 工具生成:

Terminal window
# 密码文件必须先创建(Docker 挂载不存在的文件会当成目录挂载,很坑)
touch ~/zotero-webdav.passwd
# 创建用户 zotero,密码换成你自己的
docker run --rm -v ~/zotero-webdav.passwd:/usr/local/apache2/user.passwd \
httpd:2.4-bookworm htpasswd -B -b /usr/local/apache2/user.passwd zotero 你的密码

-B 表示用 bcrypt 加密存储,安全。以后想加用户、改密码,都重复这条命令。

修正数据目录权限#

容器里的 Apache 以 www-data(uid 33)运行,宿主机挂载的数据目录必须匹配,否则容器写不进去:

Terminal window
# 用容器内 root 执行 chown,避免 sudo
docker run --rm -v ~/zotero-webdav:/var/lib/dav/data \
httpd:2.4-bookworm chown -R 33:33 /var/lib/dav/data

启动容器#

Terminal window
docker run -d --name zotero-webdav --restart unless-stopped \
-p 127.0.0.1:8080:80 \
-v ~/zotero-webdav:/var/lib/dav/data \
-v ~/zotero-webdav.passwd:/usr/local/apache2/user.passwd \
zotero-webdav:local

说明:

  • -p 127.0.0.1:8080:80:只绑定本机回环端口 8080,不暴露到局域网/公网
  • --restart unless-stopped:服务器重启后容器自动恢复
  • 两个 -v:数据目录 + 密码文件

验证容器在跑:

Terminal window
docker ps | grep zotero-webdav
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/dav/
# 返回401

用 Tailscale 暴露服务#

服务器上执行:

Terminal window
tailscale serve --bg --https=8443 http://127.0.0.1:8080
  • 8443 端口是因为默认的 443 可能被其他服务占用
  • 这条命令让 Tailscale 把 https://你的机器名.tailnet.ts.net:8443/ 转发到本地 8080 的容器

查看状态:

Terminal window
tailscale serve status

看到类似输出即成功:

https://my-server.tailXXXX.ts.net:8443 (tailnet only)
|-- / proxy http://127.0.0.1:8080

现在用浏览器访问 https://你的机器名.ts.net:8443/dav/,会弹出账号密码框,输入刚才的 zotero / 密码,能看到目录列表。

Zotero 客户端配置#

在每一台需要同步的电脑上:

  1. 打开 Zotero → 设置(Preferences)→ 同步(Sync)
  2. 先登录 Zotero 账号
  3. 在”文件同步”区域,把同步方式从”Zotero 存储”改成 WebDAV
  4. 填入:
    • URL: https://你的机器名.tailnet.ts.net:8443/dav/
    • 用户名: zotero
    • 密码: 刚才设的密码
  5. 点 Verify Server,通过即可。
Zotero自建WebDAV同步服务
https://arslinear.com/p/t8tw9Lb3/
作者
Arlyn
发布于
2026-08-08
许可协议
CC BY-NC-SA 4.0