Audiobookshelf: Hörbücher & Podcasts selbst hosten
Audiobookshelf 2.36 mit Docker und Traefik einrichten: Hörbuch-Bibliothek mit Kapiteln, Podcast-Abos, serverseitiger Hörfortschritt und Apps fürs Handy.
Inhaltsverzeichnis
Hörbücher liegen bei den meisten als MP3-Sammlung auf einer Festplatte – und der Hörfortschritt lebt im Kopf. Audiobookshelf macht daraus einen eigenen Hörbuch- und Podcast-Server, der sich merkt, wo du stehen geblieben bist, auf dem Handy weiterspielt und Podcasts selbst nachlädt.
Was bauen wir?
Am Ende läuft Audiobookshelf 2.36.0 in Docker hinter deinem Traefik unter
https://DEINE_DOMAIN, mit gültigem Let’s-Encrypt-Zertifikat. Du hast zwei Bibliotheken: eine
für Hörbücher (mit Kapiteln, Cover und Metadaten von Audible.de) und eine für Podcasts,
die neue Episoden automatisch holt. Der Hörfortschritt liegt serverseitig im Konto – du hörst
am Rechner dort weiter, wo das Handy aufgehört hat.
Für Musik ist Audiobookshelf nicht gedacht – dafür ist Navidrome das passende Werkzeug, für Filme und Serien Jellyfin. Alle drei laufen problemlos parallel.
Audiobookshelf ist dabei erfreulich schlank: Der Container braucht im Leerlauf rund 55 MiB RAM, das Image ist 469 MB groß. Platz brauchen praktisch nur deine Audiodateien.
Voraussetzungen
- Ein Server mit Debian 13 und Docker (getestet auf einem netcup VPS mit Docker 29.6.1 und Compose v5.3.1)
- Ein laufender Traefik samt
proxy-Netz, wie im Reverse Proxy mit Traefik eingerichtet - Eine Subdomain, die auf den Server zeigt – siehe Domain mit dem Server verbinden
- Grundlagen zu Docker Compose und Bind Mounts
- Deine Hörbuch-Dateien (MP3, M4B, FLAC …). Wenn du noch keine hast: LibriVox bietet gemeinfreie Hörbücher, auch auf Deutsch.
VPS 1000 G12.5
4 vCore · 8 GB RAM · 128 GB SSD
ab 14,50 €/Monat
Reicht für Audiobookshelf locker – der Dienst selbst ist winzig, den Platz brauchen die Dateien.
💶 1 Monat gratis für netcup-Neukunden:
Einmal einlösbar, gilt für VPS 1000 G12.5. Im Warenkorb einlösen →
💶 5 € Gutschein für netcup-Neukunden: immer gültig · nicht für Domains und VPS Lite
Schritt für Schritt
1. Verzeichnisse anlegen
Audiobookshelf trennt vier Datenbereiche – und genau diese Trennung macht das Backup später einfach: Konfiguration (Datenbank, Konten), Metadaten (Cover, Cache, interne Sicherungen) und deine Medien in eigenen Ordnern.
mkdir -p /opt/audiobookshelf/{config,metadata,audiobooks,podcasts}Das Image startet von Haus aus als root; mit dem user: "1000:1000" oben läuft der Prozess
stattdessen unter UID/GID 1000. Die Ordner müssen deshalb
diesem Benutzer gehören, sonst kann Audiobookshelf weder scannen noch Podcasts ablegen:
chown -R 1000:1000 /opt/audiobookshelf2. Hörbücher ablegen – die Ordnerstruktur entscheidet
Audiobookshelf leitet Autor und Titel aus der Ordnerstruktur ab und ergänzt sie um die
Tags in den Dateien. Halte dich an Autor/Titel/, dann stimmt die Zuordnung von Anfang an:
/opt/audiobookshelf/audiobooks/
└── Franz Kafka/
└── Ein Landarzt/
├── landarzt_01.mp3
├── landarzt_02.mp3
├── landarzt_03.mp3
└── landarzt_04.mp3Mehrere Dateien in einem Titel-Ordner werden zu einem Hörbuch mit Kapiteln zusammengefasst – nicht zu vier einzelnen Büchern. Nach dem Kopieren die Rechte nachziehen:
chown -R 1000:1000 /opt/audiobookshelf/audiobooks3. Compose-Datei schreiben
Lege /opt/audiobookshelf/compose.yaml an und ersetze DEINE_DOMAIN durch deine echte
Subdomain:
services:
audiobookshelf:
image: ghcr.io/advplyr/audiobookshelf:2.36.0
restart: unless-stopped
user: "1000:1000"
environment:
TZ: Europe/Berlin
volumes:
- ./config:/config
- ./metadata:/metadata
- ./audiobooks:/audiobooks
- ./podcasts:/podcasts
networks: [proxy]
labels:
- "traefik.enable=true"
- "traefik.http.routers.abs.rule=Host(`DEINE_DOMAIN`)"
- "traefik.http.routers.abs.entrypoints=websecure"
- "traefik.http.routers.abs.tls.certresolver=le"
- "traefik.http.services.abs.loadbalancer.server.port=80"
networks:
proxy:
external: trueDrei Details sind hier wichtig:
loadbalancer.server.port=80– Audiobookshelf lauscht im Container auf Port 80. Die 13378 aus der offiziellen Beispiel-Compose ist nur der Port, den man ohne Reverse Proxy nach außen veröffentlicht. Wir veröffentlichen keinen Port: Traefik erreicht den Container über dasproxy-Netz.- Die gepinnte Version
2.36.0stattlatest– so kommen Updates dann, wenn du sie einplanst, und nicht mitten in der Woche. user: "1000:1000"passt zu den Rechten aus Schritt 1.
Starte den Stack:
cd /opt/audiobookshelf && docker compose up -dPrüfe, dass der Container läuft:
docker compose psDu solltest Up sehen, nicht Restarting:
NAME STATUS IMAGE
audiobookshelf-audiobookshelf-1 Up 8 seconds ghcr.io/advplyr/audiobookshelf:2.36.04. TLS prüfen, bevor du klickst
Traefik braucht ein paar Sekunden für das Zertifikat. Ob alles steht, verrät der Status-Endpunkt – er antwortet ohne Login:
curl https://DEINE_DOMAIN/status{"app":"audiobookshelf","serverVersion":"2.36.0","isInit":false,"language":"en-us",
"authMethods":["local"],"ConfigPath":"/config","MetadataPath":"/metadata"}Damit stehen zwei Dinge fest: Es läuft wirklich 2.36.0, und isInit:false heißt, der
Server wartet noch auf das erste Konto. Kommt hier ein Zertifikatsfehler, schau zuerst in die
Traefik-Logs – nicht in Audiobookshelf.
5. Erstes Konto anlegen
Ruf https://DEINE_DOMAIN im Browser auf. Beim ersten Aufruf verlangt Audiobookshelf
Benutzername und Passwort für das Root-Konto, also den Administrator.
Keine Registrierung – und keine Passwort-Wiederherstellung
Danach fällt dir auf, dass die Adresse auf https://DEINE_DOMAIN/audiobookshelf/ springt. Das
ist Absicht des Projekts: Die Weboberfläche wird mit dem festen Router-Pfad /audiobookshelf
gebaut. Es gibt zwar eine Variable ROUTER_BASE_PATH, sie hilft zur Laufzeit aber nicht – der
Pfad steckt im fertig gebauten Frontend im Image (getestet: mit ROUTER_BASE_PATH: "" lädt die
Oberfläche weiterhin aus /audiobookshelf/_nuxt/…). Der Aufruf von https://DEINE_DOMAIN
funktioniert trotzdem, deine Lesezeichen tragen nur den Zusatz.
6. Oberfläche auf Deutsch stellen
Klick oben rechts auf deinen Benutzernamen und wähle unter Language „Deutsch".
Hinweis
7. Hörbuch-Bibliothek anlegen
Unter Einstellungen → Bibliotheken legst du die erste Bibliothek an:

- Medientyp:
Bücher - Bibliotheksname: z. B.
Hörbücher - Metadatenanbieter:
Audible.de– für deutsche Titel liefert der deutlich bessere Treffer als der StandardGoogle Books. Zur Wahl stehen außerdem iTunes, FantLab.ru und die anderen Audible-Länderkataloge. - Verzeichnisse:
/audiobookseintragen und mit Enter bestätigen. Das ist der Pfad im Container – er zeigt dank Bind Mount auf/opt/audiobookshelf/audiobooks.
Dann auf Erstellen.
8. Den ersten Scan selbst auslösen
Hier stolpern die meisten: Die Bibliothek bleibt zunächst leer.
Hörbücher Bibliothek ist leer!Der erste Scan startet nicht von allein – auch nach Minuten nicht (nachgemessen). Klick in der Bibliotheksansicht auf Bibliothek scannen. Bei vier Dateien und 14 MB war der Scan in unter vier Sekunden durch, danach steht das Hörbuch mit Cover in der Übersicht:

Ab jetzt beobachtet Audiobookshelf den Ordner selbst: Neu hinzukopierte Dateien werden erkannt, ein manueller Scan ist nur beim Anlegen nötig.
9. Hören – Kapitel, Tempo, Sleeptimer
Ein Klick auf das Cover öffnet die Detailseite. Aus den vier MP3s ist ein Hörbuch mit vier Kapiteln geworden, Laufzeit und Größe stehen oben:

Der Player unten bleibt beim Navigieren stehen. Dort findest du Tempo (1.0x), Sprungmarken,
Lesezeichen, die Kapitelliste und den Sleeptimer (Schlummer-Symbol). Der Fortschritt – im
Bild 0:06 / 28:52 – landet serverseitig im Konto und nicht im Browser. Genau deshalb hostet
man dieses Ding selbst.
10. Podcasts abonnieren
Podcasts brauchen eine eigene Bibliothek, weil Audiobookshelf sie anders behandelt: Episoden, Feeds, automatische Downloads. Also nochmal Einstellungen → Bibliotheken → Bibliothek hinzufügen, diesmal mit:
- Medientyp:
Podcasts - Name: z. B.
Podcasts - Metadatenanbieter:
iTunes - Verzeichnis:
/podcasts
In der neuen Bibliothek klickst du auf Hinzufügen. In das Feld „Suchbegriff oder RSS-Feed URL eingeben" kommt entweder ein Suchbegriff – dann durchsucht der Server den iTunes-Katalog – oder direkt die Feed-URL:

Beim Abonnieren legst du fest, ob neue Episoden automatisch heruntergeladen werden und wie viele Audiobookshelf vorhalten soll. Denk an den Plattenplatz: Ein wöchentlicher Podcast mit 60-Minuten-Episoden schlägt je Episode mit etwa 30 MB (64 kbps) bis 55 MB (128 kbps) zu Buche – über ein Jahr also grob 1,5 bis 3 GB.
Feed statt Suche
11. Weitere Nutzer anlegen
Der Hörfortschritt hängt am Konto – für Partner oder Kinder legst du also eigene Nutzer an, statt das Root-Konto zu teilen. Das geht unter Einstellungen → Benutzer → Benutzer hinzufügen.
Es gibt drei Kontotypen: root (nur einmal, das erste Konto), admin (darf Einstellungen und
Bibliotheken ändern) und user für den Normalfall. Ein frisch angelegtes user-Konto bekommt
diese Rechte:
download: true – darf Titel herunterladen (fürs Offline-Hören in der App)
update: false – darf keine Metadaten ändern
delete: false – darf nichts löschen
upload: false – darf keine Dateien hochladen
accessAllLibraries: true – sieht ALLE Bibliotheken
accessExplicitContent: false – Titel mit Explicit-Kennzeichnung bleiben verborgenDie vorletzte Zeile ist die wichtige: Standardmäßig sieht ein neuer Nutzer alle
Bibliotheken. Wenn die Kinder nicht in die Erwachsenen-Hörbücher schauen sollen, schalte
accessAllLibraries im Benutzerdialog ab und wähle die erlaubten Bibliotheken einzeln aus.
Tipp
12. Apps fürs Handy
Der Alltag läuft am Telefon. Es gibt eine offizielle Audiobookshelf-App für Android (Play Store und F-Droid) und für iOS. Beim ersten Start gibst du an:
- Server-Adresse:
https://DEINE_DOMAIN– mithttps://, ohne Pfad - Benutzername und Passwort deines Kontos
Danach lädt die App Titel offline herunter und meldet den Fortschritt an den Server zurück. Für iOS gibt es zusätzlich Alternativen wie Plappa oder ShelfPlayer, die dieselbe API nutzen.
Wenn es nicht funktioniert
Die Bibliothek bleibt nach dem Anlegen leer. Der erste Scan läuft nicht automatisch – das
ist kein Fehler, sondern Audiobookshelfs Verhalten. Klick in der Bibliotheksansicht auf
Bibliothek scannen. Bleibt sie danach leer, prüfe mit docker compose exec audiobookshelf ls -R /audiobooks, ob der Container die Dateien überhaupt
sieht, und mit ls -ln /opt/audiobookshelf/audiobooks, dass alles UID 1000 gehört.
Aus vier MP3-Dateien werden vier Hörbücher statt vier Kapitel. Die Dateien liegen direkt im
Autoren-Ordner statt in einem gemeinsamen Titel-Ordner. Audiobookshelf gruppiert nach
Autor/Titel/ – Dateien in einen Unterordner mit dem Buchtitel legen und erneut scannen.
Traefik antwortet mit 404, obwohl der Container läuft. Meist fehlt
traefik.http.services.abs.loadbalancer.server.port=80. Audiobookshelf lauscht im Container auf
80; ohne diese Zeile rät Traefik und trifft daneben. Prüfe außerdem, dass der Container
wirklich im proxy-Netz hängt.
Die Adresse springt auf /audiobookshelf/. Das ist normal: Das Frontend wird mit diesem
festen Router-Pfad ausgeliefert, und ROUTER_BASE_PATH ändert daran zur Laufzeit nichts, weil
der Pfad im Image eingebaut ist. https://DEINE_DOMAIN bleibt als Einstieg gültig.
Nach dem Gerätewechsel ist die Oberfläche wieder englisch. Die Sprachwahl liegt lokal im
Browser, nicht am Konto. Auf dem neuen Gerät einmal über den Benutzernamen → Language →
„Deutsch" setzen.
Der Podcast wird nicht gefunden. Die Suche fragt den iTunes-Katalog ab; ein Tippfehler oder ein dort fehlender Eintrag führt zu „Keine Suchergebnisse". Nimm stattdessen die RSS-URL des Podcasts – dasselbe Feld akzeptiert beides.
Dein Problem ist nicht dabei? Alle Fehlermeldungen durchsuchen →
Wartung & Backups
Updates. Audiobookshelf erscheint häufig, grob monatlich eine neue Minor-Version. Weil die
Version gepinnt ist, aktualisierst du bewusst: Tag in der compose.yaml erhöhen, dann
cd /opt/audiobookshelf && docker compose pull && docker compose up -dVor einem Sprung über mehrere Versionen lohnt der Blick in die Release-Notes – und ein frisches Backup. Wie du das systematisch machst, steht in Docker-Stack aktuell halten.
Eingebaute Sicherung – erst mal einschalten. Audiobookshelf kann selbst Archive schreiben, tut es aber nicht von Haus aus: Unter Einstellungen → Sicherungen steht der Schalter „Automatische Sicherung" standardmäßig auf aus.

Schalte sie ein und prüfe die zwei Grenzwerte darunter, denn beide sind knapp gesetzt:
- Anzahl der aufzubewahrenden Sicherungen: 2 – ältere werden gelöscht. Für „ich merke einen Fehler erst nach zwei Wochen" ist das zu wenig; 7 bis 14 sind realistischer.
- Maximale Sicherungsgröße: 1 GB – wird das Archiv größer, bricht die Sicherung ab. Mit
vielen Covern in
/metadatakann das passieren;0bedeutet „keine Begrenzung".
Die Archive landen unter /metadata/backups, bei uns also in
/opt/audiobookshelf/metadata/backups. Enthalten sind Benutzer, Hörfortschritt, Details der
Bibliotheksobjekte, Servereinstellungen und die Bilder aus /metadata/items und
/metadata/authors. Die Oberfläche sagt es selbst deutlich: Dateien aus deinen
Medien-Ordnern sind nicht enthalten.
Zurückspielen geht auf derselben Seite über Sicherung hochladen – gut zu wissen, denn damit zieht ein Umzug auf einen neuen Server auf zwei Schritte zusammen: Archiv hochladen, Medien kopieren.
Echtes Backup. Damit ergibt sich eine klare Aufteilung:
config/undmetadata/sind klein (bei uns 480 KB und 112 KB) und gehören täglich ins Backup – dort steckt die eigentliche Arbeit: Konten, Fortschritt, Metadaten.audiobooks/undpodcasts/sind groß und ändern sich selten. Sie brauchen ebenfalls eine Sicherung, aber in anderem Rhythmus – Podcast-Episoden kannst du auch als „jederzeit nachladbar" einstufen.
Beides erledigt Restic zuverlässig. Prüfe einmal im Quartal mit einem echten Restore, dass die Sicherung auch zurückläuft.
Scan per API auslösen
Wenn du Hörbücher per Skript oder Syncthing auf den Server schiebst, musst du nicht in die Oberfläche: Audiobookshelf hat eine HTTP-API. Unter Einstellungen → API-Schlüssel erzeugst du ein Token, danach startet dieser Aufruf den Scan einer Bibliothek:
curl -X POST https://DEINE_DOMAIN/api/libraries/DEINE_LIBRARY_ID/scan \
-H "Authorization: Bearer DEIN_TOKEN"Die IDs deiner Bibliotheken liefert GET /api/libraries mit demselben Header. Praktisch für
einen Cronjob nach dem nächtlichen Datei-Sync – wie du solche Jobs überwachst, steht in
Healthchecks.
Platz im Auge behalten. Audiodateien und automatisch geladene Episoden sind die einzigen echten Platzfresser:
du -sh /opt/audiobookshelf/*14M /opt/audiobookshelf/audiobooks
480K /opt/audiobookshelf/config
112K /opt/audiobookshelf/metadata
4.0K /opt/audiobookshelf/podcastsWird es dir zu viel, ist zusätzlicher Block-Storage für die Medienordner die günstigere Antwort als ein größerer Server – der Rest von Audiobookshelf bleibt winzig.
Feedback per E-Mail: feedback@serverkueche.de
Das könnte dir auch schmecken


