通过Nginx创建WebDAV服务同步Zotero文献
Zotero 提供了免费的 300MB 同步空间,文献多了之后存不下了。好在 Zotero 还支持通过 WebDAV 的方式同步文件,这篇文章分享一下具体的部署过程。
设备选择
首先,需要一台装有 Linux 系统的电脑,云主机或者 NAS 都可以。我部署 WebDAV 的设备是一台旧办公本,装上了 Ubuntu 系统放在宿舍里 7x24h 运行着,算是一台服务器了。因为我需要同步文献的设备总是连接着校园网,所以也不需要公网 IP。
如果读者的设备不能总在同一个局域网,那么你只能考虑有公网 IP 的 NAS 或者云主机了。
安装 Nginx
通过包管理器 apt 安装 nginx:
1 | sudo apt-get update |
安装好之后可以通过 curl 检测下 nginx 是不是装好了。
1 | curl http://localhost |
如果显示下面的内容,能找到“Welcome to nginx!”的句子,就说明安装成功了。
1 | > curl http://localhost |
也有可能提示找不到 curl,那么可以用包管理器装一下 curl 然后再试一次。执行:
sudo apt-get install curl
安装 curl。
配置 WebDAV
接下来,需要使用编辑器 nano 在 Nginx 的配置文件目录中创建一个配置文件,配置 WebDAV 服务的相关设置。
1 | sudo nano /etc/nginx/conf.d/webdav.conf |
如果你的 Linux 系统有 GUI 界面,可以用 VSCode 等可视化编辑器操作
往里面填入以下配置文件内容,可以根据情况修改端口(比如 17780 可以改成别的端口)、路径等参数:
1 | server { |
按下快捷键 Ctrl+O 保存退出。
执行以下指令,让 Nginx 重新载入所有配置文件。如果没有任何输出,说明配置文件的内容正确。
1 | sudo nginx -s reload |
现在,需要创建一些目录。这里的 -p
参数的作用是递归地创建目录,能够同时创建一条路径里所有不存在的目录。
1 | sudo mkdir -p /var/www/dav/tmp |
然后,需要改变这些目录的拥有者为 www-data。
1 | sudo chown -R www-data /var/www/dav/tmp |
创建认证用户
这里要用到 Apache Utils,通过包管理器安装:
1 | sudo apt-get install apache2-utils |
执行下面的指令,他会创建一个 .htpasswd 文件。其中 exampleuser 是用户名,将它改成你自己的英文名字。回车执行之后,会提示你输入两次密码,这是认证用的密码。
1 | sudo htpasswd -c /var/www/dav/.htpasswd exampleuser |
如果一切顺利,执行下面的指令,可以看到一对用冒号分隔的用户名和密码哈希。
1 | sudo cat /var/www/dav/.htpasswd |
内容结构类似于:
1 | login:password |
在 Zotero 中测试
最后在 Zotero 里同步方式选择 WebDAV 就好了。
如果 Zotero 的同步没有反应(表现在没有新文件出现在 /var/www/dav/webdav_root
里),需要关闭 Zotero 的自动同步,然后手动点击同步按钮同步一次,这样可以强制 Zotero 进行一次完全同步。同步完成后再把自动同步开回来。
错误排查
上面 WebDAV 服务所涉及的目录都需要有执行权限,你可以通过 chmod 指令给相关目录赋予执行权限。
比如我的相关目录都改到了 /home/ubuntu 中:
1 | sudo chmod +x /home/ubuntu/dav |
如果还有其他错误,可以通过查看 Nginx 的错误日志进一步排查。
1 | sudo cat /var/log/nginx/error.log |
通过Nginx创建WebDAV服务同步Zotero文献