media: add audiobook support (bookshelf-audio, audiobookshelf) #376
No reviewers
Labels
No labels
audit-work
bug
docs
general-admin
major-upgrade
needs-vps-sync
new-service
on-hold
outside-work
post-podman
renovate
upstream
vps
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
mysticalsoap/docker!376
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/audiobooks"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
No audiobook support in the stack. Bookshelf only holds one format per book, so the ebook instance can't also collect audio, and nothing serves audiobooks with chapters and resume: Jellyfin 12 plays them but has no FOSS phone app that tracks progress, and Calibre-Web-NextGen is ebook-only.
Fix
bookshelf-audio: second Bookshelf on the same image and rreading-glasses, own config dir, root folder/data/library/audiobooks, torrent categorybookshelf-audio; unpackerr gets aREADARR_1entry.audiobookshelf2.37.1 ataudiobooks.mysticalsoap.com, public and Authelia-bypassed like music. Runs asappsthroughuser:(the image has no privilege-drop init),PORTmoved off 80 for the unprivileged bind, config/metadata dirs pre-created with tracked.gitkeep. Accounts come from Authelia OIDC (audiobookshelfclient,client_secret_basic+ PKCE per Authelia's integration doc,audiobookshelf_userspolicy =one_factorforgroup:user, auto-register on, no group claim so everyone lands as a plain user); the official app, Lissen, Storii and Plappa all do the flow and return through the server's/auth/openid/mobile-redirect. Root stays local as break-glass. Secret fileinfra/secrets/authelia_oidc_audiobookshelf_client_secret.txt, user-created.setup/Media.md§7a/§8a,Adding-a-New-User.md§7a, README and topology regenerated.Follow-ups filed separately: #378 CrowdSec detection for the native (root) login, #379 nightly quick-match job. #377 (knock provisioning) is superseded by auto-register.
Second commit, separable:
www.hardcover.appstopped resolving, so rreading-glasses failed every upstream call; the binary's own defaultapi.hardcover.appis right, so the--upstreamoverride is dropped. Found while testing search on the new instance.Verification
On the live stack from this branch:
just up media:bookshelf-audioandaudiobookshelfbothhealthy; every other media container stayed healthy.docker top audiobookshelf: tini and node run asapps; log showsListening on port :13378.https://audiobooks.mysticalsoap.com/→ 200 with the Audiobookshelf UI;/healthcheck→ 200;/statusreportsserverVersion 2.37.1,authMethods ["local"],isInit false(root account not claimed yet).https://bookshelf-audio.mysticalsoap.com/→ 302 toauth.mysticalsoap.comafterjust recreate authelia.BOOKSHELF_AUDIO_API_KEYis filled in (key exists only after first start; §7a covers it).docker compose config --quieton media: clean with the three new.envvariables set./search?q=project+hail+maryanswers 200 in 0.26s; both Bookshelf instances, pointed athttp://rreading-glasses:8788(they were on the publichardcover.bookinfo.pro, which was timing out at 100s), return results through their own/api/v1/searchin 2 to 4s.readarr→bookshelf(save path/data/torrents/bookshelf, matchingUN_READARR_0_PATH); the four seeding torrents moved in place./audiobookshelf) gets a 303 into Authelia's login flow; first "Login with Authelia" asmysticalsoapauto-registered the account (server log:openid: Auto-registering user, matched onpreferred_username).lissen://oauth; a second LLDAP account auto-registered the same way.just deploy --dry-runreports no changed stacks, so live already runs the branch.Manual steps from
setup/Media.md(root account, library, OIDC settings, Bookshelf-audio client/Prowlarr/root folder/profile) are all done on the live instance; theaudiobooksA record is in and the healthcheck answers through the VPS relay.🤖 Generated with Claude Code
0b703b21026ffe41c62c3abe806093bc7b1dd93fbc7b1dd93ffe44ac9ba4fe44ac9ba433cd1001e633cd1001e64f8caa63c14f8caa63c1ff5b9a14b0ff5b9a14b0ce71dc6d7a