Zum Inhalt springen
Serverküche
Suche

Die Suche wird geladen … (nur in der veröffentlichten Seite verfügbar).

Anwendungen Schwierigkeit: Fortgeschritten

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.

· 11 Min. Lesezeit ·Dauer: ca. 45 Minuten
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.
🍳 Empfehlung Anzeige

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.

Zu netcup →

💶 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.

Terminal
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:

Terminal
chown -R 1000:1000 /opt/audiobookshelf

2. 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:

Ausgabe
/opt/audiobookshelf/audiobooks/
└── Franz Kafka/
    └── Ein Landarzt/
        ├── landarzt_01.mp3
        ├── landarzt_02.mp3
        ├── landarzt_03.mp3
        └── landarzt_04.mp3

Mehrere 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:

Terminal
chown -R 1000:1000 /opt/audiobookshelf/audiobooks

3. Compose-Datei schreiben

Lege /opt/audiobookshelf/compose.yaml an und ersetze DEINE_DOMAIN durch deine echte Subdomain:

YAML
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: true

Drei 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 das proxy-Netz.
  • Die gepinnte Version 2.36.0 statt latest – 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:

Terminal
cd /opt/audiobookshelf && docker compose up -d

Prüfe, dass der Container läuft:

Terminal
docker compose ps

Du solltest Up sehen, nicht Restarting:

Ausgabe
NAME                              STATUS         IMAGE
audiobookshelf-audiobookshelf-1   Up 8 seconds   ghcr.io/advplyr/audiobookshelf:2.36.0

4. 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:

Terminal
curl https://DEINE_DOMAIN/status
Ausgabe
{"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

Audiobookshelf hat bewusst keine offene Registrierung: Weitere Nutzer legst du später selbst unter „Einstellungen → Benutzer" an. Für das Root-Konto gibt es aber auch kein „Passwort vergessen" – notiere es im Passwortmanager, z. B. in Vaultwarden.

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

Die Sprache ist eine Einstellung pro Browser, nicht pro Konto – Audiobookshelf legt sie lokal ab und speichert sie nicht am Benutzer. Auf jedem neuen Gerät stellst du sie also erneut ein.

7. Hörbuch-Bibliothek anlegen

Unter Einstellungen → Bibliotheken legst du die erste Bibliothek an:

Der Dialog „Neue Bibliothek" in Audiobookshelf mit Medientyp Bücher, dem Namen Hörbücher, Audible.de als Metadatenanbieter und dem Verzeichnis /audiobooks
Neue Bibliothek: Medientyp, Name, Metadatenanbieter und Verzeichnis

  • Medientyp: Bücher
  • Bibliotheksname: z. B. Hörbücher
  • Metadatenanbieter: Audible.de – für deutsche Titel liefert der deutlich bessere Treffer als der Standard Google Books. Zur Wahl stehen außerdem iTunes, FantLab.ru und die anderen Audible-Länderkataloge.
  • Verzeichnisse: /audiobooks eintragen 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.

Ausgabe
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:

Die Audiobookshelf-Bibliothek mit dem eingelesenen Hörbuch „Ein Landarzt" von Franz Kafka unter „Kürzlich hinzugefügt"
Nach dem Scan erscheint das Hörbuch mit Cover in der Bibliothek

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:

Die Detailseite des Hörbuchs mit laufender Wiedergabe, Kapitel- und Dateiliste sowie dem Player am unteren Rand
Detailseite mit Kapiteln und laufendem Player

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:

Die Podcast-Suche in Audiobookshelf mit zwei Treffern zum Suchbegriff netzpolitik samt Episodenzahl
Podcast-Suche: Treffer aus dem iTunes-Katalog samt Episodenzahl

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

Die Suche fragt den iTunes-Katalog ab. Findet sie einen Podcast nicht, weil er dort nicht eingetragen ist, füg ihn direkt über seine RSS-Adresse hinzu – dasselbe Eingabefeld akzeptiert beides.

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:

Ausgabe
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 verborgen

Die 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

Unter Einstellungen → Bibliotheksstatistiken und Eigene Statistiken siehst du, wie viele Stunden gehört wurden und was am häufigsten läuft – nett, aber auch praktisch, um ungenutzte Podcast-Abos zu finden, die nur Platz verbrauchen.

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 – mit https://, 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

Terminal
cd /opt/audiobookshelf && docker compose pull && docker compose up -d

Vor 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.

Die Einstellungsseite „Sicherungen" in Audiobookshelf mit ausgeschalteter automatischer Sicherung, Backup-Ort /metadata/backups, Aufbewahrung 2 und maximaler Größe 1 GB
Sicherungen: automatische Sicherung ist im Standard 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 /metadata kann das passieren; 0 bedeutet „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/ und metadata/ 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/ und podcasts/ 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:

Terminal
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:

Terminal
du -sh /opt/audiobookshelf/*
Ausgabe
14M     /opt/audiobookshelf/audiobooks
480K    /opt/audiobookshelf/config
112K    /opt/audiobookshelf/metadata
4.0K    /opt/audiobookshelf/podcasts

Wird 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