Install with Docker
Docker is the recommended way to run AudioSilo on a NAS, home server or VPS. One container holds the server, the web player and ffmpeg. The image is ghcr.io/kodestar/audiosilo-server.
On Unraid, install from Community Applications instead. See Install on Unraid. On a Synology NAS, see Install on a Synology NAS.
What you need
- Docker 20.10.10 or newer with the Compose plugin (
docker compose). Rundocker versionto check. Older Docker stops the container straight away (see Troubleshooting). - A folder of audiobooks on the host, for example
/srv/audiobooks. Its layout can wait. See Organize your audiobook files.
1. Create a compose file
Make a folder for AudioSilo, for example ~/audiosilo. Save this inside it as docker-compose.yml:
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, Synology: usually 1026)
PGID: "1000" # group of ./data (Unraid: 100, Synology: usually 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
Change /srv/audiobooks to your books folder. The two mounts:
/dataholds the server's database,config.yaml, certificates and backups. Keep it, and back it up./libraryis your books, mounted read-only (:ro). The server never writes to your books.
Set PUID and PGID to the user and group that should own the data folder. On Linux that's the output of id -u and id -g. The server runs as that user, so it also needs read access to your books folder. If it can't use a folder, the log says which one and how to fix it (see Permission denied).
A setting you give as an AUDIOSILO_* variable wins over the admin console, which then shows it as locked. Leave a setting out if you'd rather change it in Server > Settings.
2. Start it and save your password
Create the data folder yourself before the first start. Otherwise Docker creates it as root, and the container then has to change its owner, which a NAS share can refuse. Then start the server:
mkdir -p data # create the data folder first
docker compose up -d
docker compose logs # the admin password and auth code, shown once
On the very first start, the log shows the admin password and an auth code 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 both now. Set up your server says what each is for. If you lose them, see If you lose the password.
3. Open it
Browse to https://your-server:8080. The server uses a self-signed certificate at first, so your browser warns you. Accept the warning to continue. On your home network, http://your-server:8080 works too, without the warning.
/adminis the admin console. Sign in asadminwith the printed password./webis the web player./is the connect page, where a listener enters an invite code.
The iOS and Android apps connect over plain HTTP at home instead (see Plain HTTP at home). To listen away from home, see Reach your server from outside your home.
4. Set up your server
The first time you sign in to the admin console, it opens Set up your server:
- Choose your own username and password, or keep the printed ones.
- For the books folder, type
/library, the path inside the container, and press Check folder. - Follow the remaining steps, or skip any of them.
The server scans your books in the background. Set up your server walks through every step. Then get the apps and connect a phone or browser.
Update
docker compose pull && docker compose up -d
This updates the server and the web player together. Your books are never changed. When an update changes the database, the server first saves a backup of it. Server > About in the admin console tells you when a new version is out.
Good to know
-
Prefer
docker run? The same container in one command:mkdir -p data # create the data folder firstdocker run -d --name audiosilo --restart unless-stopped -p 8080:8080 \-e PUID=1000 -e PGID=1000 \-v "$PWD/data:/data" \-v /srv/audiobooks:/library:ro \ghcr.io/kodestar/audiosilo-server:latestdocker logs audiosilo # the admin password and auth code, shown once -
Books on a network share (SMB/NFS): mount the share on the Docker host, then mount that path into the container. If the share goes away, the server keeps your books and progress; they come back when the share does.
-
HTTPS with a reverse proxy from the start: follow the Caddy, SWAG or Traefik guide. Each has a Compose file with both AudioSilo and the proxy.
Testing unreleased builds
The :edge tag is built from the latest development code. It can break. Stay on :latest for everyday listening.
Run edge as a second container on a copy of your data folder. Never point it at the original, because it may change the database in a way a release can't undo.
-
Copy the data folder while the server is stopped (delete any older
./data-edgefirst):docker compose stopcp -a ./data ./data-edgedocker compose start -
Add this under
services:in the samedocker-compose.yml:audiosilo-edge:image: ghcr.io/kodestar/audiosilo-server:edgeports:- "8081:8080"volumes:- ./data-edge:/data- /srv/audiobooks:/library:roenvironment:PUID: "1000" # the same as your normal servicePGID: "1000" -
Start it with
docker compose up -d audiosilo-edge. To get the newest build, rundocker compose pull audiosilo-edge && docker compose up -d audiosilo-edge.
Try the edge server in a browser at https://your-server:8081/web. Don't pair an app that already uses your normal server. The copy has the same identity, so the app would move its sign-in over to it. Notifications set up in the console may come from the edge server too.
To stop testing, run docker compose rm -sf audiosilo-edge, then delete its block from the compose file and delete ./data-edge.
This is for the ghcr.io/kodestar/audiosilo-server image. The LinuxServer.io image on Unraid has its own tags and keeps its data in /config.