前言
作为一名技术书籍阅读者和笔记爱好者,Zotero 无疑是文献和书籍管理的利器。然而,官方免费账户仅提供 300MB 的附件存储空间。面对动辄几十上百 MB 的 PDF/EPUB 技术巨著,升级官方存储或者寻找第三方网盘都不够优雅。
最完美的方案,就是利用自己闲置的服务器,通过 WebDAV 协议搭建一个专属的附件同步服务。这样既能保证数据隐私,又能享受无上限的存储空间。
本文记录了在宝塔面板 + Docker 环境下,从零搭建 WebDAV 并最终升级为 HTTPS 加密域名访问的完整踩坑过程。
【环境准备】
服务器:阿里云 ECS(Alibaba Cloud Linux 3)
环境:Docker、Docker Compose、宝塔面板(已运行 Halo 博客、Gitea 等服务)
域名:已备案域名(如 howier.top),并解析了一个子域名 zotero.howier.top 指向服务器公网 IP。
第一步:Docker 部署 Zotero WebDAV 服务
为了避免复杂的配置,我们采用专为 Zotero 设计的轻量级镜像 gzurowski/zotero-dav。
1. 解决网络问题
国内服务器直接拉取 Docker Hub 镜像大概率会超时。需要先配置镜像加速器,修改 /etc/docker/daemon.json:
{
"registry-mirrors": [
"https://docker.xuanyuan.me",
"https://docker.1ms.run",
"https://docker.m.daocloud.io"
]
}重启 Docker:sudo systemctl daemon-reload && sudo systemctl restart docker。
(注:如果服务器上有其他容器,重启 Docker 会导致它们短暂掉线,建议提前确保所有容器都有 restart: unless-stopped 策略)
2. 编写 Docker Compose 文件
在服务器的 /opt/zotero-webdav 目录下创建 docker-compose.yml。
⚠️ 端口避坑:如果你的服务器上 Nginx 已经占用了 8080(比如我的 Halo 博客就在用),务必将其映射为其他端口,这里我们选择 8081。
services:
zotero:
image: gzurowski/zotero-dav
container_name: zotero-webdav
restart: unless-stopped
ports:
- "8081:80" # 宿主机 8081 映射到容器 80
environment:
- ZOTERO_USER=myuser
- ZOTERO_PASS=mysecretpassword
volumes:
- zotero-data:/var/lib/dav/data
volumes:
zotero-data:
运行 sudo docker compose up -d,容器即可在后台运行。
3. 本地验证
使用 curl 进行 WebDAV 连通性测试:
curl -u myuser:mysecretpassword -X PROPFIND http://127.0.0.1:8081/zotero/ -v
如果返回 207 Multi-Status,说明服务端已完全就绪。
第二步:安全升级,配置 HTTPS 与反向代理
为什么不能直接用 IP:8081?
1. HTTP 明文传输极不安全,且容易被运营商干扰。
2. 客户端(特别是移动端)由于安全策略,强制要求 WebDAV 必须走 HTTPS。
3. 默认的 30 秒网络超时,在 HTTP 环境下极易报错 Request timed out。
因此,我们需要用宝塔面板的 Nginx 为它套上一层域名和 SSL。
1. 解析域名:在 DNS 处添加 A 记录,将 zotero.howier.top 指向服务器。
2. 新建站点:在宝塔面板新建纯静态站点 zotero.howier.top。
3. 申请证书:在站点设置中申请 Let's Encrypt 免费证书并开启强制 HTTPS。
4. 配置反向代理:添加反向代理,目标 URL 填 http://127.0.0.1:8081。(注意:这里千万不要带 /zotero/ 路径)。
⚠️ 413 Payload Too Large 踩坑
在网页端测试同步时,可能会遇到 HTTP 413 错误。这是因为 Nginx 默认限制了客户端上传文件的大小(通常只有 1MB)。需要在站点的 Nginx 配置文件的 server {} 块中添加:
client_max_body_size 0; # 0 表示不限制大小
保存后重载 Nginx,大文件即可顺畅传输。
第三步:Zotero 客户端与移动端配置
经过上述配置,我们的私有云地址已经变成了:https://zotero.howier.top/zotero/
在 Zotero 桌面端的“编辑 → 设置 → 同步 → 文件同步”中选择 WebDAV,填入:
· URL:https://zotero.howier.top/zotero/ (结尾的 /zotero/ 绝对不能少,否则 404)
· 用户名 和 密码:Docker 配置中的值。
点击“验证服务器”,秒过。之后你的所有附件都会加密同步到你自己的服务器上。
iOS 和 Android 的 Zotero 客户端同样填入此地址,即可完美同步附件。
进阶:与 Obsidian 打通(ZotFlow 插件)
如果你有在 Obsidian 中阅读书籍并写笔记的习惯,可以安装 ZotFlow 插件。它能让你在 Obsidian 里直接打开 Zotero 的 PDF 并做双向标注同步。
本地书籍阅读优化:
如果你在 Zotero 里存了大量书籍(如 1GB 以上),不希望 ZotFlow 再次从 WebDAV 下载:
1. 在 Zotero 设置中,将“链接附件的根目录”设为你本地的书籍文件夹。
2. 在 ZotFlow 设置中,将 Linked Attachment Base Directory 设为同一个路径。
3. ZotFlow 就会直接读取本地文件,实现零延迟阅读!