Calibre-Web 0.6.27 on AWS User Guide
Overview
This guide covers launching and verifying Calibre-Web 0.6.27 on Ubuntu 24.04 from cloudimg on Amazon EC2. It is one version of the cloudimg Hardened SRS Streaming Media Server & Media Servers AMIs listing on AWS Marketplace; you pick it as the software version when you subscribe and launch. The other media and streaming products in the listing are described on the listing's guide hub.
Calibre-Web is a free, self-hosted web front end for a calibre e-book library (GPL-3.0-or-later). You browse your books by author, series, tag, publisher or language, search them, read EPUB, PDF and comic files in the browser, download them, and send them to an e-reader. Readers can have their own accounts, shelves and reading status, and e-reader apps can use its OPDS catalogue. Calibre's own tools on the image convert formats and read metadata from the files you upload.
What is on the image:
- Calibre-Web 0.6.27, the unmodified release wheel from PyPI, in a Python 3.12 virtual environment under
/opt/calibre-web/venv - All 45 Python packages installed from a cloudimg lock that pins every version and file hash (
pip --require-hashes), with pip 26.3. Three of them are deliberately newer than Calibre-Web asks for; see Security posture - calibre 9.18.0, the signed upstream binary build, in
/opt/calibre(not Ubuntu's older calibre package). Calibre-Web uses it for format conversion and metadata - Calibre-Web on
127.0.0.1:8083only, behind nginx serving HTTPS on port 443 with a certificate created on your instance; port 80 redirects to HTTPS - A per-instance administrator password set on first boot, before Calibre-Web first starts; the upstream
admin/admin123login never works - A separate 40 GiB data volume mounted at
/var/lib/calibre-webfor the settings database and your calibre library - A sample book (Getting Started with Calibre-Web), so the library is not empty on first sign-in
calibre-web-set-hostname, a helper that serves Calibre-Web under your own DNS name, andcalibre-web-selftest, an end-to-end check
Default user: ubuntu · Architecture: x86_64 · Root volume: 12 GiB gp3 · Data volume: 40 GiB gp3
Security posture
- No default password. Upstream Calibre-Web creates the administrator
adminwith the passwordadmin123. On this image, first boot setsadminto a password generated on your instance (through Calibre-Web's own password routine and policy) before Calibre-Web first starts, soadmin123is never live. The password is handed over through a temporary root-only file, never on a command line or in a logged environment, and is written to a root-only file. - Private by default. Anonymous browsing, public registration, magic-link remote login, Kobo sync and reverse-proxy header login are off, so every page, book and OPDS feed needs a sign-in. Calibre-Web's login limiter is on (per user name), as is its password policy.
- Per-instance secrets. The Fernet key that encrypts stored passwords (such as the e-mail server password), the Flask session key, the administrator password and the TLS key are all generated on your instance. The image ships without a settings database or library: first boot creates them, so no two instances share a secret or a session.
- Fails closed. Calibre-Web (
calibre-web.service) and nginx start only after first boot has written the keys, the database, the library and the administrator password. If first boot cannot finish, nothing is served. - Only nginx faces the network. Exactly ports 22, 80 and 443 listen beyond loopback; Calibre-Web listens on
127.0.0.1:8083. It runs as the unprivilegedcalibrewebuser under a systemd sandbox (read-only system, no home directories, no new privileges, its own/tmp, no access to the credentials file or the TLS key), and its code under/optis owned by root. - HTTPS from first boot. nginx serves TLS 1.2 and 1.3 with a self-signed certificate created on your instance (TLS 1.1 is refused), marks every Calibre-Web cookie
SecureandHttpOnly, and sendsStrict-Transport-Security. - The host name comes from configuration, never from a request. First boot reads the instance's public DNS name (else its public or private IPv4 address) from EC2 instance metadata (IMDSv2) and pins nginx to it. Requests for any other host name get their connection closed; requests to the instance's IP addresses are redirected to that name. nginx always hands Calibre-Web the configured name and drops client-sent
X-Forwarded-Host,X-Script-NameandForwardedheaders. - Client address from the connection. nginx replaces
X-Forwarded-ForandX-Real-IPwith the real peer address. At build time a failed sign-in carrying forged forwarding headers was logged with the real peer address. - The app cannot read instance metadata. Calibre-Web, the first-boot unit and nginx are blocked from the instance metadata service (169.254.169.254, fd00:ec2::254) by systemd
IPAddressDeny; only the small unit that looks up the host name at first boot may use it. - Cover images from a URL. When you edit a book you can give a cover image URL, and Calibre-Web fetches it from the internet. It refuses addresses on the instance itself and on private networks: at build time a cover from an
https://URL was saved, and covers fromhttp://169.254.169.254/(instance metadata) andhttp://127.0.0.1:8083/were refused and the book's cover was left unchanged. Because this image does not include ImageMagick, Calibre-Web 0.6.27 reports such a refusal as Cover Format Error rather than its "not allowed to access localhost" message. - Cross-site protection. nginx refuses state-changing requests and WebSocket upgrades that come from other sites, in addition to Calibre-Web's own CSRF protection.
-
Dependency overrides. Calibre-Web 0.6.27 caps three of its dependencies below the releases that fix published advisories. This image installs, deliberately above those caps and without changing any Calibre-Web code:
- pypdf 6.21.4 (Calibre-Web asks for below 6.11.0): the 6.10 releases have high-severity denial-of-service advisories that an uploaded, crafted PDF can reach.
- certifi 2026.10.23 (Calibre-Web asks for below 2026.5.21): the older bundle still trusts the distrusted emSign root certificates (critical advisory GHSA-6q48-6c7w-9gw2). certifi supplies the CA certificates for Calibre-Web's outbound HTTPS (covers, metadata search).
- cryptography 50.0.2 (Calibre-Web asks for below 48.0.0): raised with the others; Calibre-Web uses it only for the Fernet encryption of stored passwords.
PDF upload with metadata extraction, covers from a URL, HTTPS metadata search, sign-in and saving the encrypted e-mail settings were tested with these versions, as a normal user, when the image was built. Calibre-Web prints a "version does not meet the requirements" warning for these three packages in its log at start-up, and
pip checklists the same three; both are expected. The overrides will be lifted when Calibre-Web raises its caps. Step 5 shows how to check them. * Residual: tornado. Calibre-Web caps tornado below 6.6, so the image has tornado 6.5.10. It has three moderate or low advisories (GHSA-pcg2-g6cj-q92c, GHSA-pw9p-v7r6-gx4p and GHSA-r4j5-9xpp-3985) fixed only in 6.6. They concern header folding, chunked request bodies andRedirectHandler; nginx in front normalises request headers and buffers request bodies, and Calibre-Web listens on loopback only. Every other installed Python package was checked against the OSV vulnerability database at build time with no advisory found; the lock and these notes are in/opt/calibre-web/requirements.lock.txtand/opt/calibre-web/SECURITY-NOTES.txt. * calibre. calibre 9.18.0 is the upstream binary build, verified against its published SHA-512 and GPG signature at build time. It bundles its own libraries; the only system libraries it needs come from Ubuntu main. * Hardened SSH and system. SSH allows keys only, no root login and no X11 forwarding. The AMI requires IMDSv2. SSH host keys and the machine ID are generated fresh on every instance.
Prerequisites
- An AWS account and permission to launch EC2 instances
- An EC2 key pair in the Region you launch in
- Your e-books (EPUB, PDF, MOBI, AZW3, CBZ or any other format calibre reads), or an existing calibre library
Recommended instance type: m5.large. Calibre-Web uses a few hundred MiB of memory at rest; converting books with calibre is the main CPU load. Books live on the 40 GiB data volume: increase it at launch, or grow it later, to fit your library.
Connecting to your instance
| Version | Operating system | SSH user |
|---|---|---|
| Calibre-Web 0.6.27 on Ubuntu 24.04 | Ubuntu 24.04 LTS | ubuntu |
Step 1: Launch the instance
Option A: AWS Marketplace console
- Open the cloudimg Hardened SRS Streaming Media Server & Media Servers AMIs listing on AWS Marketplace and choose View purchase options, then Subscribe. One subscription covers every version in the listing.
- Once the subscription is active, choose Launch your software.
- Choose One-click launch from AWS Marketplace (or Launch from EC2 Console for the full launch wizard). In Version, choose Calibre-Web 0.6.27 on Ubuntu 24.04, then choose your Region.
- Pick an instance type (
m5.largerecommended; the software charge is $0.04 per vCPU per hour) and your key pair. - Security group: the listing's default group opens SSH (22), HTTP (80) and HTTPS (443). Restrict SSH to your own IP address, and restrict 80 and 443 to the networks your readers use.
- Choose your VPC and subnet, leave the metadata defaults (the image already requires IMDSv2), then choose Launch.
Option B: AWS CLI
Run this on your own workstation. Replace the AMI ID with the one shown for your Region on the Marketplace launch page, and the VPC, subnet, key pair and CIDRs with your own:
SG=$(aws ec2 create-security-group --group-name calibre-web \
--description "Calibre-Web e-book library" --vpc-id vpc-0123456789abcdef0 \
--query GroupId --output text)
aws ec2 authorize-security-group-ingress --group-id "$SG" --protocol tcp --port 22 --cidr <your-mgmt-cidr>
aws ec2 authorize-security-group-ingress --group-id "$SG" --protocol tcp --port 443 --cidr <your-mgmt-cidr>
aws ec2 authorize-security-group-ingress --group-id "$SG" --protocol tcp --port 80 --cidr <your-mgmt-cidr>
aws ec2 run-instances \
--image-id ami-0123456789abcdef0 \
--instance-type m5.large \
--key-name my-key-pair \
--security-group-ids "$SG" \
--subnet-id subnet-0123456789abcdef0 \
--block-device-mappings 'DeviceName=/dev/sdf,Ebs={VolumeSize=200,VolumeType=gp3}' \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=calibre-web}]'
The block device mapping grows the data volume (/dev/sdf, mounted at /var/lib/calibre-web) to 200 GiB for a larger library; leave it out to keep 40 GiB. You do not need --metadata-options: the AMI already makes IMDSv2 required. Associate an Elastic IP if you want the address to survive a stop and start.
Step 2: Connect and find your login
Connect as ubuntu with the key pair you chose:
ssh -i ~/.ssh/my-key-pair.pem ubuntu@<public-ip>
First boot takes about a minute after the instance starts. It sets the name Calibre-Web is served as (the instance's public DNS name when it has one), creates the TLS certificate, the keys, the settings database, the calibre library with the sample book and the administrator password, and writes /var/lib/cloudimg/calibre-web-credentials.txt (mode 0600, root). These are the entries in that file (the password is not shown here):
sudo grep -E '^(CALIBRE_WEB_URL|ADMIN_USERNAME)=' /var/lib/cloudimg/calibre-web-credentials.txt
sudo grep -oE '^[A-Z_]+=' /var/lib/cloudimg/calibre-web-credentials.txt
sudo stat -c '%a %U:%G %n' /var/lib/cloudimg/calibre-web-credentials.txt
CALIBRE_WEB_URL=https://ec2-54-84-25-103.compute-1.amazonaws.com/
ADMIN_USERNAME=admin
CALIBRE_WEB_URL=
ADMIN_USERNAME=
ADMIN_PASSWORD=
600 root:root /var/lib/cloudimg/calibre-web-credentials.txt
| Value | What it is for |
|---|---|
CALIBRE_WEB_URL |
The address of this instance's Calibre-Web |
ADMIN_USERNAME |
The administrator's user name (admin) |
ADMIN_PASSWORD |
Administrator password, generated on this instance |
To read the password, run sudo cat /var/lib/cloudimg/calibre-web-credentials.txt in your own session and store it in your password manager. Calibre-Web keeps only a hash of it.
Step 3: Confirm Calibre-Web is running
The two first-boot units have finished, Calibre-Web and nginx are active, and only sshd and nginx listen beyond loopback (Calibre-Web, shown as cps, is on 127.0.0.1:8083, the resolver on 127.0.0.53):
systemctl is-active calibre-web-host.service calibre-web-firstboot.service calibre-web.service nginx.service
sudo ss -Htlnp | awk '{print $4, $6}' | sed -E 's/,pid=[0-9]+,fd=[0-9]+//g' | sort -u
cat /opt/calibre-web/VERSION
active
active
active
active
0.0.0.0:22 users:(("sshd"),("systemd"))
0.0.0.0:443 users:(("nginx"),("nginx"),("nginx"))
0.0.0.0:80 users:(("nginx"),("nginx"),("nginx"))
127.0.0.1:8083 users:(("cps"))
127.0.0.53%lo:53 users:(("systemd-resolve"))
127.0.0.54:53 users:(("systemd-resolve"))
[::]:22 users:(("sshd"),("systemd"))
[::]:443 users:(("nginx"),("nginx"),("nginx"))
[::]:80 users:(("nginx"),("nginx"),("nginx"))
calibreweb_version=0.6.27
calibreweb_source=https://github.com/janeczku/calibre-web/tree/0.6.27 (PyPI: https://pypi.org/project/calibreweb/0.6.27/)
calibre_version=9.18.0
calibre_source=https://download.calibre-ebook.com/9.18.0/calibre-9.18.0-x86_64.txz (sha512 3ebb6cb35d0f990e17e13b24bbe3dc62069dce47c72ac4624539c91e9c956ea2635215d0614153db17aab69e377a8b59d28fc30665732d62d34f27751dc04041)
python=3.12.3
pip=26.3
requirements_sha256=a160e9516d49c65c3048a095e5fd28cad43b0697ced37c81ff58b8d82a2ad3b6
dependency_overrides=pypdf==6.21.4 certifi==2026.10.23 cryptography==50.0.2
Step 4: Prove the login and the web defaults
A signed-out visitor is sent to the sign-in page, a book download and the OPDS catalogue refuse a signed-out request, registration does not exist, plain HTTP redirects to HTTPS, an unknown Host header gets no answer and TLS 1.1 is not offered. The last command is the image's own round-trip check: it signs in with this instance's administrator password, proves a wrong password is refused, downloads the sample book, proves a signed-out download is refused, and signs out:
H=$(sed -n 's/^set \$cw_host "\(.*\)";$/\1/p' /etc/nginx/calibre-web-hostvar.conf)
C=(--connect-to ::127.0.0.1:)
curl -sk "${C[@]}" -o /dev/null -w 'web app, signed out -> %{http_code}\n' "https://$H/"
curl -sk "${C[@]}" -o /dev/null -w 'sign-in page -> %{http_code}\n' "https://$H/login"
curl -sk "${C[@]}" -o /dev/null -w 'book download, signed out -> %{http_code}\n' "https://$H/download/1/epub/1"
curl -sk "${C[@]}" -o /dev/null -w 'OPDS, signed out -> %{http_code}\n' "https://$H/opds"
curl -sk "${C[@]}" -o /dev/null -w 'registration -> %{http_code}\n' "https://$H/register"
curl -s "${C[@]}" -o /dev/null -w 'http -> %{http_code}\n' "http://$H/"
curl -sk -o /dev/null -w 'unknown Host -> %{http_code}\n' -H 'Host: evil.example' https://127.0.0.1/ || true
curl -sk "${C[@]}" -o /dev/null -w 'TLS 1.1 -> %{http_code}\n' --tlsv1.1 --tls-max 1.1 "https://$H/" || true
sudo calibre-web-selftest
web app, signed out -> 302
sign-in page -> 200
book download, signed out -> 302
OPDS, signed out -> 401
registration -> 404
http -> 301
unknown Host -> 000
TLS 1.1 -> 000
round-trip OK: admin signed in over https://ec2-54-84-25-103.compute-1.amazonaws.com/ (a wrong password was refused), book 1 listed with its cover and served as a 56583-byte EPUB, anonymous download refused (302), logout ended the session
--connect-to ::127.0.0.1: sends each request to this instance while keeping the real host name in the request, exactly as a browser would send it. 302 for a signed-out visitor is the redirect to the sign-in page; 000 means the server closed the connection without an answer.
Step 5: Check the dependency overrides
The versions Calibre-Web's own environment resolves (read with importlib.metadata as the calibreweb user, exactly as the running service sees them), the three expected pip check lines, and the calibre build Calibre-Web uses:
sudo -u calibreweb /opt/calibre-web/venv/bin/python -c 'import importlib.metadata as m
for d in ("calibreweb", "pypdf", "certifi", "cryptography", "tornado"): print(d, m.version(d))'
/opt/calibre-web/venv/bin/python -m pip check 2>&1 || true
/opt/calibre/calibredb --version
calibreweb 0.6.27
pypdf 6.21.4
certifi 2026.10.23
cryptography 50.0.2
tornado 6.5.10
calibreweb 0.6.27 has requirement certifi<2026.5.21,>=2024.7.4, but you have certifi 2026.10.23.
calibreweb 0.6.27 has requirement cryptography<48.0.0,>=39.0.0, but you have cryptography 50.0.2.
calibreweb 0.6.27 has requirement PyPDF<6.11.0,>=6.1.3, but you have pypdf 6.21.4.
calibredb (calibre 9.18)
The same versions appear on Calibre-Web's About page (the About link in Admin), which reads them from the running process.
Step 6: Sign in to Calibre-Web
Browse to CALIBRE_WEB_URL (https://<public-dns-name>/). The certificate is self-signed, so your browser warns once; accept it for this host, or install your own certificate (Step 11). Calibre-Web opens on its sign-in page; sign in with ADMIN_USERNAME and ADMIN_PASSWORD.

Step 7: Browse and read
Once signed in you land in the library. The sample book is already there, so you can see covers, metadata and the reader working before you add anything of your own. The left-hand menu browses by author, series, category (tag), publisher, language, rating and format; Search Library and Advanced Search are in the top bar.

Select a cover to open the book's page, with its metadata, the Download buttons and Read in Browser:

Read in Browser opens the reader. The arrows at the sides (or the arrow keys) turn pages, the menu at the top left shows the table of contents, and the gear at the top right changes the font size and theme. Calibre-Web remembers where you stopped.

Step 8: Add your books
- Upload in the browser: choose Upload in the top bar and pick one or more files. Calibre-Web reads the title, authors, tags and cover from the file (for PDFs, from its document information and XMP metadata) and opens the book's edit page, where you can correct the metadata, give a cover image URL, or use Fetch Metadata to search the online metadata providers. Some providers (Google Books' anonymous API in particular) limit requests from shared cloud addresses, so a search can come back empty from one provider while others answer.
- Add many files at once: copy them to the instance and add them with calibre's
calibredb, as thecalibrewebuser, into the library on the data volume:
scp -r ~/Books ubuntu@<public-ip>:/tmp/
sudo chown -R calibreweb:calibreweb /tmp/Books
sudo -u calibreweb /opt/calibre/calibredb add --recurse --with-library /var/lib/calibre-web/library /tmp/Books
- Bring an existing calibre library: stop Calibre-Web (
sudo systemctl stop calibre-web), replace the contents of/var/lib/calibre-web/librarywith your library (the folder that holdsmetadata.db), runsudo chown -R calibreweb:calibreweb /var/lib/calibre-web/library, and start Calibre-Web again.
The library as it ships, on its own volume:
findmnt -no TARGET,FSTYPE,SIZE /var/lib/calibre-web
findmnt --fstab -no TARGET,FSTYPE,OPTIONS /var/lib/calibre-web
sudo ls /var/lib/calibre-web
sudo -u calibreweb /opt/calibre/calibredb list --with-library /var/lib/calibre-web/library -f title,authors,formats --for-machine
/var/lib/calibre-web ext4 39.1G
/var/lib/calibre-web ext4 defaults,nofail
config
library
lost+found
[
{
"authors": "cloudimg",
"formats": [
"/var/lib/calibre-web/library/cloudimg/Getting Started with Calibre-Web (1)/Getting Started with Calibre-Web - cloudimg.epub"
],
"id": 1,
"title": "Getting Started with Calibre-Web"
}
]
Delete the sample book whenever you like: open it, choose Edit Metadata, then Delete Book.
Step 9: Users, settings and e-readers
Choose Admin in the top bar for the administration page: the user list, the e-mail server settings, the library configuration and the switches for uploads, anonymous browsing, public registration, magic-link login and reverse-proxy login (all off except uploads on this image).

- Administrator password: change it from your user name in the top bar (the profile page). The credentials file is not updated; remove the old password from it (
sudo nano /var/lib/cloudimg/calibre-web-credentials.txt) once you have stored the new one. - Other readers: choose Add New User and tick the rights each one needs (download, upload, edit, delete, viewer). Give the admin right only to people who should manage users and settings.
- Send to e-reader: fill in Edit Email Server Settings with your SMTP server; the password is stored encrypted with this instance's own key. Each user sets their e-reader's address on their profile page.
- E-reader apps (OPDS): point an OPDS app at
https://<your-name>/opdsand sign in with a Calibre-Web user name and password (HTTP Basic authentication over HTTPS). Apps generally need a certificate the device trusts, so set up your DNS name and certificate first (Step 11).
Step 10: Check the security controls
Calibre-Web, its first-boot unit and nginx carry IPAddressDeny for the metadata addresses, first boot recorded that it could not reach the metadata service from inside its own unit, Calibre-Web runs sandboxed as calibreweb, and SSH runs with the cloudimg pins:
systemctl show -p IPAddressDeny calibre-web.service calibre-web-firstboot.service nginx.service
systemctl show -p User -p ProtectSystem -p ProtectHome -p NoNewPrivileges calibre-web.service
sudo grep -o 'IMDS-REFUSED-IN-FIRSTBOOT.*' /var/log/cloudimg-firstboot.log
sudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication|x11forwarding) '
IPAddressDeny=168.63.129.16/32 fd00:ec2::254/128 169.254.169.254/32
IPAddressDeny=168.63.129.16/32 fd00:ec2::254/128 169.254.169.254/32
IPAddressDeny=168.63.129.16/32 fd00:ec2::254/128 169.254.169.254/32
User=calibreweb
ProtectHome=yes
ProtectSystem=strict
NoNewPrivileges=yes
IMDS-REFUSED-IN-FIRSTBOOT (http 000; IPAddressDeny in effect)
permitrootlogin no
passwordauthentication no
x11forwarding no
Step 11: Serve Calibre-Web under your own DNS name
Point a DNS record (for example books.example.com) at the instance's public or Elastic IP address, then tell the image to serve that name. It creates a new self-signed certificate for the name, pins nginx and the cross-site guard to it, updates CALIBRE_WEB_URL in the credentials file and keeps the name across reboots:
sudo calibre-web-set-hostname books.example.com
For a trusted certificate, obtain one for that name (for example with certbot's certonly mode using its own temporary web server, or from your organisation's CA), copy the certificate chain and key over /etc/ssl/calibre-web/calibre-web.crt and /etc/ssl/calibre-web/calibre-web.key (key mode 0600, root), and run sudo systemctl reload nginx.
Maintenance
- Operating system updates: unattended security upgrades are on. Reboot when
/var/run/reboot-requiredexists; Calibre-Web and nginx start again by themselves. - Calibre-Web and calibre updates: both are installed read-only under
/optfrom pinned, verified sources, so Calibre-Web's in-app updater cannot replace them. To move to a newer release, launch the newer version of this image when the listing offers it and move the data volume (or/var/lib/calibre-web) across. - Backups: everything Calibre-Web keeps is on the data volume: the settings database and keys in
/var/lib/calibre-web/config, and your calibre library in/var/lib/calibre-web/library. Take an EBS snapshot of that volume, or stop Calibre-Web (sudo systemctl stop calibre-web) and copy the directory. Keep theconfigfolder with the library: the key that decrypts the stored e-mail password is in it. - Logs:
sudo journalctl -u calibre-webfor the service,/var/lib/calibre-web/config/calibre-web.logfor Calibre-Web's own log (including failed sign-ins),/var/log/nginx/for web requests,/var/log/cloudimg-firstboot.logfor first boot. - What the instance contacts: Calibre-Web makes outbound requests only when you use a feature that needs one: covers from a URL, Fetch Metadata searches, e-mail to e-readers, and Check for Update (GitHub). Everything else comes from the operating system: the AWS Systems Manager agent, snapd, unattended upgrades and the time service. Disable the SSM agent if you do not use Session Manager.
Troubleshooting
- The web page does not load right after launch: first boot is still running.
sudo journalctl -u calibre-web-host.service -u calibre-web-firstboot.service -fshows its progress. - Browser shows "connection closed": nginx answers only the configured name and redirects the instance's own IP addresses to it. Use
CALIBRE_WEB_URL, or runsudo calibre-web-set-hostname <name>for a new name. - "Cover Format Error" when saving a cover URL: the URL points at the instance itself or a private network address, which Calibre-Web refuses, or it is not a JPEG, PNG, WebP or BMP image. Use a public
https://image URL, or upload the cover file instead. - "Please wait one minute before next login": Calibre-Web's login limiter allows three attempts a minute (and 40 a day) per user name, and a successful sign-in resets it; wait a minute and try again.
- Books added with calibredb do not appear: check you added them as the
calibrewebuser into/var/lib/calibre-web/library(Step 8), then reload the page. - The end-to-end check:
sudo calibre-web-selftestsigns in, downloads the sample book and printsround-trip OKwhen everything works.
Licensing
Calibre-Web is licensed under the GNU General Public License version 3 or later (GPL-3.0-or-later), and calibre under the GNU General Public License version 3. The licence text is on the instance in /opt/calibre-web/LICENSE, and /opt/calibre-web/SOURCE.txt points to the complete corresponding source of both: Calibre-Web at github.com/janeczku/calibre-web/releases/tag/0.6.27 and calibre at download.calibre-ebook.com/9.18.0. cloudimg is not affiliated with, endorsed by or sponsored by the Calibre-Web or calibre projects or their authors.
Support
cloudimg provides 24/7 technical support for this image by email and live chat: deployment, first login, HTTPS and DNS setup, upgrades and troubleshooting. Contact support@cloudimg.co.uk.