fix(audiobookshelf): set the port with the env names the image actually reads
The first deploy of the unit failed its own health gate in the worst possible shape: systemd said active (running), the engine logged a clean database init, and the server then listened on :80 under base path /audiobookshelf - so every probe of :8000 was refused and wait_for_health timed out at 180s beside a container that looked healthy. Cause: ABS_PORT / ABS_CONFIG_DIR / ABS_METADATA_DIR / ABS_PUID are the npm package's names, printed by the server README; this image never reads them. Its own contract, read off the pinned digest with podman inspect, is PORT=80 CONFIG_PATH=/config METADATA_PATH=/metadata, and the server greps for exactly PORT, CONFIG_PATH, METADATA_PATH, ROUTER_BASE_PATH. The two path variables appeared to work only because the image already exports the same values - the coincidence that made the inert lines look correct. The unit now speaks the image's names, adds ROUTER_BASE_PATH=/ so the service is the plain host:port the docs and the homepage card promise, and the dead ABS_* lines are deleted instead of kept as decoration. Proven against the same digest in a throwaway container (temp state dirs, loopback-only mapping, removed after): base path "/", listening on :8000, GET /healthcheck -> 200, and the old prefixed path -> 404. Guards: the quadlet seam now refuses an Environment=ABS_* line and requires PORT/ROUTER_BASE_PATH; the vault page gains the law with its failure signature and the two-second image-inspect check. Suite: ALL TESTS PASSED, 812 ok.
This commit is contained in:
1 parent
a6ec644ecb
commit
3c035ccef3
3 files changed
+34
-6
No files matched your search
@@ -26,11 +26,18 @@ After=network.target
|
||||
ContainerName=audiobookshelf
|
||||
Image=ghcr.io/advplyr/audiobookshelf:latest@sha256:37c2057e150694970442579815c646fe6bdc01c95b9d1547c4c9068be8844ef3
|
||||
Network=pasta
|
||||
Environment=ABS_CONFIG_DIR=/config
|
||||
Environment=ABS_METADATA_DIR=/metadata
|
||||
Environment=ABS_PGID=1000
|
||||
Environment=ABS_PORT=8000
|
||||
Environment=ABS_PUID=1000
|
||||
# The names are the image's own: the server reads PORT, CONFIG_PATH, METADATA_PATH
|
||||
# and ROUTER_BASE_PATH (measured against the digest below — `podman inspect` shows
|
||||
# PORT=80 CONFIG_PATH=/config METADATA_PATH=/metadata in the image ENV, and the
|
||||
# server's source greps for exactly these). The ABS_* family printed by the server
|
||||
# README is the npm package's naming and is INERT here: with ABS_PORT=8000 the
|
||||
# server listened on :80 under base path /audiobookshelf, so the unit sat
|
||||
# `active (running)` while every probe to :8000 was refused (measured 2026-11-02,
|
||||
# first deploy). ROUTER_BASE_PATH=/ is what makes the URL the plain host:port.
|
||||
Environment=PORT=8000
|
||||
Environment=ROUTER_BASE_PATH=/
|
||||
Environment=CONFIG_PATH=/config
|
||||
Environment=METADATA_PATH=/metadata
|
||||
Environment=TZ=America/Vancouver
|
||||
PublishPort=8000:8000
|
||||
Volume=/home/dank/Containers/audiobookshelf/config:/config
|
||||
|
||||
Reference in new issue
Block a user