Install
Armarium ships as one Docker image, ghcr.io/r0adkll/armarium, with Libation’s command-line tool
inside. It needs three folders: its own config, its own data, and the Audiobookshelf library
folder.
Run it in the folder you want to deploy from. It asks four questions, generates the keys, writes
.env and docker-compose.yml, starts the container, and then walks you through the browser steps.
mkdir -p /opt/armarium && cd /opt/armariumcurl -fsSL https://raw.githubusercontent.com/r0adkll/armarium/main/scripts/setup.sh | bashIt asks for:
- the public URL people will open Armarium at, e.g.
https://armarium.example.com; - the host path of the Audiobookshelf library folder, e.g.
/mnt/media/audiobooks; - a folder for Armarium’s state, e.g.
/mnt/media/armarium(it createsconfig/anddata/there); - the container path Audiobookshelf uses for that library (look in its library settings), e.g.
/audiobooks.
-
Create the folders. The container runs as uid 1001, so give it ownership:
Terminal window mkdir -p /mnt/media/armarium/{config,data}chown -R 1001:1001 /mnt/media/armariumIt also needs to write to the Audiobookshelf library folder.
-
Write a
.envnext to your compose file:.env ARMARIUM_PUBLIC_URL=https://armarium.example.comARMARIUM_HOME=/mnt/media/armariumARMARIUM_LIBRARY_PATH=/mnt/media/audiobooksARMARIUM_LIBRARY_DIR=/audiobooks# Downloads wait on the library's own disk, so a finished book moves into place in one stepARMARIUM_STAGING_DIR=/audiobooks/.armarium# Two keys; make each with: openssl rand -base64 32# Keep them safe, see "Backups and keys"LIBATION_MASTER_KEY=paste-a-generated-keyARMARIUM_SESSION_SECRET=paste-another-generated-key -
And the compose file:
docker-compose.yml services:armarium:image: ghcr.io/r0adkll/armarium:maincontainer_name: armariumrestart: unless-stoppedenv_file: .envvolumes:- ${ARMARIUM_HOME}/config:/config- ${ARMARIUM_HOME}/data:/data- ${ARMARIUM_LIBRARY_PATH}:${ARMARIUM_LIBRARY_DIR}ports:- "8080:8080" -
Start it:
Terminal window docker compose up -dcurl -fsS localhost:8080/healthz
Behind a reverse proxy
Section titled “Behind a reverse proxy”Point your proxy (Caddy, Traefik, nginx, Nginx Proxy Manager…) at port 8080 and serve it at the
address you put in ARMARIUM_PUBLIC_URL. That address matters: single sign-on sends people back to
it, and Armarium marks its cookie secure when it starts with https://.
If Armarium reaches Audiobookshelf through a proxy as well, that proxy must allow WebSocket upgrades;
Armarium listens to Audiobookshelf’s live updates over one. On a shared Docker network you can skip
the proxy and use the container name, e.g. http://audiobookshelf:80.
Which image tag
Section titled “Which image tag”:main follows every change to the main branch. Once releases start, version tags like :0.1 and
:0.1.0 are published too; pin one if you’d rather choose when to upgrade. See
Upgrading.
Next: first run.