Skip to content

Storage

  • Directory/config
    • armarium.db everything Armarium knows: people, requests, settings
    • secrets.key encrypts saved API keys, the webhook and the sign-on secret
    • session.key signs people’s sessions (unless ARMARIUM_SESSION_SECRET is set)
    • libation-master.key encrypts Audible sign-ins (unless LIBATION_MASTER_KEY is set)
  • Directory/data
    • Directoryusers
      • Directorymember-id
        • Directorylibation/ that member’s own Libation: settings, Audible sign-in, library
          • …
        • Directorybooks/ downloads waiting to be shelved (unless ARMARIUM_STAGING_DIR is set)
          • …
    • Directoryinprogress/ Libation’s half-finished downloads, one folder per member
      • …
  • Directory/audiobooks the Audiobookshelf library (ARMARIUM_LIBRARY_DIR)
    • Directory.armarium/ downloads waiting, when ARMARIUM_STAGING_DIR points here
      • …
    • Author/… books, laid out by the folder template

A finished book waits in a staging folder, then moves into the library. If staging and the library are on the same mount, that move is a single rename: instant, and Audiobookshelf never sees a half-copied folder. If they aren’t, Armarium copies the folder, checks every file’s size, then deletes the original. That works, but it’s slower and briefly needs twice the space.

By default staging lives in /data, which is usually a different mount from the library. Put it on the library’s own disk instead:

.env
ARMARIUM_STAGING_DIR=/audiobooks/.armarium

Audiobookshelf ignores folders whose names start with a dot, so it won’t pick up unfinished books.

Armarium tests this at startup by renaming a small file from staging into the library. The result is in the log and under Server → This server:

The This server panel

Every 6 hours (and 2 minutes after startup) Armarium deletes staging folders for books that aren’t on their way any more, for example after a download failed for good. Nothing in the library itself is ever deleted by Armarium.

The container runs as uid 1001. It needs to read and write /config, /data and the library folder.