Unix: add zotero setup
This commit is contained in:
parent
f6315eb6a9
commit
73b48c2e56
1 changed files with 120 additions and 0 deletions
120
src/content/unix/zotero-webdav.md
Normal file
120
src/content/unix/zotero-webdav.md
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
---
|
||||||
|
title: 'Zotero + Webdav'
|
||||||
|
description: 'Setting up Zotero with unlimited storage with Webdav'
|
||||||
|
updateDate: 'Sept 05 2024'
|
||||||
|
---
|
||||||
|
|
||||||
|
[Zotero](https://www.zotero.org/) is an open source "reference manager". For
|
||||||
|
students, it's an effective way to annotate and organize research papers. It
|
||||||
|
also does automatic citation!
|
||||||
|
|
||||||
|
By default, Zotero offers 300MB of cloud storage for free. If you're reading
|
||||||
|
lots of papers and need to backup many pdfs, you'll need to upgrade to a [paid
|
||||||
|
plan](https://www.zotero.org/storage)... unless you self-host!
|
||||||
|
|
||||||
|
In this guide, we'll setup a webdav server to give us unlimited cloud storage we
|
||||||
|
control. You'll need:
|
||||||
|
- A computer that's always on (or a cloud vm)
|
||||||
|
|
||||||
|
|
||||||
|
## Zotero Setup
|
||||||
|
|
||||||
|
Start by [installing Zotero](https://www.zotero.org/download/) on your client
|
||||||
|
device. The client device can also be the server! You can have any number of
|
||||||
|
clients later. The AUR has zotero for archlinux, and `brew` has it for macos.
|
||||||
|
It's also available on the ios app store.
|
||||||
|
|
||||||
|
Register for a zotero account... we need to do this even if we're self-hosting
|
||||||
|
the cloud. Go to Edit -> Settings -> Sync -> File Syncing, and sign in there. We
|
||||||
|
will revisit this page shortly.
|
||||||
|
|
||||||
|
## Webdav
|
||||||
|
|
||||||
|
Webdav serves files over http. This is the underlying protocol zotero uses to
|
||||||
|
synchronize your files. There are many options to [self-host
|
||||||
|
webdav](https://wiki.archlinux.org/title/WebDAV#rclone), but I would recommend
|
||||||
|
[rclone](https://rclone.org/). Rclone is a sort of cloud multi-tool, able to
|
||||||
|
interact with almost every type of cloud storage. It can both serve and receive
|
||||||
|
webdav requests!
|
||||||
|
|
||||||
|
I assume you're using caddy as a reverse proxy. Caddy can use a third-party
|
||||||
|
module to serve webdav directly, but rclone feels more closely suited to this
|
||||||
|
task.
|
||||||
|
|
||||||
|
Switch into `/etc/rclone`. Generate a random password. Something like the
|
||||||
|
following will work:
|
||||||
|
|
||||||
|
```
|
||||||
|
tr -dc A-Za-z0-9 </dev/urandom | head -c 40; echo
|
||||||
|
```
|
||||||
|
|
||||||
|
Next, `touch /etc/rclone/htpasswords`. Now you'll use `htpasswd` to fill this
|
||||||
|
file. Choose a username and paste the password you generated above into the
|
||||||
|
propmpt.
|
||||||
|
|
||||||
|
```
|
||||||
|
htpasswd -B /etc/rclone/htpasswords <username>
|
||||||
|
```
|
||||||
|
|
||||||
|
I'd also recommend putting a plaintext copy of the password into `/etc/rclone`,
|
||||||
|
as you'll need it for every single device using your webdav cloud. You should
|
||||||
|
also lock down permissions on both these files. Make them owned by root, and
|
||||||
|
readable by root only.
|
||||||
|
|
||||||
|
Next up, we need our rclone script. Choose a directory to store your webdev
|
||||||
|
cloud backup, for example `/home/emiliko/mycloud/zotero`. It must be a directory
|
||||||
|
with a `zotero` directory inside it. The `zotero` directory must be empty. The
|
||||||
|
rclone script will look something like this, and should be at
|
||||||
|
`/usr/local/bin/rclone_webdav.sh`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
declare -r serve='/home/emiliko/mycloud'
|
||||||
|
declare -r port='8080'
|
||||||
|
|
||||||
|
rclone serve webdav "$serve" --addr ":$port" --htpasswd /etc/rclone/htpasswords
|
||||||
|
```
|
||||||
|
|
||||||
|
Make sure the port you choose is accessible from the outside internet. You may
|
||||||
|
need to open it up in your firewall and router. You'll also need to point a
|
||||||
|
domain at your server, which is assumed to be running caddy. For example, my
|
||||||
|
Caddyfile could look like:
|
||||||
|
|
||||||
|
```
|
||||||
|
webdav.mydomain.com {
|
||||||
|
reverse_proxy localhost:8080
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Please see the "Reaching Yourself Over the Internet" guide for more details
|
||||||
|
about caddy.
|
||||||
|
|
||||||
|
Lastly, we need to setup a systemd unit to start our webdav server on boot. For
|
||||||
|
example the file `/etc/systemd/system/rclone_webdav.service` could contain:
|
||||||
|
|
||||||
|
```
|
||||||
|
[Unit]
|
||||||
|
Description=Rclone WebDAV Service for Zotero
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/local/bin/rclone_webdav.sh
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
Run `systemctl enable --now rclone_webdav.service` and you should be able to
|
||||||
|
visit it at its webpage now (eg `webdav.mydomain.com`). It should ask you for a
|
||||||
|
username and password the first time, though the browser will cache these for
|
||||||
|
subsequent logins.
|
||||||
|
|
||||||
|
## Zotero Setup part 2
|
||||||
|
|
||||||
|
On each client, go to Edit -> Settings -> Sync -> File Syncing and set Sync
|
||||||
|
attachments files in My Library to WebDAV. Fill in the username and password
|
||||||
|
that you set when making htpasswd.
|
||||||
|
|
||||||
|
You should now be synchronizing using webdav! Make sure to update the File
|
||||||
|
Syncing section on all of your devices!
|
Loading…
Reference in a new issue