Skip to content

Self-hosted audiobook server: what it is and how to run one with Docker

Guide · 5 min · 9 chapters

A self-hosted audiobook server streams the audiobooks you own to every device and keeps your place in sync. What you need, the options, and a Docker setup in a few steps.

Published Checked against Server 2.3.1, app 2.0.0 on

5:00 minutes to read
The AudioSilo admin console overview, with three people listening now, their book and chapter, totals and recent listening

A self-hosted audiobook server is a program you run on your own computer, NAS or home server that turns a folder of audiobook files into your own private audiobook service. It streams the books to a web browser and to phone apps, keeps your place in each book in sync across devices, and gives everyone in the house their own account. Your files stay where they are, and nobody else holds your library.

This guide explains what you need, the main choices, and how to get one running with Docker using AudioSilo.

Why run your own

If your audiobooks are files (CD rips, DRM-free purchases, public-domain recordings, backups of books you bought), a plain file player only gets you part of the way. A server built for audiobooks adds:

  • One place in every book, on every device. Pause on your phone, carry on in the browser at your desk.
  • Streaming from anywhere, with seeking, chapters and covers, plus downloads for offline listening.
  • Separate accounts for each person, each with their own progress, bookmarks and stats, and control over who sees which books.
  • A player made for books: a sleep timer, speed control, chapter-aware seeking and bookmarks, instead of a music player’s shuffle and playlists.

And because the files remain the source of truth, you can stop using any server at any time and your library is still just a folder.

What you need

  • A machine that stays on. A NAS, a mini PC, an old laptop or a Raspberry Pi with a 64-bit OS all work. AudioSilo is a single Go program with a built-in database, so it doesn’t need much.
  • Your audiobooks as files, in a folder that machine can read. M4B, M4A, MP4, MP3, FLAC, OGG and Opus are all indexed. A tidy layout helps; see How to organise audiobook folders.
  • Docker, ideally, though a plain binary works too (below).

The main options

Audiobookshelf is the best-known open-source audiobook server. It also handles podcasts and ebooks, can upload books and write metadata into files, and its mobile apps are in beta. If you’re weighing the two, Moving from Audiobookshelf compares them honestly.

General media servers such as Plex and Jellyfin can play audio files, but they are built around music and video, so audiobook features like per-book progress and chapter handling depend on workarounds or third-party apps.

AudioSilo, which this site is about, is audiobook-only. The server is open source (AGPLv3), never writes to your files, and comes with a web player built in and free apps for iPhone, iPad and Android in the App Store and Google Play. The rest of this guide sets it up.

Install AudioSilo with Docker

The image ghcr.io/kodestar/audiosilo-server holds the server, the web player and ffmpeg, so one container is a complete setup. It runs on amd64 and arm64.

1. Create a compose file

Make a folder (say ~/audiosilo) and save this as docker-compose.yml in it, changing /srv/audiobooks to wherever your books are:

services:
  audiosilo:
    image: ghcr.io/kodestar/audiosilo-server:latest
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - ./data:/data                  # database, config, certificates
      - /srv/audiobooks:/library:ro   # your books, mounted read-only
    environment:
      PUID: "1000"                    # owner of /data (Unraid: 99)
      PGID: "1000"                    # group of /data (Unraid: 100)
      # AUDIOSILO_PUBLIC_URL: "https://books.example.com"  # used in QR/invite links
      # AUDIOSILO_TLS_MODE: "off"     # only behind a TLS-terminating reverse proxy
      AUDIOSILO_WEB_DIR: /app/web

Two mounts matter. /data holds everything the server creates (its database, config.yaml and certificates), so keep it and back it up. /library is your books, mounted read-only: the server never writes to them, so :ro costs nothing and protects them.

2. Start it and save the credentials

docker compose up -d
docker compose logs

On the first start the server creates an admin account with a random password and prints it once:

========================================================
 AudioSilo first-run setup - store these now, shown once
========================================================
  Admin username : admin
  Admin password : <generated password>
  Auth code      : <generated code>
  Config file    : /data/config.yaml

Save the password and the auth code now. The server only keeps hashes of them, so it can’t show them again. There is never a default password.

3. Open it

Browse to https://your-server:8080. The server uses a self-signed certificate out of the box, so your browser warns you the first time; accept it to continue. Three addresses matter:

  • / is the connect page, where a listener pairs a device.
  • /admin is the admin console. Sign in as admin with the printed password.
  • /web is the web player.

4. Add your library

In the admin console, click Add your first library and point it at /library, the path inside the container. The books are browsable straight away; the scan fills in durations, chapters and covers in the background.

Without Docker: the single binary

GitHub Releases has builds for Linux (also as .deb and .rpm with a systemd unit), macOS and Windows, for amd64 and arm64. Run it with a data folder:

./audiosilo --data ./data

It finds ffmpeg on your system or downloads it on first use. ./audiosilo --setup --data ./data gives you a browser setup wizard instead of the printed password. See Install the binary.

Start listening

  • In a browser: open /web on your server. It works on phones too, and can be added to the home screen.
  • On iPhone, iPad and Android: install AudioSilo from the App Store or Google Play and pair it with a QR code. The apps can’t accept a self-signed certificate the way a browser can, so they need the server at an address with a trusted certificate; How to pair your phone and Listen away from home cover this.
  • Everyone else in the house: in the admin console, Invite someone creates their account and shows a QR code and link. No password needed.

Keeping it updated

docker compose pull && docker compose up -d

Your data folder and books are untouched by updates. Back up the data folder before a big upgrade; the server also snapshots its own database every night by default.

Next steps

Changes to this post

  1. First published.

Try the demo No sign-up. Opens in your browser.