No registry exists yet and there is no SSH onto Nox, so Portainer clones this repo there and compose builds the image on the box. Adds build: . and moves the default host port to 8086, which is free on Nox (808x is crowded). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GVbG48GAXfCZatcmX123Ra
64 lines
2.4 KiB
YAML
64 lines
2.4 KiB
YAML
# Portainer stack for Nox. See docs/design.md §11.3.
|
|
#
|
|
# Every variable the app reads MUST be listed under `environment:` here.
|
|
# A variable set in Portainer's UI but absent from this file silently does
|
|
# nothing — the trap that bit PLAYERMAP_SHOW_GMS on the Mythica stack.
|
|
#
|
|
# Deployed as a Portainer *git* stack: Portainer clones this repo onto Nox and
|
|
# `docker compose up` builds the image there, so no registry is needed. The
|
|
# image: tag still pins a real version so a redeploy replaces it predictably
|
|
# rather than reusing a stale :latest.
|
|
|
|
services:
|
|
mediashelf:
|
|
image: ${MEDIASHELF_IMAGE:-mediashelf:0.1.0}
|
|
build: .
|
|
container_name: mediashelf
|
|
restart: unless-stopped
|
|
ports:
|
|
- "${MEDIASHELF_PORT:-8086}:8080"
|
|
volumes:
|
|
- mediashelf_data:/data
|
|
environment:
|
|
- MEDIASHELF_SECRET_KEY=${MEDIASHELF_SECRET_KEY}
|
|
- LOG_LEVEL=${LOG_LEVEL:-INFO}
|
|
- TZ=${TZ:-America/Regina}
|
|
|
|
- PLEX_BASE_URL=${PLEX_BASE_URL}
|
|
- PLEX_TOKEN=${PLEX_TOKEN}
|
|
- PLEX_VERIFY_SSL=${PLEX_VERIFY_SSL:-true}
|
|
- PLEX_TIMEOUT_S=${PLEX_TIMEOUT_S:-30}
|
|
- PLEX_PAGE_SIZE=${PLEX_PAGE_SIZE:-500}
|
|
- PLEX_REQUEST_DELAY_MS=${PLEX_REQUEST_DELAY_MS:-0}
|
|
|
|
- TAUTULLI_BASE_URL=${TAUTULLI_BASE_URL}
|
|
- TAUTULLI_API_KEY=${TAUTULLI_API_KEY}
|
|
- TAUTULLI_TIMEOUT_S=${TAUTULLI_TIMEOUT_S:-30}
|
|
- TAUTULLI_PAGE_SIZE=${TAUTULLI_PAGE_SIZE:-1000}
|
|
|
|
- HISTORY_SOURCE=${HISTORY_SOURCE:-auto}
|
|
- SESSION_MERGE_WINDOW_H=${SESSION_MERGE_WINDOW_H:-6}
|
|
- COMPLETION_THRESHOLD=${COMPLETION_THRESHOLD:-85}
|
|
- ABANDON_CEILING=${ABANDON_CEILING:-15}
|
|
|
|
- DATABASE_PATH=/data/mediashelf.db
|
|
|
|
- SCAN_SCHEDULE_CRON=${SCAN_SCHEDULE_CRON:-0 4 * * *}
|
|
- SCAN_FULL_SWEEP_CRON=${SCAN_FULL_SWEEP_CRON:-0 3 * * 0}
|
|
- SCAN_ON_STARTUP=${SCAN_ON_STARTUP:-false}
|
|
- SCAN_LOCK_TIMEOUT_S=${SCAN_LOCK_TIMEOUT_S:-7200}
|
|
- SCHEDULER_ENABLED=${SCHEDULER_ENABLED:-true}
|
|
|
|
- SCORE_STALE_HORIZON_DAYS=${SCORE_STALE_HORIZON_DAYS:-730}
|
|
- SCORE_AGE_HORIZON_DAYS=${SCORE_AGE_HORIZON_DAYS:-1095}
|
|
- SCORE_POPULAR_AT=${SCORE_POPULAR_AT:-3}
|
|
- SCORE_REJECTED_AT=${SCORE_REJECTED_AT:-2}
|
|
- SCORE_SOLITUDE_AT=${SCORE_SOLITUDE_AT:-3}
|
|
- SCORE_GRACE_DAYS=${SCORE_GRACE_DAYS:-30}
|
|
- SCORE_RECENT_DAYS=${SCORE_RECENT_DAYS:-90}
|
|
|
|
# Empty by default. Nothing is ever kept unless someone says so (§6.6).
|
|
- KEEP_ALL_LIBRARIES=${KEEP_ALL_LIBRARIES:-}
|
|
|
|
volumes:
|
|
mediashelf_data:
|