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

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

Calibre-Web mit Docker Compose installieren: eigene eBook-Bibliothek im Browser, OPDS für E-Reader, Kobo-Sync, PUID/PGID richtig setzen, Updates, Backup und typische Fehler.

Geprüft am 29.09.2026 · für calibre-web 0.6.27

WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

E-Reader mit leerem Bildschirm neben einem Stapel alter Bücher auf einem Holzschreibtisch, im Hintergrund Bücherregale

Calibre-Web macht eine vorhandene Calibre-Bibliothek im Browser, auf dem Smartphone und per E-Reader-App von jedem Gerät im Netz erreichbar, ohne dass der Desktop-Client Calibre auf dem Server laufen muss. Die Open-Source-Anwendung bringt einen EPUB-Reader, OPDS-Katalog, Kobo-Sync, E-Mail-Versand an Kindle oder Tolino, optionale eBook-Konvertierung und eine Mehrbenutzerverwaltung mit Rechten mit.

Voraussetzungen

  1. Docker Engine ab 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), 1 CPU-Kern und mindestens 512 MB freier RAM; mit aktivierter eBook-Konvertierung eher 1 GB
  3. Vorhandene Calibre-Bibliothek mit metadata.db und eBook-Dateien. Calibre-Web kann keine neue Bibliothek anlegen, nur bestehende nutzen
  4. Schreibzugriff auf den Bibliotheksordner für den Host-Benutzer (PUID/PGID ermitteln mit id -u && id -g) sowie sudo-Rechte für Ordner unter /opt
  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

Legen Sie einen eigenen Projektordner an: ein Ordner pro Anwendung, darin compose.yaml und .env. Die Konfigurationsdaten von Calibre-Web landen in einem Unterordner; die Bibliothek selbst darf an ihrem bisherigen Ort bleiben.

sudo mkdir -p /opt/calibre-web/calibre-web/config
# Bibliotheksordner liegt z. B. unter /opt/calibre-web/calibre/library
# Falls noch nicht vorhanden, jetzt anlegen und die Calibre-Bibliothek hineinkopieren:
sudo mkdir -p /opt/calibre-web/calibre/library
# Eigentümer setzen (1000:1000 durch Ihre PUID:PGID ersetzen)
sudo chown -R 1000:1000 /opt/calibre-web/calibre-web/config /opt/calibre-web/calibre/library

Liegt Ihre Calibre-Bibliothek an einem anderen Ort (z. B. /mnt/nas/Bibliothek), passen Sie 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/ und calibre/. Mit ls -la /opt/calibre-web/calibre/library/metadata.db prüfen Sie, ob die Bibliotheksdatei vorhanden ist. Ohne sie lässt sich die Einrichtung im Browser nicht abschließen.

Schritt 2: .env-Datei anlegen

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

# /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

Ermitteln Sie PUID und PGID mit folgendem Befehl und tragen Sie die Werte ein:

id -u && id -g

Wichtig: PUID und PGID müssen mit dem Eigentümer der metadata.db auf dem Host übereinstimmen. Stimmen sie nicht, kann der Container nicht in die Datenbank schreiben, typischer Fehler: „attempt to write a readonly database“.

Verifizieren: cat /opt/calibre-web/.env zeigt die Werte. stat -c '%u:%g' /opt/calibre-web/calibre/library/metadata.db gibt UID und GID der Datei aus; sie müssen PUID und PGID entsprechen.

Schritt 3: compose.yaml anlegen

Das gängige Docker-Image für Calibre-Web kommt von LinuxServer.io (lscr.io/linuxserver/calibre-web). Das Projekt pflegt es regelmäßig und baut es für x86-64 und ARM64. Das ältere Image technosoft2000/calibre-web sollten Sie nicht mehr verwenden, es wird nicht mehr gepflegt.

ParameterWertHinweis
Imagelscr.io/linuxserver/calibre-web:latestStabile Releases; aktuell Calibre-Web 0.6.27
Port8083 → 8083Web-Oberfläche und OPDS; kein zweiter Port nötig
Volume /configHost-Pfad aus CONFIG_PATHapp.db, Logs
Volume /booksHost-Pfad aus BOOKS_PATHCalibre-Bibliothek mit metadata.db
PUID/PGIDaus .envEigentümer der metadata.db
TZaus .envz. B. Europe/Berlin
Restartunless-stoppedNeustart nach Absturz und Reboot, nicht nach manuellem Stopp
# /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 Variable DOCKER_MODS: Sie installiert beim ersten Container-Start die Calibre-Programme für die eBook-Konvertierung (z. B. EPUB zu MOBI) nach. Das ist ein Download von mehreren hundert MB und verlängert den ersten Start deutlich. Laut LinuxServer.io funktioniert diese Erweiterung nur auf x86-64; auf ARM-Systemen (Raspberry Pi, Apple Silicon) lassen Sie sie weg. Mehr zu Compose-Syntax und Volumes erklärt die Grundlagenanleitung Docker-Netzwerke und Volumes richtig nutzen.

Verifizieren: docker compose config aus dem Projektordner gibt die aufgelöste Konfiguration mit den Werten aus der .env aus, ohne Fehlermeldung.

Schritt 4: Stack starten

Starten Sie den Container aus dem Projektordner heraus. Beim ersten Start lädt Docker das Image herunter. Der Healthcheck prüft alle 30 Sekunden; nach etwa einer Minute sollte der Container als „healthy“ gelten.

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 (gekürzt):

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

Verifizieren: curl -I http://localhost:8083 liefert eine Antwort mit HTTP/1.1 302 FOUND oder 200 OK. Erscheint stattdessen „Connection refused“, sind die Logs mit docker compose logs calibre-web der erste Anlaufpunkt.

Schritt 5: Ersteinrichtung im Browser

Öffnen Sie http://HOST-IP:8083 im Browser und melden Sie sich mit den Standard-Zugangsdaten an:

  1. Benutzername: admin
  2. Passwort: admin123

Danach erscheint die Datenbank-Konfiguration mit dem entscheidenden Feld „Location of Calibre database“. Tragen Sie hier den Container-Pfad /books ein, nicht den Host-Pfad (/opt/calibre-web/calibre/library). Der Host-Pfad ist die häufigste Ursache für die Meldung „DB Location is not Valid“.

Ändern Sie das Passwort sofort über „Admin“ und den Benutzer „admin“. Wählen Sie ein starkes Passwort, bevor der Dienst im Netzwerk erreichbar ist.

Unter „Admin“ → „Edit Basic Configuration“ finden Sie die wichtigsten Optionen: Upload-Funktion, Gastmodus, LDAP, Kobo-Sync und im Bereich „External Binaries“ den Pfad /usr/bin/ für die eBook-Konvertierung (nur mit DOCKER_MODS).

Verifizieren: Die Startseite zeigt die Buch-Cover Ihrer Bibliothek. Unter „Admin“ → „About“ erscheint die App-Version. Die Anmeldung mit admin123 schlägt nach der Passwortänderung fehl.

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

Der OPDS-Katalog ist ohne weitere Konfiguration unter http://HOST-IP:8083/opds erreichbar. Tragen Sie diese URL in Ihrer E-Reader-App ein:

  1. KOReader: OPDS-Katalog → neue Quelle → URL, Benutzername und Passwort eintragen
  2. Moon+ Reader / Librera Reader: Netzwerkbibliothek → OPDS → URL und Zugangsdaten
  3. Apps ohne Anmeldedialog akzeptieren Zugangsdaten auch in der URL (http://BENUTZER:PASSWORT@HOST-IP:8083/opds). Nutzen Sie das nur im Heimnetz oder über HTTPS, denn sonst geht das Passwort im Klartext übers Netz.

Für Kobo-E-Reader: In den Admin-Einstellungen „Kobo sync“ aktivieren, dann in den Benutzereinstellungen einen Kobo-Token erzeugen. Calibre-Web zeigt dabei die fertige Adresse http://HOST-IP:8083/kobo/TOKEN an. Diese tragen Sie auf dem Kobo in der Datei .kobo/Kobo/Kobo eReader.conf als Wert von api_endpoint ein.

Verifizieren: http://HOST-IP:8083/opds im Browser liefert nach der Anmeldung ein XML-Dokument, und in der E-Reader-App erscheinen Kategorien und Bücher. Ein Download-Test mit einem kleinen EPUB bestätigt, dass das Volume korrekt eingebunden ist.

Schritt 7: Updates und Backups

LinuxServer.io veröffentlicht regelmäßig aktualisierte Images. Ein Update läuft mit wenigen Befehlen; legen Sie vorher ein Backup an:

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

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

Für das Backup von Calibre-Web reicht das /config-Verzeichnis: Es enthält app.db mit allen Einstellungen, Benutzern und Lesefortschritten. Die Calibre-Bibliothek selbst (Ordner mit metadata.db und eBook-Dateien) sichern Sie separat nach Ihrer bestehenden Backup-Strategie. Stoppen Sie den Container kurz, damit die Datenbank konsistent gesichert wird:

cd /opt/calibre-web
docker compose stop
sudo tar -czf calibre-web-config-backup-$(date +%Y%m%d).tar.gz calibre-web/config/
docker compose start

Verifizieren: docker compose ps zeigt nach dem Update Up … (healthy), unter „Admin“ → „About“ steht die neue Version, und tar -tzf calibre-web-config-backup-*.tar.gz | grep app.db findet die Datenbank im Archiv.

Troubleshooting / Typische Fehler

  1. „DB Location is not Valid“ / „Cannot access metadata.db“: In der Datenbank-Konfiguration wurde der Host-Pfad statt des Container-Pfads eingetragen. Lösung: /books eintragen. 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 ist mit :ro eingebunden. Lösung: id -u && id -g auf dem Host ausführen, Werte in der .env korrigieren oder den Eigentümer mit sudo chown -R 1000:1000 /pfad/zur/bibliothek anpassen (UID ersetzen), danach docker compose up -d.
  3. „database is locked“: Calibre Desktop hat dieselbe metadata.db gleichzeitig geöffnet. Gleichzeitiger Schreibzugriff beider Programme kann die Datenbank beschädigen. Schließen Sie Calibre Desktop, solange Calibre-Web auf die Bibliothek schreibt.
  4. DOCKER_MODS schlägt auf ARM fehl: linuxserver/mods:universal-calibre gibt es nur für x86-64. Auf ARM-Systemen die Variable auskommentieren.
  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/. Legen Sie zuerst mit Calibre Desktop eine Bibliothek an und fügen Sie eBooks hinzu.
  6. „413 Request Entity Too Large“ beim Upload: Ein vorgeschalteter Reverse Proxy begrenzt die Upload-Größe. In Nginx setzen Sie z. B. client_max_body_size 200M;.
  7. Admin-Passwort vergessen: Setzen Sie es per Kommandozeile zurück, wie in der LinuxServer.io-Doku beschrieben: docker exec -it calibre-web python3 /app/calibre-web/cps.py -p /config/app.db -s admin:NEUES-PASSWORT. Ohne die Angabe -p /config/app.db scheint der Befehl zu funktionieren, ändert aber nichts.

Häufige Fragen

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

Calibre-Web benötigt eine vorhandene Calibre-Bibliothek. Laden Sie dazu Calibre Desktop herunter, installieren Sie es auf Ihrem Computer, legen Sie eine neue Bibliothek an und fügen Sie einige eBooks hinzu. Den erzeugten Bibliotheksordner mit der metadata.db kopieren Sie dann auf Ihren Server.

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

Nur auf x86-64-Systemen: Entfernen Sie in der compose.yaml das Kommentarzeichen vor DOCKER_MODS=linuxserver/mods:universal-calibre und erstellen Sie den Container neu: docker compose up -d --force-recreate. Der erste Start dauert wegen des Downloads länger. In den Admin-Einstellungen unter „External Binaries“ tragen Sie als Pfad zum Calibre-Konverter /usr/bin/ ein (ab Version 0.6.22; ältere Versionen erwarten /usr/bin/ebook-convert).

Wie verbinde ich meinen Kobo-E-Reader?

Siehe Schritt 6: „Kobo sync“ unter „Edit Basic Configuration“ aktivieren, Kobo-Token in den Benutzereinstellungen erzeugen und die angezeigte Adresse http://HOST-IP:8083/kobo/TOKEN in der Kobo eReader.conf als api_endpoint eintragen.

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 Lesefortschritten. Die Calibre-Bibliothek sichern Sie separat. Wer Google Drive als Bibliotheksspeicher nutzt, sichert zusätzlich gdrive.db und settings.yaml.

Kann ich Calibre Desktop und Calibre-Web gleichzeitig nutzen?

Nicht gleichzeitig auf dieselbe metadata.db. Ist Calibre Desktop geöffnet, kommt es in Calibre-Web zu „database is locked“-Fehlern. Nutzen Sie Calibre Desktop für die Bibliotheksverwaltung und schließen Sie es danach; Calibre-Web übernimmt dann die Bereitstellung im Netz.

Wie richte ich HTTPS ein?

Calibre-Web spricht auf Port 8083 nur HTTP. Für HTTPS setzen Sie einen Reverse Proxy davor, etwa Nginx Proxy Manager, Traefik oder Caddy. Passen Sie dort das Upload-Limit an (Nginx: client_max_body_size). Läuft der Proxy im selben Docker-Netzwerk, können Sie den ports:-Eintrag in der compose.yaml weglassen, sodass Calibre-Web nur noch über den Proxy erreichbar ist.

Fazit

Mit dem LinuxServer.io-Image ist die Installation schnell erledigt: Ordner anlegen, .env anpassen, Stack starten, Pfad im Browser eintragen. Die häufigsten Stolpersteine sind der falsche Bibliothekspfad (Container-Pfad /books, nicht Host-Pfad) und nicht passende PUID/PGID-Werte.

Wer seine selbstgehosteten Dienste zusätzlich mit einem eigenen Passwortmanager absichern 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 an.

Weiterführende Anleitungen und Quellen

  1. Docker und Docker Compose auf Linux installieren, die Selfhosting-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