Calibre, Calibre-Web & CWA auf deinem Server installieren: Dein E-Book-Management mit Docker
E-Book-Manager Calibre und seine Web-Alternativen Calibre-Web und CWA (Calibre-Web Automated) auf seinem eigenen Server mit Docker installieren. Damit könnt ihr eure E-Book-Bibliothek zentral verwalten und von überall darauf zugreifen.
 
 Inhaltsverzeichnis
- Verbindung zum Server und Docker-Installation prüfen/durchführen
- Calibre mit Docker installieren (LinuxServer.io Image)
- Calibre – Der erste Test (und die Tücken)
- Calibre-Web – Die leichtgewichtige Alternative
- Calibre-Web – Konfiguration und Nutzung
- CWA (Calibre-Web Automated) – Der moderne Fork
- CWA – Konfiguration und Nutzung
- Wichtiger Hinweis: Backup!
- Ausblick: Reverse Proxy & Co.
- Fazit
Du kannst dir das Setup auch auf Youtube in diesem Video ansehen.
Verbindung zum Server und Docker-Installation prüfen/durchführen
Das Erste, was wir brauchen, ist eine Verbindung zu unserem Server. Ich öffne ein Terminal und verbinde mich per SSH:
ssh deployn@DEINE_SERVER_IPErsetzt deployn durch euren Benutzernamen und DEINE_SERVER_IP durch die IP-Adresse eures Servers. Nach der Authentifizierung (ggf. mit yes bestätigen und Passwort eingeben) sind wir verbunden.
Nun prüfen wir, ob Docker und Docker Compose installiert sind:
docker -v
docker compose versionFalls Docker noch nicht installiert ist, holen wir das nach. Für Ubuntu-Server (passt dies ggf. für eure Distribution an) geht das oft so (basierend auf der offiziellen Docker-Dokumentation):
- 
Paketlisten aktualisieren: # Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update
- 
Docker Engine, CLI, Containerd und Docker Compose Plugin installieren: sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Nach der Installation prüfen wir erneut die Versionen:
docker -v
# Erwartete Ausgabe (Beispiel): Docker version 28.1.1, build ...
docker compose version
# Erwartete Ausgabe (Beispiel): Docker Compose version v2.25.1Optional können wir das gesamte System noch aktualisieren:
sudo apt update && sudo apt upgrade -yCalibre mit Docker installieren (LinuxServer.io Image)
Wir verwenden das beliebte Docker-Image von LinuxServer.io für Calibre.
- 
Ordner erstellen: Wir legen einen Ordner für unsere Calibre-Konfiguration an. mkdir calibre cd calibre
- 
docker-compose.ymlerstellen: Erstellt eine Datei namensdocker-compose.yml.nano docker-compose.yml
- 
Inhalt einfügen und anpassen: Kopiert die folgende Konfiguration hinein und passt sie an. services: calibre: image: lscr.io/linuxserver/calibre:latest container_name: calibre security_opt: - seccomp:unconfined #optional environment: - PUID=1000 # Eure Benutzer-ID - PGID=1000 # Eure Gruppen-ID - TZ=Europe/Berlin # Eure Zeitzone - PASSWORD=asdfasdf # Ein SICHERES Passwort wählen! - CLI_ARGS= # Optional: Zusätzliche Calibre CLI Argumente volumes: - ./config:/config # Pfad zur Konfiguration und Bibliothek auf dem Host ports: - 8080:8080 # GUI Zugriff - 8081:8081 # Calibre Server (optional) restart: unless-stopped
- 
Wichtige Anpassungen: - PUID/PGID: Prüft eure Benutzer- und Gruppen-ID mit dem Befehl idim Terminal auf eurem Server und passtPUIDundPGIDentsprechend an (oft ist es 1000).
- TZ: Setzt eure korrekte Zeitzone (z.B. Europe/Vienna,Europe/Zurich).
- PASSWORD: Ändert asdfasdfunbedingt in ein starkes, sicheres Passwort! Dieses Passwort wird für den Zugriff auf die Calibre GUI über den Browser benötigt.
- Volumes: ./config:/configbedeutet, dass im aktuellen Verzeichnis (calibre) ein Unterordnerconfigerstellt wird (falls nicht vorhanden), in dem Calibre seine Konfiguration und die E-Book-Bibliothek ablegt.
 
- PUID/PGID: Prüft eure Benutzer- und Gruppen-ID mit dem Befehl 
- 
Konfigurationsordner erstellen (falls nötig): Da wir ./configgemappt haben, stellen wir sicher, dass dieser Ordner existiert:mkdir config
- 
Container starten: sudo docker compose up -dDocker lädt nun das Calibre-Image herunter (dies kann dauern, es ist recht groß) und startet den Container im Hintergrund ( -d).
Calibre – Der erste Test (und die Tücken)
Nach dem Start können wir die Auslastung prüfen:
# Systemauslastung allgemein
htop
# Docker Container spezifisch
sudo docker stats
# Logs anschauen (Ctrl+C zum Beenden)
sudo docker compose logs -fIn meinem Fall verbrauchte Calibre direkt nach dem Start ca. 360 MB RAM. Die Logs sollten keine gravierenden Fehler zeigen.
Nun versuchen wir, auf die Weboberfläche zuzugreifen: Öffnet euren Browser und gebt http://DEINE_SERVER_IP:8080 ein.
Ihr solltet zur Anmeldung aufgefordert werden:
- Benutzername: abc(Standardbenutzer, wenn nicht anders konfiguriert)
- Passwort: Das Passwort, das ihr in der docker-compose.ymlfestgelegt habt (z.B.asdfasdf- hoffentlich habt ihr ein besseres gewählt!).
Nach erfolgreicher Anmeldung startet der Calibre-Einrichtungsassistent:
- Wählt den Speicherort der Bibliothek (der Standard im Container /configist korrekt, da wir diesen Ordner gemappt haben).
- Optional: Wählt euren E-Book-Reader aus.
- Schließt die Einrichtung ab.
Calibre startet nun seine vollständige Desktop-Oberfläche im Browser. Ihr seht eine leere Bibliothek und eventuell einen “Quick Start Guide”.
Achtung Performance: In meinem Test führte das Öffnen des Buches zu einer sehr hohen CPU- und RAM-Auslastung, die meinen kleinen Testserver überforderte und zeitweise unerreichbar machte. Ein Server-Neustart (sudo reboot) war nötig. Die volle Calibre-GUI über Web-VNC ist sehr ressourcenhungrig! Für den reinen Lese- und Verwaltungsbetrieb ist dies oft nicht die ideale Lösung.
Das Wichtigste an diesem Schritt war jedoch, dass Calibre im gemappten ./config-Ordner die Bibliotheksstruktur angelegt hat, insbesondere die metadata.db-Datei.
# Im 'calibre'-Ordner auf dem Host:
ls config/
# Sollte u.a. "Calibre Library" anzeigen
ls config/'Calibre Library'/
# Sollte u.a. "metadata.db" anzeigenCalibre-Web – Die leichtgewichtige Alternative
Da die volle Calibre-GUI zu schwerfällig ist, stoppen wir den Calibre-Container und installieren stattdessen Calibre-Web. Dies ist eine schlanke Webanwendung, die auf die von Calibre erstellte metadata.db zugreift.
- 
Calibre-Container stoppen: # Sicherstellen, dass wir im 'calibre'-Ordner sind cd /pfad/zu/eurem/calibre-ordner sudo docker compose down
- 
docker-compose-calibre-web.ymlerstellen: Wir erstellen eine neue Compose-Datei für Calibre-Web, um die Konfigurationen getrennt zu halten.nano docker-compose-calibre-web.yml
- 
Inhalt einfügen und anpassen: services: calibre-web: image: lscr.io/linuxserver/calibre-web:latest container_name: calibre-web environment: - PUID=1000 # Eure Benutzer-ID - PGID=1000 # Eure Gruppen-ID - TZ=Europe/Berlin # Eure Zeitzone - DOCKER_MODS=linuxserver/mods:calibre-web-update-calibre # Optional: Ermöglicht In-App-Updates für Calibre-Metadaten-Tools - OAUTHLIB_RELAX_TOKEN_SCOPE=1 # Optional: Für bestimmte OAuth-Logins nötig volumes: - ./calibre-web-config:/config # Neuer Ordner für Calibre-Web Konfiguration - ./config:/books # Pfad zur bestehenden Calibre-Bibliothek! ports: - 8083:8083 # Port für Calibre-Web restart: unless-stopped
- 
Wichtige Anpassungen: - PUID/PGID/TZ: Wie bei Calibre anpassen.
- Volumes:
- ./calibre-web-config:/config: Hier speichert Calibre-Web seine eigene Konfiguration. Wir erstellen diesen Ordner (- mkdir calibre-web-config).
- ./config:/books: Das ist der entscheidende Punkt! Wir mappen den Ordner mit der- Calibre Library, den Calibre zuvor im- ./config-Ordner erstellt hat, in den Container unter- /books. So greift Calibre-Web auf dieselbe Bibliothek zu. Stellt sicher, dass der Pfad- ./config/Calibre Librarykorrekt ist, relativ zu eurer- docker-compose-calibre-web.yml.
 
- Ports: Wir verwenden Port 8083, da8080eventuell noch von anderen Diensten genutzt werden könnte (oder um klar zu trennen).
 
- 
Container starten: sudo docker compose -f docker-compose-calibre-web.yml up -dDas Calibre-Web-Image ist deutlich kleiner und startet schneller. 
Calibre-Web – Konfiguration und Nutzung
- Zugriff: Öffnet http://DEINE_SERVER_IP:8083.
- Erster Login: Die Standard-Anmeldedaten sind:
- Benutzername: admin
- Passwort: admin123
 
- Benutzername: 
- Datenbankpfad konfigurieren: Nach dem Login werdet ihr aufgefordert, den Pfad zur Calibre-Datenbank anzugeben. Klickt auf den Button zum Auswählen, navigiert im Container zum Ordner /books(den wir gemappt haben) und wählt dort den Ordner mit der Bibliothek aus. Klickt auf “Save”.
- Passwort ändern: Geht sofort zu den Admin-Einstellungen -> Benutzer verwalten -> Wählt adminaus und ändert das Standardpasswortadmin123in ein sicheres Passwort!
- Uploads aktivieren (optional):
- Geht zu Admin -> Grundlegende Konfiguration bearbeiten -> Feature Konfiguration.
- Setzt einen Haken bei Uploads aktivieren. Speichern.
- Geht zurück zu Admin -> Benutzer verwalten -> Wählt adminaus.
- Setzt einen Haken bei Hochladen erlauben. Speichern.
- Nun sollte oben rechts ein Upload-Button erscheinen.
 
Jetzt könnt ihr eure Bibliothek sehen (inklusive des Quick Start Guides, falls er noch da ist). Ihr könnt Bücher hochladen:
- Einzelne Dateien: Klickt auf “Upload” und wählt eine Datei (z.B. EPUB, PDF).
- Weitere Formate zum Buch hinzufügen: Öffnet ein Buch, geht zu “Metadaten bearbeiten” -> “Buchformat hinzufügen” und ladet dort weitere Formate (PDF, MOBI etc.) hoch. So werden sie demselben Bucheintrag zugeordnet. (Beim direkten Upload mehrerer Dateien werden sie sonst als separate Bücher erkannt).
Calibre-Web ist deutlich ressourcenschonender als die volle Calibre-GUI und bietet eine gute Weboberfläche zum Lesen und Verwalten.
CWA (Calibre-Web Automated) – Der moderne Fork
CWA ist ein Fork von Calibre-Web mit einigen zusätzlichen Features und einem etwas moderneren Ansatz, z.B. bei der automatischen Verarbeitung von Büchern in einem “Watch”-Ordner.
- 
Neuen Ordner erstellen: Wir erstellen ein separates Verzeichnis für CWA. cd .. # Zurück zum übergeordneten Verzeichnis mkdir cwa cd cwa
- 
Benötigte Ordner anlegen: mkdir config # Für die CWA-Konfiguration mkdir books # Der "Watch"-Ordner für neue Bücher # Der eigentliche Bibliotheksordner wird von CWA innerhalb von 'config' oder einem separaten Mapping verwaltet. Im Beispiel unten nutzen wir ein separates Mapping. mkdir library # Hier wird CWA die strukturierte Bibliothek ablegen
- 
docker-compose.ymlerstellen:nano docker-compose.yml
- 
Inhalt einfügen und anpassen (Beispiel basierend auf Crocodilestick): services: calibre-web-automated: image: crocodilestick/calibre-web-automated:latest container_name: cwa environment: - PUID=1000 # Eure Benutzer-ID - PGID=1000 # Eure Gruppen-ID - TZ=Europe/Berlin # Eure Zeitzone volumes: - ./config:/config # CWA Konfigurationsdaten - ./library:/calibre-library # Hier wird die CWA-Bibliothek gespeichert - ./books:/cwa-book-ingest # Der "Watch"-Ordner für neue Uploads ports: - 8084:8083 # Port für CWA (wir nehmen 8084, da 8083 von Calibre-Web belegt ist) restart: unless-stopped
- 
Wichtige Anpassungen: - PUID/PGID/TZ: Wie gehabt.
- Volumes:
- ./config:/app/config: CWA-spezifische Konfigurationsdateien.
- ./library:/library: Hier legt CWA die verarbeiteten Bücher in einer Calibre-ähnlichen Struktur ab.
- ./books:/books: Bücher, die in diesen Ordner auf dem Host kopiert werden, sollten von CWA automatisch erkannt und in die- /libraryimportiert werden (konfigurierbar).
 
- Ports: Wir ändern den Host-Port auf 8084, um Konflikte zu vermeiden.
 
- 
Container starten: sudo docker compose up -d
CWA – Konfiguration und Nutzung
- Zugriff: Öffnet http://DEINE_SERVER_IP:8084.
- Erster Login: Standard wie bei Calibre-Web:
- Benutzername: admin
- Passwort: admin123
 
- Benutzername: 
- Datenbankpfad konfigurieren: CWA sollte automatisch erkennen, dass noch keine Datenbank existiert und eine neue im gemappten /calibre-library-Volume anlegen. Falls gefragt, gebt/calibre-libraryan.
- Passwort ändern: Auch hier: Sofort unter Settings -> Manage Users das Admin-Passwort ändern!
- Nutzung:
- Die Oberfläche ähnelt Calibre-Web (man kann auch zum hellen Theme wechseln).
- Uploads sind standardmäßig oft schon aktiviert.
- Ihr könnt Bücher hochladen oder Dateien in den gemappten ./books-Ordner auf dem Host legen, CWA sollte sie verarbeiten.
- CWA hat erweiterte Konverter-Optionen und Funktionen zur Metadaten-Suche.
- Das Hinzufügen mehrerer Formate zu einem Buch erfolgt wie bei Calibre-Web über “Edit Metadata” -> “Upload another format”.
- CWA verbraucht tendenziell etwas mehr RAM als das Standard-Calibre-Web.
 
Wichtiger Hinweis: Backup!
Egal ob ihr Calibre-Web oder CWA nutzt, eure wertvollen E-Books liegen nun in den gemappten Ordnern auf eurem Host-System!
- Bei Calibre-Web: Die Bücher liegen im Ordner ./calibre/config/Calibre Library. Die Konfiguration von Calibre-Web selbst liegt in./calibre/calibre-web-config. Sichert beide regelmäßig!
- Bei CWA: Die Bücher liegen im Ordner ./cwa/library. Die Konfiguration liegt in./cwa/config. Der Upload-Ordner ist./cwa/books. Sichertlibraryundconfig.
Ausblick: Reverse Proxy & Co.
Um eure Calibre-Web- oder CWA-Instanz sicher und bequem über eine Domain (z.B. ebooks.meine-domain.de) erreichbar zu machen, solltet ihr einen Reverse Proxy wie Nginx Proxy Manager, Traefik oder Caddy verwenden. Das ermöglicht HTTPS und versteckt die Ports.
Falls ihr keine feste öffentliche IPv4-Adresse habt, könnten Lösungen wie Pangolin interessant sein.
Fazit
Mit Docker könnt ihr Calibre, Calibre-Web oder CWA relativ einfach auf eurem Server betreiben. Während die volle Calibre-GUI sehr ressourcenhungrig ist, bieten Calibre-Web und CWA hervorragende, leichtgewichtige Alternativen für die Verwaltung und den Zugriff auf eure E-Book-Bibliothek über den Browser. Wählt die Lösung, die am besten zu euren Bedürfnissen und eurer Server-Performance passt.
Ich hoffe, dieses Tutorial hat euch gefallen.