How to Install Audiobookshelf (Self-Hosted Audiobooks and Podcasts)

Audiobooks bought from Audible are locked to Audible; ones ripped from CDs or bought DRM-free sit in a folder with no way to resume where you left off on a different device. Audiobookshelf fixes that: a library server for audiobooks and podcasts with a lovely web player, phone apps that remember your position everywhere, offline downloads, playback speed, sleep timer, and a podcast manager that fetches new episodes for you.
Quick reference
| Task | What |
|---|---|
| Folder | ~/docker/audiobookshelf/compose.yaml |
| Libraries | /mnt/data/media/Audiobooks, /mnt/data/media/Podcasts |
| Web | http://server-ip:13378 |
| Folder layout | Author/Title/ with the audio files inside |
| Apps | Audiobookshelf (iOS, Android), or any browser |
| Metadata | Match button → Audible / Google Books lookup |
1. The compose file
mkdir -p ~/docker/audiobookshelf && cd ~/docker/audiobookshelf
nano compose.yaml
services:
audiobookshelf:
image: ghcr.io/advplyr/audiobookshelf:latest
container_name: audiobookshelf
ports:
- "13378:80"
environment:
TZ: Europe/London
volumes:
- /mnt/data/media/Audiobooks:/audiobooks
- /mnt/data/media/Podcasts:/podcasts
- ./config:/config
- ./metadata:/metadata
restart: unless-stopped
docker compose up -d
sudo ufw allow 13378/tcp
Open http://192.168.1.50:13378, create the root user, and add a library: Audiobooks, folder /audiobooks. Add a second, type Podcast, folder /podcasts.
2. Folder layout
Audiobookshelf reads structure from folders:
Audiobooks/
Terry Pratchett/
Guards! Guards!/
01 - Chapter 1.mp3
02 - Chapter 2.mp3
cover.jpg
Ursula K. Le Guin/
A Wizard of Earthsea/
A Wizard of Earthsea.m4b
One .m4b or a folder of MP3s per book; Author/Series/Title also works. Chapters are read from the m4b or generated from the files.
3. Match metadata
Open a book → Match. It searches Audible and Google Books and fills in the description, narrator, series, year and cover. Do it once per book; the result is stored in ./metadata, not written back to your files unless you ask.
4. The phone app
Install Audiobookshelf (iOS: App Store; Android: Play Store or the GitHub build), enter the server address and log in. Tap a book to stream, or the download icon to keep it offline for the car. Your position syncs: pause on the phone in the car, resume on the laptop at your desk. Playback speed, sleep timer and chapter skip are all there.
5. Podcasts
Podcasts library → Add → Search, find a show, choose which episodes to download and tick Auto download new episodes. Episodes land in /podcasts/Show/, the app plays them, and you've replaced a podcast app's cloud with your server.
6. Family
Settings → Users — each person has their own progress and listening history. A child's account can be limited to specific libraries.
Behind the proxy
books.example.com → 127.0.0.1:13378 with the WebSocket lines (tutorial 28) and client_max_body_size 1G if you'll upload books through the web UI.
Troubleshooting
Book shows as several books. The folder has subfolders per disc; move the files up one level, or name them Disc 1/01.mp3 and tick Multi-disc in the match.
Chapters wrong. Edit them in the book's Chapters tab; it can look up chapter lists from Audible.
App says server unreachable from outside. Use the https proxy address or the VPN; the app needs to reach the server directly.
Scanning is slow on a Pi. First scan reads every file; later ones only check changes. Leave it.
Wrapping up
One container, two folders, a Match click per book, the app on your phone. Every audiobook you own plays anywhere and remembers where you were, and podcasts download themselves without a cloud account.
