Skip to main content

Quick start with Docker

Quick start with Docker​

Docker is the recommended way to run AudioSilo on a NAS, home server or VPS. The published image bundles the server, the web player and ffmpeg, so a single container is a complete setup.

The image is ghcr.io/kodestar/audiosilo-server.

What you need​

  • Docker with the Compose plugin (docker compose).
  • A folder of audiobooks somewhere on the host (for example /srv/audiobooks). Don't worry about its layout yet - see Organizing your library.

1. Create a compose file​

Make a directory for AudioSilo (for example ~/audiosilo) and save this as docker-compose.yml inside it:

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 TLS certificates. Here it maps to a ./data folder next to the compose file - keep it persisted and back it up.
  • /library is your audiobooks folder, mounted read-only (:ro). The server never writes to your books, so read-only costs nothing and protects them.

Set PUID/PGID to the user and group that should own the data directory - on generic Linux, the output of id -u and id -g; on Unraid, 99/100. The container fixes up ownership of /data on start and runs as that user, so it works however the mounted volume is owned.

Your books never live inside the container or the data volume - the web player and server are app code inside the image, and updating either is just pulling a new image.

2. Start it and grab your credentials​

docker compose up -d
docker compose logs

On the very first start, the server creates an admin account and prints the credentials once in the logs:

========================================================
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 somewhere safe now - they are never shown again. See First run for what each is for and what to do if you miss them.

3. Open it​

By default the server speaks HTTPS with a self-signed certificate, so browse to:

https://your-server:8080

Your browser will warn about the certificate the first time - that's expected with the default setup; accept it to continue. Remote access covers getting a proper certificate or running behind a reverse proxy.

  • / - the connect page, where a listener enters an auth code to pair a device.
  • /admin - the admin console. Log in as admin with the printed password.
  • /web - the web player, bundled with the image.

4. Add your first library​

In the admin console, add a library pointing at the path inside the container - /library with the compose file above. The library is browsable immediately; the scanner fills in metadata, covers and durations in the background. See Libraries for the details.

Then connect a phone or browser and start listening - see Connecting to a server.

Updating​

The server and the bundled web player ship together in the image, so updating either is the same command:

docker compose pull && docker compose up -d

Your data directory and books are untouched by updates.

note

If your books live on a network share (SMB/NFS), mount the share on the Docker host and bind-mount the mounted path into the container. The server is deliberately careful here: if the share goes away, it will not wipe its index or your listening progress - books simply reappear when the share is back.