Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Cloud / Hosting 12.06.2026 · 10 min Lesezeit

Calibre-Web mit Docker installieren: eBook-Bibliothek im Browser

Calibre-Web bringt deine bestehende Calibre-Bibliothek als komfortable Web-Oberfläche ins Heimnetz – mit integriertem EPUB-Reader, OPDS-Katalog für E-Reader und Multi-User-Betrieb. Diese Anleitung zeigt den vollständigen Aufbau per Docker Compose auf einem beliebigen Linux-Host.

Hero Bild zu Calibre-Web mit Docker auf einem NAS, eBook-Bibliothek im Browser mit Buchcovern und moderner Desktop Umgebung.

Wer seine Calibre-Bibliothek nicht nur am Desktop-PC, sondern auch bequem im Browser, auf dem Smartphone oder per E-Reader-App nutzen möchte, braucht Calibre-Web. Die Open-Source-Anwendung legt sich als schlanke Web-Schicht über eine vorhandene Calibre-Bibliothek und macht sie von jedem Gerät im Netz erreichbar – ohne dass der Desktop-Client Calibre auf dem Server laufen muss. Integrierter EPUB-Reader, OPDS-Katalog, Kobo-Sync, E-Mail-Versand an Kindle oder Tolino, optionale eBook-Konvertierung und ein vollwertiges Multi-User-Rechtemanagement machen Calibre-Web mit über 17.500 GitHub-Stars zur meistgenutzten Docker-Lösung für self-hosted eBook-Bibliotheken im DACH-Raum.

Voraussetzungen

  1. Docker Engine >= 20.10 mit Docker Compose Plugin v2 (docker compose ohne Bindestrich) – Installationsanleitung: Docker und Docker Compose auf Linux installieren
  2. Linux-Host, VM oder NAS mit Docker-Unterstützung (x86-64 oder ARM64); mindestens 256 MB RAM für den Container
  3. Vorhandene Calibre-Bibliothek mit metadata.db und eBook-Dateien – Calibre-Web kann keine neue Bibliothek anlegen, nur bestehende lesen
  4. Schreibzugriff auf den Bibliotheksordner für den Host-Benutzer (PUID/PGID ermitteln mit id -u && id -g)
  5. Optional: Reverse Proxy (Nginx Proxy Manager, Traefik, Caddy) für HTTPS-Zugang von außen – siehe Caddy als Reverse Proxy einrichten

Schritt 1: Projektordner und Verzeichnisstruktur anlegen

Lege einen dedizierten Projektordner an. Alle Compose-Projekte folgen dem gleichen Muster: ein Ordner pro Anwendung, darin compose.yaml und .env. Die Konfigurationsdaten von Calibre-Web landen in einem Unterordner; die Bibliothek selbst bleibt an ihrem bisherigen Ort.

mkdir -p /opt/calibre-web/calibre-web/config
# Bibliotheksordner liegt z.B. unter /opt/calibre-web/calibre/library
# Falls noch nicht vorhanden, jetzt den Bibliothekspfad anlegen:
mkdir -p /opt/calibre-web/calibre/library
# Eigentümer setzen (ersetze 1000:1000 mit deiner PUID:PGID)
chown -R 1000:1000 /opt/calibre-web/calibre-web/config

Wenn deine Calibre-Bibliothek an einem anderen Ort liegt (z. B. /mnt/nas/Bibliothek), passt du den Pfad in der .env an – der Ordner muss nicht ins Projektverzeichnis verschoben werden.

Verifizieren: ls -la /opt/calibre-web/ zeigt die Unterordner calibre-web/config/ und calibre/library/. Mit ls -la /opt/calibre-web/calibre/library/metadata.db prüfst du, ob die Bibliotheksdatei vorhanden ist – ohne sie startet der Einrichtungsassistent zwar, lässt sich aber nicht abschließen.

Schritt 2: .env-Datei anlegen

Alle umgebungsspezifischen Werte – Benutzer-IDs, Zeitzone, Pfade und Port – kommen in die .env. So bleibt die compose.yaml portabel und versionierbar ohne Geheimnisse.

# /opt/calibre-web/.env

# Benutzer- und Gruppen-ID des Host-Benutzers (ermitteln: id -u && id -g)
PUID=1000
PGID=1000

# Zeitzone (TZ-Datenbank: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)
TZ=Europe/Berlin

# Pfade zum Konfigurationsordner und zur Calibre-Bibliothek (Host-Pfade)
CONFIG_PATH=./calibre-web/config
BOOKS_PATH=./calibre/library

# Web-Port (Host)
WEB_PORT=8083

Ermittle deine PUID und PGID mit folgendem Befehl und trage die Werte ein:

id -u && id -g

Wichtig: PUID und PGID müssen exakt mit dem Eigentümer der metadata.db auf dem Host übereinstimmen. Stimmen sie nicht, schreibt der Container nicht in die Datenbank – der typische „attempt to write a readonly database"-Fehler.

Verifizieren: cat /opt/calibre-web/.env zeigt die Werte. Prüfe mit stat /opt/calibre-web/calibre/library/metadata.db, welchem Benutzer die Datei gehört – der UID-Wert muss mit PUID übereinstimmen.

Schritt 3: compose.yaml anlegen

Der offizielle Docker-Image für Calibre-Web kommt von LinuxServer.io (lscr.io/linuxserver/calibre-web). LinuxServer.io ist die bekannteste Community für gepflegte self-hosted Docker-Images und liefert automatische Multi-Arch-Builds sowie regelmäßige Basis-Image-Updates. Den älteren Image technosoft2000/calibre-web solltest du nicht mehr verwenden – er wird nicht mehr aktiv gepflegt.

ParameterWertHinweis
Imagelscr.io/linuxserver/calibre-web:latestStabile Releases; aktuell v0.6.26 „Ismara"
Port8083 → 8083Web-UI und OPDS; kein zweiter Port nötig
Volume /configHost-Pfad aus CONFIG_PATHapp.db, Logs, Zertifikate
Volume /booksHost-Pfad aus BOOKS_PATHCalibre-Bibliothek mit metadata.db
PUID/PGIDaus .envEigentümer der metadata.db
TZaus .envz. B. Europe/Berlin
Restartunless-stoppedNeustart bei Absturz, nicht bei docker compose down
# /opt/calibre-web/compose.yaml
services:
  calibre-web:
    image: lscr.io/linuxserver/calibre-web:latest
    container_name: calibre-web
    environment:
      - PUID=${PUID:-1000}
      - PGID=${PGID:-1000}
      - TZ=${TZ:-Europe/Berlin}
      # Optional: eBook-Konvertierung (nur x86-64, NICHT auf ARM verwenden!)
      # - DOCKER_MODS=linuxserver/mods:universal-calibre
      # Optional: Google OAuth
      # - OAUTHLIB_RELAX_TOKEN_SCOPE=1
    volumes:
      - ${CONFIG_PATH:-./calibre-web/config}:/config
      - ${BOOKS_PATH:-./calibre/library}:/books
    ports:
      - ${WEB_PORT:-8083}:8083
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8083"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 30s

Zur DOCKER_MODS-Variable: Sie installiert beim ersten Container-Start Calibre-Binaries (~400 MB Download) für die eBook-Konvertierung (z. B. EPUB zu MOBI). Das verlängert den initialen Start deutlich. Auf ARM-Systemen (Raspberry Pi, Apple Silicon) darf diese Variable nicht gesetzt werden – sie ist ausschließlich für x86-64 verfügbar. Mehr zu Compose-Syntax und Volumes erklärt die Grundlagenanleitung Docker-Netzwerke und Volumes richtig nutzen.

Verifizieren: cat /opt/calibre-web/compose.yaml zeigt die vollständige Konfiguration ohne Syntaxfehler. Ein schneller Syntaxcheck gelingt mit docker compose config aus dem Projektordner – die Ausgabe sollte die aufgelöste Compose-Konfiguration mit allen .env-Werten zeigen, ohne Fehlermeldung.

Schritt 4: Stack starten

Starte den Container aus dem Projektordner heraus. Beim allerersten Start lädt Docker den Image herunter (~200 MB ohne DOCKER_MODS, ~600 MB mit). Das Healthcheck-Intervall ist auf 30 Sekunden gesetzt; der Container gilt nach spätestens 90 Sekunden als „healthy".

cd /opt/calibre-web
docker compose up -d

Status und Logs prüfen:

# Laufstatus
docker compose ps

# Logs in Echtzeit (mit Strg+C abbrechen)
docker compose logs -f calibre-web

Erwartete Ausgabe von docker compose ps nach dem Start:

NAME           IMAGE                                      STATUS
calibre-web    lscr.io/linuxserver/calibre-web:latest     Up (healthy)

Erwartete Log-Zeilen (Auszug):

[ls.io-init] started
[migrations] started
[calibre-web] started
[calibre-web] Calibre-Web is starting...

Verifizieren: curl -I http://localhost:8083 sollte HTTP/1.1 302 Found zurückgeben (Weiterleitung auf den Login). Erscheint stattdessen „Connection refused", sind die Logs mit docker compose logs calibre-web der erste Anlaufpunkt.

Schritt 5: Ersteinrichtung im Browser

Öffne http://HOST-IP:8083 im Browser. Beim ersten Start erscheint ein Einrichtungsassistent mit einem einzigen, aber entscheidenden Feld:

  1. „Location of Calibre database": Trage hier den Container-Pfad /books ein – nicht den Host-Pfad (/opt/calibre-web/calibre/library). Dieser Fehler ist die häufigste Ursache für die Fehlermeldung „DB Location is not Valid".

Nach dem Klick auf „Save" wirst du auf die Login-Seite weitergeleitet. Melde dich mit den Standard-Zugangsdaten an:

  1. Benutzername: admin
  2. Passwort: admin123

Ändere das Passwort sofort unter „Admin" → „Edit User" → „admin". Wähle ein starkes Passwort, bevor der Dienst im Netzwerk erreichbar ist.

Unter „Admin" → „Edit Basic Configuration" findest du die wichtigsten Optionen: Upload-Funktion aktivieren, Gastmodus, LDAP, Kobo-Sync und (wenn DOCKER_MODS aktiviert) den Calibre-Pfad /usr/bin/ für die eBook-Konvertierung eintragen.

Verifizieren: Die Startseite zeigt die Buch-Cover deiner Bibliothek. Unter „Admin" → „About" erscheint die App-Version (0.6.26 „Ismara" oder neuer). Öffne http://HOST-IP:8083/opds im Browser – dort erscheint ein XML-Dokument mit dem OPDS-Katalog, der für E-Reader-Apps wie KOReader, Moon+ Reader oder Librera Reader verwendet werden kann.

Schritt 6: E-Reader und OPDS verbinden (optional)

Der OPDS-Katalog ist sofort verfügbar unter http://HOST-IP:8083/opds – kein zusätzlicher Port, keine weitere Konfiguration nötig. Trage diese URL in deiner E-Reader-App ein:

  1. KOReader: OPDS-Browser → Neue Quelle → URL eintragen, Benutzername und Passwort angeben
  2. Moon+ Reader / Librera Reader: Netzwerkbibliothek → OPDS → URL, Zugangsdaten
  3. Apps ohne Anmeldedialog akzeptieren Zugangsdaten direkt in der URL: http://admin:passwort@HOST-IP:8083/opds

Für Kobo-E-Reader: In den Admin-Einstellungen „Kobo sync" aktivieren, dann in den Benutzereinstellungen einen Kobo-Token generieren. Auf dem Kobo-Gerät den Shop-Link durch http://HOST-IP:8083/kobo/DEIN-TOKEN ersetzen.

Verifizieren: In der E-Reader-App erscheinen die Kategorien und Bücher aus deiner Bibliothek. Ein Download-Test mit einem kleinen EPUB bestätigt, dass das Volume korrekt gemountet ist.

Schritt 7: Updates und Backups

LinuxServer.io veröffentlicht regelmäßig aktualisierte Images. Ein Update läuft mit zwei Befehlen:

cd /opt/calibre-web
docker compose pull
docker compose up -d

Für automatische Update-Benachrichtigungen eignet sich Diun oder WUD – ein Vergleich findet sich in Docker-Container automatisch aktualisieren nach dem Watchtower-Aus.

Für Backups reicht ein Sicherung des gesamten /config-Verzeichnisses – es enthält app.db mit allen Calibre-Web-Einstellungen, Benutzern und Lese-Fortschritten. Die Calibre-Bibliothek selbst (Ordner mit metadata.db und eBook-Dateien) sicherst du separat nach deiner bestehenden Backup-Strategie.

# Einfaches Backup des Config-Volumes
tar -czf calibre-web-config-backup-$(date +%Y%m%d).tar.gz \
  /opt/calibre-web/calibre-web/config/

Verifizieren: docker compose ps zeigt nach dem Update Up (healthy). Mit docker compose logs calibre-web | head -20 prüfst du, ob die neue Version erfolgreich gestartet ist.

Troubleshooting / Typische Fehler

  1. „DB Location is not Valid" / „Cannot access metadata.db": Im Einrichtungsassistenten wurde der Host-Pfad statt des Container-Pfads eingetragen. Lösung: /books (Container-Pfad) eintragen, nicht den Host-Pfad. Prüfung: docker exec calibre-web ls -la /books/metadata.db – die Datei muss sichtbar sein.
  2. „attempt to write a readonly database": PUID/PGID passen nicht zum Eigentümer der metadata.db, oder das Volume wurde mit :ro gemountet. Lösung: id -u && id -g auf dem Host ausführen, Werte in .env korrigieren, anschließend sudo chown -R 1000:1000 /pfad/zur/bibliothek ausführen (UID anpassen).
  3. „database is locked": Calibre Desktop-App ist gleichzeitig mit derselben metadata.db geöffnet. Calibre-Web und Calibre Desktop dürfen nicht gleichzeitig auf dieselbe Bibliothek zugreifen – das führt zu Datenverlust. Calibre Desktop schließen, bevor Calibre-Web läuft.
  4. DOCKER_MODS schlägt auf ARM fehl: linuxserver/mods:universal-calibre ist ausschließlich für x86-64. Auf Raspberry Pi, Apple Silicon und anderen ARM-Systemen die Variable auskommentieren oder weglassen.
  5. Container startet, aber keine Bücher sichtbar: Das /books-Volume ist leer oder enthält keine gültige metadata.db. Prüfung: docker exec calibre-web ls -la /books/. Calibre-Web kann keine neue Bibliothek erstellen – zuerst mit Calibre Desktop eine Bibliothek anlegen und dort eBooks hinzufügen.
  6. „413 Request Entity Too Large" beim Upload: Tritt auf, wenn ein Reverse Proxy (Nginx, Traefik) vorgeschaltet ist und das Upload-Limit nicht angepasst wurde. In der Nginx-Konfiguration client_max_body_size 200M; setzen. Calibre-Web selbst limitiert auf 200 MB pro Datei.
  7. Admin-Passwort vergessen: Passwort per CLI zurücksetzen: docker exec -it calibre-web python3 /app/calibre-web/cps.py -p /config/app.db -s admin:neuespasswort123

Häufige Fragen

Ich habe noch keine Calibre-Bibliothek – wie starte ich?

Calibre-Web benötigt zwingend eine vorhandene Calibre-Bibliothek. Lade dazu Calibre Desktop herunter, installiere es auf deinem Computer, lege eine neue Bibliothek an und füge einige eBooks hinzu. Den erzeugten Bibliotheksordner (enthält metadata.db) kopierst du dann auf deinen Server. Alternativ kannst du die metadata.db aus dem Calibre-Web-GitHub-Repository als Test-Bibliothek verwenden.

Wie aktiviere ich die eBook-Konvertierung (z. B. EPUB zu MOBI)?

Nur auf x86-64-Systemen: Entferne in der .env oder compose.yaml das Kommentar vor DOCKER_MODS=linuxserver/mods:universal-calibre, dann den Container neu erstellen: docker compose up -d --force-recreate. Der erste Start dauert länger (~400 MB Download). In den Admin-Einstellungen unter „Calibre Path" den Wert /usr/bin/ eintragen (gilt ab Version 0.6.22; ältere Versionen benötigen /usr/bin/ebook-convert).

Wie verbinde ich meinen Kobo-E-Reader?

In den Admin-Einstellungen unter „Edit Basic Configuration" den Punkt „Kobo sync" aktivieren. In den Benutzereinstellungen des gewünschten Accounts einen Kobo-Token generieren. Auf dem Kobo-Gerät den gespeicherten Shop-Link durch die Calibre-Web-URL ersetzen: http://HOST-IP:8083/kobo/DEIN-TOKEN.

Wie sichere ich meine Calibre-Web-Konfiguration?

Ein Backup des gesamten /config-Volumes genügt – es enthält app.db mit allen Einstellungen, Benutzern und Lese-Fortschritten. Die Calibre-Bibliothek selbst (Ordner mit metadata.db und eBook-Dateien) wird separat gesichert. Wer Google Drive als Bibliotheksspeicher nutzt, muss zusätzlich gdrive.db und settings.yaml sichern.

Kann ich Calibre Desktop und Calibre-Web gleichzeitig nutzen?

Nicht auf dieselbe metadata.db gleichzeitig. Wenn Calibre Desktop geöffnet ist und auf die Bibliothek zugreift, kommt es zu „database is locked"-Fehlern in Calibre-Web. Empfohlenes Vorgehen: Calibre Desktop für die Bibliotheksverwaltung nutzen, danach schließen; Calibre-Web übernimmt dann die Bereitstellung im Netz.

Wie richte ich HTTPS ein?

Calibre-Web läuft intern auf Port 8083 (HTTP). Für HTTPS wird ein vorgelagerter Reverse Proxy empfohlen – Nginx Proxy Manager, Traefik oder Caddy funktionieren alle gut. Wichtig: client_max_body_size 200M (Nginx) bzw. das entsprechende Äquivalent setzen, damit eBook-Uploads über den Proxy funktionieren. Bei Nutzung eines Docker-internen Netzwerks kannst du den ports:-Eintrag in der compose.yaml weglassen – der Reverse Proxy kommuniziert dann direkt über das interne Docker-Netz.

Fazit

Calibre-Web ist eine ausgereifte, aktiv gepflegte Lösung für alle, die ihre Calibre-Bibliothek über das Heimnetz oder Internet zugänglich machen wollen. Der LinuxServer.io-Image macht die Docker-Installation zum Routine-Aufbau: Ordner anlegen, .env anpassen, Stack starten, Pfad im Browser-Assistenten eintragen – fertig. Die häufigsten Stolpersteine sind der falsche Pfad im Einrichtungsassistenten (Container-Pfad /books, nicht Host-Pfad) und nicht passende PUID/PGID-Werte. Wer diese beiden Punkte beachtet, hat innerhalb von 20 Minuten eine funktionsfähige eBook-Bibliothek im Browser – inklusive OPDS-Katalog für E-Reader und optionalem Kobo-Sync.

Wer seinen Calibre-Web-Stack absichern und mit einem Passwortmanager kombinieren möchte, findet in Vaultwarden produktiv betreiben: Argon2-Admin-Token, Fail2Ban und sicheres Backup eine passende Ergänzung. Für einen vollständigen Medien-Stack auf demselben Host bietet sich Jellyfin mit Docker: eigener Media-Server ohne Abo als Schwesteranleitung an.

Weiterführende Anleitungen und Quellen

  1. Docker und Docker Compose auf Linux installieren – die Self-Hosting-Grundlage
  2. Docker Compose absichern: Secrets, Healthchecks, Non-Root und Read-Only
  3. Kavita mit Docker installieren: Schneller Reading-Server
  4. Jellyfin mit Docker: eigener Media-Server ohne Abo

Offizielle Quellen: Calibre-Web GitHub Repository (janeczku, Original-Entwickler) · LinuxServer.io Dokumentation: docker-calibre-web · Docker Hub: linuxserver/calibre-web