利用闲置服务器完成Zotero扩容

经验分享

Zotero 好用,但免费云不太够用

众所周知,Zotero 作为一款好用、开源的文献管理工具,还能安装各种插件满足自己的个性化需求,可以说是一直广受科研民工人士的喜爱。但是吧,300 MiB 的免费同步空间对于有收集癖博览群文的人来说还是有点不太够用,虽说官方 3 GiB的空间只要 20 USD 每年,但想想自己有那么多的云服务还没用上,这钱花的多少有点不舒服,好在 Zotero 支持使用 WebDAV 协议进行同步,这就有了很大的发挥空间。

自建 or 商业服务

说实话,一般能看到我这博客的人应该都是跳过这个选择,直接看自建教程了,但其实成熟的云盘服务是很省心的,如果在用的网盘支持使用 WebDAV(国内好像只有坚果云,以前 iCloud 也可以现在不行了,dropbox、teracloud、box应该可以),直接使用挺好的。不过不推荐将数据库直接放入 OneDrive/iCloud 云盘等的行为,官方说这样有可能会损坏数据库。如果你和我一样没有在用这些网盘的服务,且具有一定的折腾能力和闲置的云端资源,就进入正片吧。

Web 服务器

其实只需要使用 WebDAV 的话有不少服务端是可以直接使用的,但往往服务器上都有一些其他的网页服务,所以还是需要类似 Apache、Nginx、Caddy 这类 Web Server 的。我用过 Nginx 和 Caddy,现在感觉 Caddy 这个东西配置起来真是比 Nginx 方便太多了,证书不用自己管,各种设置也相对直观一些,但是比较麻烦的地方在于模块,不少时候都要借助于 XCaddy,而 Nginx 的很多模块都可以直接通过包管理器来安装,方便一点,这个选择全看个人偏好。 本文主要记录使用 Caddy 的过程,Nginx 的有空再说() Caddy的安装非常简单,按照官方给出的命令即可:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

证书

都 4202 年了,别再 HTTP 裸奔了,上 HTTPS 吧! 如果不是在其他地方生成的证书,且用的是 Caddy,跳过直接在配置里面写上 tls 选项就行,非常好用 用 Nginx 的话就得 acme.sh 了,网上也有很多的教程,官方文档也很全,过()。

Caddy 模块配置

Caddy 原生的模块里面是没有 WebDAV 支持的,这里用到了 mholt/caddy-webdav 项目,有两种方式可以安装插件,没有什么冲突的简单插件比如这个 webdav ,就可以使用

sudo caddy add-package github.com/mholt/caddy-webdav

来添加,添加之后重启 Caddy 即可:

sudo systemctl restart caddy

如果还有其他插件,需要手动使用 XCaddy 编译时,就比较麻烦一点了

GO 安装

这边使用的是 amd64 的架构的,不一样记得换

#!/bin/bash
# Get latest version Go from Google
wget "https://dl.google.com/go/$(curl https://go.dev/VERSION?m=text).linux-amd64.tar.gz" -O go.linux-amd64.tar.gz
tar -xvf go.linux-amd64.tar.gz

# Move Go to the system directory
sudo mv go /usr/local

# Set up Go environment variables
echo 'export GOROOT=/usr/local/go' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> ~/.bashrc
source ~/.bashrc

XCaddy 安装

go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest

编译并替换原版

xcaddy build --with github.com/mholt/caddy-webdav
sudo mv caddy /usr/local/bin/caddy
sudo systemctl restart caddy

配置 Caddyfile

首先确定 WebDAV 对应的目录,下文都写为 /path/to/dav,然后确定密码,Caddyfile 中的密码是 hashed,可以通过 caddy hash-password 命令生成,记录生成出的密文。 一个标准的 Caddyfile 类似于这样:

example.com {
    tls mail@example.com
    root * /var/www/wordpress
    encode gzip
    php_fastcgi unix//run/php/php-version-fpm.sock
}

我们要添加的是 webdav directive,并且要确保它的优先级在正确的位置。如果是上文这种配置,应该修改成这样:

example.com {
    tls mail@example.com
    {
        # ensure webdav is before file_server
        order webdav before file_server
    }

    root * /var/www/wordpress
    encode gzip
    php_fastcgi unix//run/php/php-version-fpm.sock

    rewrite /webpath /webpath/
        route {
            basic_auth /webpath/* {
                        USERNAME THE_HASHED_PASSWORD
                }
                webdav /webpath/* {
                        # webpath is the url you use in real application
                        root /path/to/dav
                        prefix /path/to/dav
                }
            }
}

保存后直接重启 Caddy ,如果不报错,服务端配置就结束了。

Zotero 验证

同步方式选 WebDAV,网址记得选 https,填上 example.com/webpath 填好用户名密码,验证服务器,通过就结束了,愉快享受同步扩容的结果。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理