Deploy an e-Library

I hit a really long, summer long if you count it, slump in creativity and inspiration to write. I have wanted to write about digital resource preservation, literacy, and how to increase access to books online, but I will just share a nice deployment that anyone with interest can maintain themselves.

I first started learning about e-libraries and ebooks when I decided that instead of reading 1-2 books per year, that I would push myself to read 12-24 books. As of this month August 2025, I’ve only read 8 books, so I’ll probably barely reach that goal. I have been doing the bulk of this reading either on an e-reader or on my phone. I hate reading on my phone, but more often or not for a lot of these platforms, reading on your phone, a bulky computer, or specifically their device that you will have to purchase out of pocket are the only options.

Other Options

If there’s no desire at all for you to self-host an e-library I would recommend the following platforms. Each of these allow for reading across more than one device.

Out of these, Kobo and Kindle have the best online markets for purchasing books. PocketBook Cloud is the best for storing ebook files, but not all formats are compatible with the e-reader.

Deployment

Docker Compose

I have only tested out 2 e-library applications Calibre-Web and Kavita though linuxserver.io. I have also not installed either of the packages on bare metal, I wanted to make initial deployment and management of the applications as simple as possible.

Each container image page provides Docker Compose configurations that can be quickly copied into a docker-compose.yml file and customized as needed.

For a highly available (HA) deployment with optional backups, I would put the data and config directories into a separate volume or database using a mounted network file system (NFS) or a SQL database.

Storage

I spent a few weeks trying to figure out how to use cloud storage providers like Proton Drive, Google Drive, filen.io, and many others for periodic backpus. None of the ‘free’ storage options provide an extensive CLI. I did not want to start out with paid services like Google Cloud Storage or AWS S3, to lower the entry barrier for others that would like to set up a more complex e-library backend. I would recommend woahbase/alpine-nfs or LocalStack for self-hosting with ’local’ storage.

I deployed the contaniners first without any volumes to see how flexible they are. I have found that as long as resource requests are not limited, that it is possible to run Kavita containers without any additions, but once it is stopped all data is lost including the admin account. Calibre-Web on the other hand, requires an initial metadata file for the database that is not included in the image itself.

To at least maintain an admin user account in the case of a shutdown or container restart, use Kavita. Saving the latest state of the data can be done by adding volumes, mounts, or databases for the application to use.

In the latest instance I have running, I am storing my ebook files in a simple NFS application that shares a volume with the application and a local configuration directory.

services:
...
  volumes:
   - vol_1:/data/books
...
volumes:
  vol_1:

Sources

For my tests, grabbed books from Project Gutenberg and random PDFs I had locally.