Deployment guide

Calibre-Web

Overview

Calibre-Web is a clean, modern, open source web interface for browsing, reading and downloading the books in a Calibre ebook library. From an ordinary browser you get an in-browser reader, full text search, custom shelves, per-user accounts, Kobo sync and an OPDS feed, so dedicated reading apps can pull straight from your library. It is a distinct web frontend project, separate from the Calibre desktop application.

The SecureAnyCloud image serves Calibre-Web 0.6.26 behind an nginx reverse proxy on a hardened Ubuntu 24.04 LTS base, patched at build time. The application server listens only on the loopback interface (127.0.0.1:8083), and nginx serves it on port 80. An empty Calibre library is already initialized, so there is no first-run setup wizard. You sign in and start uploading books.

A unique administrator password is generated on the first boot of every VM and written to a root-only file, so no shared or default login ever ships in the image.

What you get:

  • Calibre-Web 0.6.26 served behind nginx, managed by systemd
  • The Calibre-Web web interface on :80 with authentication required from the first request
  • A per-VM administrator password generated on first boot and recorded in a root-only file
  • An empty Calibre library pre-initialized at /var/lib/calibre-web/library, with the settings database pre-seeded so no setup wizard appears
  • The calibredb command-line tools for managing the library from the shell
  • The application server bound to 127.0.0.1:8083 only, never exposed directly to the network
  • A dedicated Azure data disk at /var/lib/calibre-web for the library and the settings database
  • calibre-web.service and nginx.service as enabled systemd units
  • An OPDS feed at /opds for dedicated reading apps
  • 24/7 SecureAnyCloud support

Prerequisites

You need an active Azure subscription, an SSH key pair, and a VNet plus subnet in the target region.

Standard_B2s (2 vCPU / 4 GiB RAM) is a sensible starting size. Size up for larger libraries or more concurrent readers.

Configure the network security group (NSG) to allow inbound 22/tcp from your management network and 80/tcp for the web interface. Calibre-Web serves plain HTTP on port 80. For production, terminate TLS in front of it with your own domain.

The application server is never exposed directly. It listens on 127.0.0.1:8083 only, so port 8083 stays off the network.

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure portal, choose Create a resource, search the Marketplace for Calibre-Web by SecureAnyCloud, and select Create.

On the Basics tab, pick your subscription, resource group, region and size. Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22) and HTTP (80). Review the dedicated data disk on the Disks tab. Then select Review + create and Create.

Step 2 - Deploy from the Azure CLI

Accept the Marketplace terms once per subscription, then create the VM:

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:calibre-web-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name calibre-web \
  --image sac1647283583153:calibre-web-ubuntu-24-04:default:latest \
  --size Standard_B2s \
  --admin-username azureuser \
  --generate-ssh-keys \
  --public-ip-sku Standard

Then open port 80 to the web interface:

az vm open-port --resource-group <your-rg> --name calibre-web --port 80

Step 3 - Confirm the services are running

Connect over SSH as azureuser, and confirm that Calibre-Web and nginx are active. The application server listens only on 127.0.0.1:8083, while nginx serves the web interface on port 80.

systemctl is-active calibre-web nginx calibre-web-firstboot
sudo ss -tlnp | grep -E ':80 |:8083 ' | sed 's/ */ /g'

Step 4 - Retrieve the per-VM administrator password

Every VM generates its own administrator password on first boot. It writes the password, along with the login user and URL, to a root-only credentials file. Read it with sudo:

sudo cat /root/calibre-web-credentials.txt

Sign in to Calibre-Web with username admin and the calibre-web.admin.pass value from this file.

You can prove that the login works from the command line by round-tripping a sign-in through nginx with those credentials:

PASS=$(sudo grep '^calibre-web.admin.pass=' /root/calibre-web-credentials.txt | cut -d= -f2-);
J=$(mktemp);
CSRF=$(curl -s -c "$J" http://127.0.0.1/login | grep -oE 'name="csrf_token"[^>]*value="[^"]+"' | grep -oE 'value="[^"]+"' | head -1 | sed 's/value="//;s/"//'); curl -s -o /dev/null -w 'login HTTP %{http_code}\n' -L -b "$J" -c "$J" --data-urlencode "csrf_token=$CSRF" --data-urlencode 'username=admin' --data-urlencode "password=$PASS" --data-urlencode 'submit=' http://127.0.0.1/login; rm -f "$J"

Step 5 - Sign in to Calibre-Web

Browse to http://<vm-public-ip>/. Calibre-Web opens on its sign-in screen. Enter username admin and the password from Step 4.

After you sign in, you land on the library. From the BROWSE sidebar, list books or browse by author, series, category, publisher, language and rating. Use Discover to jump to a random selection. The library ships empty, so your books appear here once you upload them.

Step 6 - Upload and read your books

Use the Upload button in the top toolbar to add EPUB, PDF, MOBI and other ebook files. Calibre-Web adds them to the library, extracts metadata and cover art, and lets you read them in the browser or download them.

You can also manage the library on the command line with the bundled calibredb tool, which operates on the library directory on the data disk:

calibredb --with-library /var/lib/calibre-web/library list

Step 7 - Add scoped user accounts

Open Admin, then Add New User, to create additional accounts. Each user has its own permissions (view, download, upload, edit) and visibility settings. A household or team can share one instance while you keep administrative control.

Step 8 - Administration

The Admin page lists your users and their permissions. It also shows the email server settings used for send-to-eReader, and the core configuration, including the Calibre library directory, the listening port and whether uploads are enabled.

From here, manage users, edit the library configuration and review scheduled tasks.

Step 9 - Verify the stack

Confirm the Calibre-Web version and that the services are enabled. Then check that the web interface responds through nginx and that the dedicated data disk is mounted:

/opt/calibre-web/venv/bin/python -c "import importlib.metadata as m; print('Calibre-Web', m.version('calibreweb'))"
systemctl is-enabled calibre-web nginx
curl -sI http://127.0.0.1/ | head -1
findmnt -no SOURCE,TARGET,FSTYPE /var/lib/calibre-web

Step 10 - Where your data lives

The Calibre library and the Calibre-Web settings database both live on a dedicated Azure data disk mounted at /var/lib/calibre-web, separate from the OS disk. This disk is captured into the image and re-provisioned on every VM.

Confirm the mount and the free space:

df -h /var/lib/calibre-web | tail -1
sudo ls -la /var/lib/calibre-web/library | head

Step 11 - The OPDS feed

Calibre-Web publishes an OPDS catalog at /opds so dedicated reading apps (KOReader, Moon+ Reader, Marvin and others) can browse and download straight from your library. Point your reader at http://<vm-public-ip>/opds and sign in with your Calibre-Web username and password.

Security notes

  • Add TLS. Calibre-Web serves plain HTTP on port 80. For production, put it behind your own TLS-terminating reverse proxy or an Azure Application Gateway with a certificate for your domain, and restrict port 80 in the NSG to trusted networks. A common approach is certbot with your-domain on a front-end proxy.
  • Loopback only. The application server listens on 127.0.0.1:8083 only and is never exposed directly. Only nginx on port 80 faces the network.
  • Authentication from the first request. The per-VM administrator password lives in /root/calibre-web-credentials.txt, readable only by root. You can change it from your profile. Keep a copy somewhere safe.
  • Least privilege. Create scoped user accounts for readers rather than sharing the administrator login.
  • Patching. Keep the VM patched. The image is patched at build time and ships with unattended security upgrades enabled.

Support

SecureAnyCloud images come with 24/7 support. If you have any questions about this Calibre-Web image or need help with your deployment, contact SecureAnyCloud through the SecureAnyCloud website.

Deploy on Azure

Launch Calibre-Web on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.

View this image

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on Azure