Sync Zotero Library to Nextcloud

For my research, I’m using Zotero for bibliography management. It’s free, it’s great, and it fits perfectly for my needs. In this blog post, I show how to configure Zotero to synchronize your Zotero Library to Nextcloud.

For some of the research papers I’ve read during my research activities, there are several (mostly, but not always, similar) versions, for some other papers it is very difficult to find the document. Therefore, I decided to always keep a digital copy of the document I’ve just read, just to ensure to be able to access the exact same version I have accessed before. Zotero allows for attaching files to an entry, and furthermore allows for synchronizing the library as all as the attachments. While synchronizing the bibliography entries meta data (authors, title, …) seems to be free and unlimited, only 300MB of document storage are for free per account. Zotero offers paid plans to increase the storage limit, or to use own, WebDAV based, storage.

Since I have a running Nextcloud instance with WebDAV support, I decided to use my Nextcloud for the synchronization. Actually, it is quite easy to configure it accordingly, however, I spent some time on finding that out and there are also some open posts in the Zotero forums, therefore I’m going to document my solution here.

Configuring the Synchronization of your Zotero Library to Nextcloud

First, we need to create a folder in Nextcloud. Please note that Zotero requires the path to end with zotero. Also consider if you want to use your global Nextcloud credentials (which I don’t recommend to do) or to create a dedicated shared folder for this, which will provide you with extra credentials just for this purpose. Since the name of the folder configured to be shared does not show up in the URL, within the shared folder there has to be the zotero folder containing the actual synchronized attachments.

In my Nextcloud instance, I created a folder PhD/Zotero/zotero and configured and configured the directory PhD/Zotero to be accessible and editable using a link. The link then should look like this:

https://nextcloud.example.com/s/1337R4nd0mSh4r3S3cret

Now, in Zotero client, configure Sync (Edit -> Preferences -> Sync) as follows: Set File Syncing mode to WebDAV, as URL put nextcloud.example.com/public.php/webdav, and as username as well as password use the sharing secret (the last part of the URL). That should be it.

Update

The URL nextcloud.example.com/public.php/webdav is correct when using a sharing secret for the credentials. When using the actual account username and password, the URL is nextcloud.example.com/remote.php/webdav.

Kubernetes Cluster on Hetzner Bare Metal Servers

If you want to run your own Kubernetes Cluster, you have plenty of possibilities: You can set up a single node cluster using minikube locally or on a remote machine. You can also set up a multi node cluster on VPS or using managed cloud providers such as AWS or GCE. Alternatively, you can use hardware, e.g. Raspberry Pis or bare metal servers. However, without the functionality provided by a managed cloud provider, it is difficult to take full advantage of the complete high availability capabilities of Kubernetes. We have tried – and present here the instructions for a highly available Kubernetes cluster on Hetzner bare metal servers.

Read more “Kubernetes Cluster on Hetzner Bare Metal Servers”

GitLab on a DiskStation

Sometimes, regardless of the possibilities offered by “the cloud”, you want to host important services yourself. For me as a software and DevOp engineer, this applies to my source code. For this reason, I host my GitLab instance myself. Since the GitLab package for DSM provided by Synology is outdated, I will explain here how to install the latest version of GitLab on a DiskStation using Docker.

Read more “GitLab on a DiskStation”

Websockets for Synology DSM

It’s happened to me several times now that an application I run on my DS 1817+ has problems with websockets. This is because I use the reverse proxy built into DSM, which does not support websockets by default. For this reason, here’s a little tutorial on how to enable Websockets for Synology DSM reverse proxy.

Enable Websockets in DSM Reverse Proxy

Actually, it is extremely easy to enable Websockets for Synology DSM reverse proxy:

  1. Open Control Panel > Application Portal
  2. Change to the Reverse Proxy tab
  3. Select the proxy rule for which you want to enable Websockets and click on Edit
  4. Change to the Custom Headers tab
  5. Add two entries in the list:
    • Name: “Upgrade”, Value: “$http_upgrade”
    • Name: “Connection”, Value: “$connection_upgrade”

Repeat these steps for every rule where you want to enable Websockets.

In my local setup, I need this for GitLab Mattermost (running within a docker container) and DSM Virtual Machine Manager Console.

Signing PGP Keys

An essential part of PGP is the mutual validation of key pairs. This confirms that the information about the owner stored in the key corresponds to reality (e.g. ownership of this key). This post describes the process of signing PGP keys with GnuPG. Read more “Signing PGP Keys”

Raspberry Pi Kubernetes Cluster

In order to gain experience with a Kubernetes cluster or to be able to experiment with it, a functioning cluster is required. Since most conceptual challenges do not require a high performance test cluster, it is also sufficient to build a smaller and therefore more cost-effective one. For this reason I decided to set up a Raspberry Pi Kubernetes Cluster for testing purposes.

Shopping List

If the Raspberry Pis are not to be connected via WLAN but cable, the corresponding network components are also required:

Set up

The website of Hypriot has a very good tutorial how to set up a Kubernetes cluster with Raspberry Pi boards: https://blog.hypriot.com/post/setup-kubernetes-raspberry-pi-cluster/. If you need some configuration examples (executable on a Raspberry Pi Kubernetes Cluster) please check out my GitHub repository with configuration examples: https://github.com/MatthiasLohr/kubernetes-rpi-examples.