Media Servers guide
Audiobookshelf Docker Compose: Preserve Books, Metadata, and Listening Progress
Install Audiobookshelf with local database storage, durable metadata, working playback and listening progress, and a tested recovery process.
Published and reviewed by OpenAlt · October 7, 2026

Run Audiobookshelf with separate persistent locations for its database, metadata and media. Keep the database on storage local to the server, create the administrator before allowing other people in, and test playback plus restoration before importing your whole collection. A visible book cover is only the beginning of a working library.
This guide follows official documentation checked on October 7, 2026. It focuses on operating a private library of audio you are entitled to store. It does not claim that a particular server has been benchmarked or that every mobile client behaves identically.
Table of contents
- What should you decide before installation?
- Which directories must persist?
- How do you start the Compose service?
- How should a first library be organized?
- What proves that playback and progress work?
- How do you protect access and backups?
- How do you restore and upgrade safely?
- FAQ
What should you decide before installation?
Decide who maintains the server, which clients will play books, and where the originals remain protected. Those answers determine whether self-hosting is practical for your household.
The Audiobookshelf Docker documentation recommends Docker and distinguishes stable, development and versioned image tags. Use a stable release for a library people depend on. A development tag is a contribution or testing choice, not a shortcut to dependable listening.
Write a small acceptance list before installing: a phone can connect, a long book resumes correctly, another user's progress stays separate, and the library can be recovered without the original machine. Name the person who checks updates and failed backups.
The OpenAlt Audiobookshelf page provides the software context and upstream links. If your real requirement is effortless access to a purchased commercial catalog, first verify that you can obtain compatible files legitimately. Running a server does not change the availability or licensing of that content.
Which directories must persist?
Preserve application state independently from the audio files. A rebuild needs both the library's files and the information that makes those files useful to each listener.
The official container uses /config for its database and /metadata for additional state, including covers and backups. The installation guide warns against placing the database on a network share. Media can have a different storage arrangement; do not treat the database and a large audio directory as interchangeable workloads.
| Container location | Purpose in this layout | Planning question |
|---|---|---|
/config | Database and related application state | Is the underlying storage local and backed up? |
/metadata | Covers, metadata and other service files | Is it included in recovery? |
/audiobooks | Your audio originals | Is there an independent protected copy? |
/podcasts | Podcast media | Are downloads and retention intentional? |
Keep these mounts separate rather than placing one inside another. Record their host locations. If an external media disk is missing after a reboot, investigate before scanning an apparently empty library and changing application data to match it.
How do you start the Compose service?
Use the official image with persistent mounts and a loopback-only host port for the first run. Create the four host directories before starting so their location is deliberate.
services:
audiobookshelf:
image: ghcr.io/advplyr/audiobookshelf:latest
ports:
- "127.0.0.1:13378:80"
volumes:
- ./config:/config
- ./metadata:/metadata
- ./audiobooks:/audiobooks
- ./podcasts:/podcasts
environment:
TZ: America/Detroit
restart: unless-stopped
Save this as compose.yaml, run docker compose up -d, and inspect docker compose logs --tail=100. Open http://localhost:13378 on the host or through an SSH tunnel. Do not expect a remote laptop's loopback address to reach the server automatically.
The server FAQ explains that the first visit creates the root account; there is no universal default administrator password. Complete that step while access is private. Then create the normal listener accounts you need.
The example starts with the moving stable tag. Once the trial passes, record the tested image and use a deliberate version or digest policy. The official image does not use PUID and PGID to select its user; follow its documented user approach if changing container identity, and adjust ownership accordingly.


How should a first library be organized?
Start with a small sample whose folder structure and metadata you understand. Correct grouping problems before a large scan turns them into hundreds of confusing entries.
The book directory guide describes how directories, tags and accompanying metadata influence identification. Keep tracks for one book together. Include a single-file book and a book with multiple tracks in your trial, then inspect title, author, narrator, chapters and playback order.
Do not fix a grouping mistake only by renaming a directory and assuming every existing database relationship will follow. Inspect the resulting item after rescanning and follow the documented correction procedure when necessary. Preserve originals before any bulk rename or metadata edit.
Keep a short record of the naming convention you chose. It should be understandable to the next person adding a book. Consistency beats an elaborate scheme that only its creator remembers.
A library is also a boundary: the library overview explains that moving files between libraries creates different items and does not automatically move listening progress. Plan categories before listeners accumulate history.
What proves that playback and progress work?
A successful test includes the real listening device, a pause and resume, and a second account. Checking only the administrator's browser misses the behavior people depend on every day.
Use this practical sequence with the sample books:
- Sign in as an ordinary listener and start playback.
- Seek into a later chapter, pause, and close the client.
- Reopen it and inspect the saved position.
- Repeat through the remote access route you intend to use.
- Sign in as a different listener and verify their independent state.
- Restart the server and repeat the resume check.
These are acceptance steps to perform on your installation, not reported benchmark results. Record any client-specific limitation instead of generalizing one successful browser session to every device.
If playback fails, separate a missing file from a decoding problem and a remote networking problem. The server FAQ discusses codec and scanning limitations. Try another permitted sample file before rebuilding the whole stack.
For a broader home media deployment, the Jellyfin Compose guide follows the same separation between readable media, persistent application state and actual client acceptance.
How do you protect access and backups?
Keep administrative access private and protect original audio independently of application backups. A backup directory located on the same failed disk will not rescue the library.
Choose a VPN or an HTTPS proxy that supports the application's required connections. Test the phone's real route, including login and seeking through a long file. Keep the direct container port from bypassing the access policy.
Docker's volume documentation explains why persistent storage survives container replacement. Persistence alone does not protect against host loss, accidental deletion or unreadable backups. Define the separate recovery copy explicitly.
Estimate media and retained backup capacity with the backup storage calculator. Keep configuration and metadata in the plan even if they occupy far less space than the audio. Their value is not proportional to their size.
Restrict access to backups because they can reveal user information and library details. Review the contents of an application-generated backup before assuming it contains every mounted media file. Retain a separate inventory of the directories your recovery process actually covers.
How do you restore and upgrade safely?
Rehearse restoration into a separate, private instance using matching software before changing the working server. Verify listening progress as carefully as file visibility.
For a straightforward small installation, stop writes and create a coherent copy of the application directories together with the media backup. Restore copies into distinct paths, use another host port, and ensure the trial cannot modify the live library. Never point two test and production instances at the same writable database.
Compare the restored library with your acceptance list: accounts, sample books, covers, chapters and known listening positions. Keep the original server available until the exercise succeeds.
For updates, read the official upgrade instructions and release notes, capture a fresh backup, then replace the container. Retaining an old image alone is not enough for rollback if a newer release changes stored data; retain the matching pre-update state too.
FAQ
Does an application backup include every audiobook?
Do not assume so. Inspect its contents and protect the media directories independently.
Can the database live on my NAS?
Keep /config on storage local to the server process. A NAS running the container with local storage differs from a server accessing its database over a network share.
Why do PUID and PGID not change permissions?
The official image uses a different documented user configuration. Check the container identity and directory ownership together.
Will moving books between libraries preserve progress?
Not automatically. Treat a library move as a migration and validate user history before reorganizing a working collection.