AudioBookshelf Docker Setup: Self-Hosted Audiobooks and Podcasts
By LK Wood IV · 2026-05-26 · ~10 min read · St. Louis County, MO
AudioBookshelf is a single Docker container that turns a folder of audiobook files into a real library server: per-user progress sync, metadata matching, mobile apps, and podcast RSS support. It’s the most complete Audible replacement available for self-hosting, and it’s one of the simplest installs on the self-hosted stack.
What you get
- Web interface for browsing and streaming from any browser
- iOS and Android apps (official, free) with progress sync
- Per-user accounts (track your books separately from family members)
- Metadata matching from Open Library, Google Books, Audible
- Podcast RSS support with auto-download
- M4B chapter detection, speed controls, sleep timer
- ~100 MB idle RAM — negligible on any shared host
No companion containers needed. No database service (uses SQLite internally, appropriate here because it’s single-threaded read-heavy, not concurrent-write heavy like n8n). One container, one volume mount.
Directory structure for your library
AudioBookshelf scans a directory to build its library. The expected layout for audiobooks:
/audiobooks/
Author Name/
Book Title/
Book Title.m4b
Another Book/
Another Book.m4b
Second Author/
Series Name/
Series Name, Book 1.m4b
Series Name, Book 2.m4b
For MP3 audiobooks that come as numbered chapter files:
/audiobooks/
Author Name/
Book Title/
01 - Chapter One.mp3
02 - Chapter Two.mp3
03 - Chapter Three.mp3
AudioBookshelf groups all files in a directory as a single book. The chapter list is built from M4B metadata (preferred) or filename ordering (MP3 fallback).
For podcasts, use a separate directory:
/podcasts/
Podcast Name/
(AudioBookshelf manages files here via auto-download)
Docker Compose
services:
audiobookshelf:
image: ghcr.io/advplyr/audiobookshelf:latest
container_name: audiobookshelf
restart: unless-stopped
ports:
- "13378:80"
environment:
- AUDIOBOOKSHELF_UID=1000
- AUDIOBOOKSHELF_GID=1000
volumes:
- /path/to/audiobooks:/audiobooks
- /path/to/podcasts:/podcasts
- /opt/audiobookshelf/config:/config
- /opt/audiobookshelf/metadata:/metadata
Replace /path/to/audiobooks and /path/to/podcasts with your actual library paths. The config and metadata volumes hold AudioBookshelf’s database, cover art cache, and chapter data.
mkdir -p /opt/audiobookshelf/{config,metadata}
docker compose up -d
Access the web UI at http://your-host-ip:13378. On first load, AudioBookshelf prompts you to create an admin account.
Initial library setup
After logging in:
- Settings → Libraries → New Library
- Name it “Audiobooks”, set type to Books, folder path
/audiobooks - Click Scan — AudioBookshelf walks the directory tree and builds the library
For podcasts: create a second library with type Podcast, folder path /podcasts.
The initial scan finds all audio files and groups them by directory. Metadata matching runs separately after the scan.
Metadata matching
After the initial scan, most books will have the title and author from the directory name but no cover art, description, or narrator. Run metadata matching:
Per-book: click a book → Edit → Match → select a source → Apply.
Bulk: Settings → Libraries → Audiobooks → Manage Library → Quick Match All.
Quick Match sends each book’s title and author to the configured metadata sources and applies the first match. For well-known titles, this fills in cover, description, narrator, ISBN, and publication year automatically. For obscure titles, you’ll get no match and need to edit manually.
Best metadata source for most books: Audible. The AudioBookshelf Audible provider pulls cover art and narrator data that Open Library and Google Books often lack. Enable it: Settings → Libraries → Audiobooks → Configure → Book metadata provider → Audible.
Adding podcast feeds
- Settings → Libraries → Podcasts → View Podcasts → Add Podcast
- Paste the RSS feed URL
- Configure: how many episodes to auto-download, whether to keep all episodes or maintain a fixed count
- Click Add
AudioBookshelf checks feeds on a schedule (configurable, default every 24 hours) and downloads new episodes to the podcast library directory. Old episodes beyond your keep count are deleted automatically.
For podcast-only installs, the audiobook library is optional — you can run AudioBookshelf as a podcast manager alone.
Mobile app setup
- Install “AudioBookshelf” from the App Store (iOS) or Play Store / F-Droid (Android)
- Open the app → “Connect to your server”
- Enter your server URL:
http://your-host-ip:13378(local) or your external domain if using NPM
For access outside the home network without a public domain, Tailscale is the simplest path: install Tailscale on your phone and server, then use the Tailscale IP (100.x.x.x) as the server address in the AudioBookshelf app. The app connects over the WireGuard mesh without any port forwarding or SSL setup. See the Tailscale remote access guide.
For public HTTPS with a proper domain: point Nginx Proxy Manager at audiobookshelf:80 (or host IP:13378), enable SSL, and use the public domain in the app. See the NPM guide.
Sharing with family members
Create additional user accounts: Settings → Users → Create User.
Each user gets their own:
- Listening progress (per book, per podcast episode)
- Playback speed preference
- Bookmarks
- Reading speed (for displaying time remaining)
Users see the same library but their progress is independent. If a family member starts listening to a book, their “last played” timestamp won’t affect your progress.
Permissions per user: you can restrict users to specific libraries, disable downloads, or give admin access. For family members who only listen, a standard user with no download permission is the right setup.
Listening stats
AudioBookshelf tracks listening time per user, per book, and per library. Check: Settings → Users → (username) → Listening Sessions.
The stats page shows daily and monthly listening time, total hours per book, and which device was used. It’s not exported to any external system by default, but the AudioBookshelf API exposes session data for integration with external dashboards if you want it in Grafana.
Backing up AudioBookshelf
AudioBookshelf’s data lives in two places:
/opt/audiobookshelf/config/— SQLite database (audiobookshelf.db), server configuration/opt/audiobookshelf/metadata/— cover art cache, chapter data, backup metadata
Your actual audiobook files (in /audiobooks/) are the source of truth and should be backed up independently as part of your media storage backup strategy.
To back up AudioBookshelf’s database and config:
tar czf /backup/audiobookshelf-$(date +%Y%m%d).tar.gz \
/opt/audiobookshelf/config \
/opt/audiobookshelf/metadata
Restore: stop the container, extract the backup to the same paths, restart.
Coexistence with Jellyfin
AudioBookshelf and Jellyfin handle different media types and don’t conflict. Jellyfin handles video (movies, TV shows, home video); AudioBookshelf handles audio (audiobooks, podcasts). Both can run on the same host, same Docker Compose file, sharing the same reverse proxy.
Don’t add your audiobook directory to Jellyfin — Jellyfin has weak audiobook support and won’t import M4B chapter data correctly. AudioBookshelf is the right tool for audio; Jellyfin is the right tool for video. The Jellyfin setup guide covers the video side.
Updating AudioBookshelf
docker compose pull
docker compose up -d
AudioBookshelf uses latest tagging with semantic versioning. Pinning to a major version isn’t critical here — the project is actively maintained with a stable API and infrequent breaking changes. Check the release notes before pulling if you want to be cautious.
AudioBookshelf is item #9 in the 12 best self-hosted apps guide — see that article for how it fits alongside Jellyfin, Nextcloud, and the rest of the stack. For video streaming alongside your audiobook library, the Jellyfin Docker setup guide covers hardware transcoding and remote access. The Docker Compose starter stack tutorial covers the NPM reverse proxy that AudioBookshelf sits behind.