122ea392d1
- Synapse v1.163.2, MAS 1.27.1, Traefik v3.7, node-exporter v1.12.1 (all nodes), cadvisor -> ghcr.io v0.60.6, alertmanager-receiver 2026.9.23, Gitea 1.26.4, Jellyfin 12.3, Seerr v3.5.1 - Watchtower -> nickfedor/watchtower fork, twice daily (04:00/16:00) - Monitoring legacy node-exporter gated behind a compose profile - unifi-os-server on .100 removed again; compose file renamed so it cannot be revived - CLAUDE.md: Known Issues #40-43, service tree updates Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NQhgEUqcaV4WM2S4hfXgHD
174 lines
4.7 KiB
YAML
174 lines
4.7 KiB
YAML
services:
|
|
jellyfin:
|
|
# Pinned to official stable 12.2. History: ran the 2026060106 unstable
|
|
# build from 2026-07-14 because the DB had been migrated to the v12 schema
|
|
# and 10.11.x could not read it. Stable 12 shipped 2026-09; moved to
|
|
# 12.2 on 2026-10-17, 12.3 on 2026-10-26. Never go back below 12.
|
|
image: jellyfin/jellyfin:12.3.20261023-013714
|
|
container_name: jellyfin
|
|
restart: unless-stopped
|
|
environment:
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- LIBVA_DRIVER_NAME=i965 # Haswell HD 4600 uses legacy i965 (iHD is Broadwell+)
|
|
volumes:
|
|
# LOCAL disk, not NFS: jellyfin.db (SQLite WAL) on NFS caused 60-100s
|
|
# "database is locked" stalls -> server lockups during playback
|
|
# (2026-07-19). Old copy left at /mnt/docker-data/configs/jellyfin.
|
|
- /var/lib/jellyfin:/config
|
|
- /mnt/nas-media:/media
|
|
ports:
|
|
- "8096:8096"
|
|
devices:
|
|
- /dev/dri:/dev/dri # Intel iGPU for VAAPI hardware transcoding
|
|
group_add:
|
|
- "993" # render
|
|
- "44" # video
|
|
mem_limit: 2G
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl -f http://localhost:8096/health || exit 1"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 60s
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "50m"
|
|
max-file: "3"
|
|
|
|
sonarr:
|
|
image: linuxserver/sonarr:latest
|
|
container_name: sonarr
|
|
restart: unless-stopped
|
|
environment:
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- TZ=America/Chicago
|
|
volumes:
|
|
# LOCAL disk, not NFS: SQLite-on-NFS locking crashed Sonarr's DB migration
|
|
# after the 2026-07-12 power event ("waiting for user intervention")
|
|
- /var/lib/sonarr:/config
|
|
- /mnt/nas-media:/media
|
|
ports:
|
|
- "8989:8989"
|
|
mem_limit: 512M
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl -f http://localhost:8989/ping || exit 1"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 30s
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "50m"
|
|
max-file: "3"
|
|
|
|
radarr:
|
|
image: linuxserver/radarr:latest
|
|
container_name: radarr
|
|
restart: unless-stopped
|
|
environment:
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- TZ=America/Chicago
|
|
volumes:
|
|
- /mnt/docker-data/configs/radarr:/config
|
|
- /mnt/nas-media:/media
|
|
ports:
|
|
- "7878:7878"
|
|
mem_limit: 512M
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl -f http://localhost:7878/ping || exit 1"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 30s
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "50m"
|
|
max-file: "3"
|
|
|
|
sabnzbd:
|
|
image: linuxserver/sabnzbd:latest
|
|
container_name: sabnzbd
|
|
restart: unless-stopped
|
|
environment:
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- TZ=America/Chicago
|
|
volumes:
|
|
- /mnt/docker-data/configs/sabnzbd:/config
|
|
- /mnt/nas-media:/media
|
|
ports:
|
|
- "8082:8080"
|
|
mem_limit: 1G
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl -f http://localhost:8080/api?mode=version || exit 1"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 30s
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "50m"
|
|
max-file: "3"
|
|
|
|
nzbhydra2:
|
|
image: linuxserver/nzbhydra2:latest
|
|
container_name: nzbhydra2
|
|
restart: unless-stopped
|
|
environment:
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- TZ=America/Chicago
|
|
volumes:
|
|
# LOCAL disk, not NFS: stale NFS lock on the H2 database after the
|
|
# 2026-07-12 power event kept hydra unhealthy in a DB-retry loop
|
|
- /var/lib/nzbhydra:/config
|
|
ports:
|
|
- "5076:5076"
|
|
mem_limit: 1G
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl -f http://localhost:5076/ || exit 1"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 90s
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "50m"
|
|
max-file: "3"
|
|
|
|
seerr:
|
|
# Seerr = merged successor of Jellyseerr/Overseerr (fallenbagel/jellyseerr
|
|
# is deprecated). Migrated 2026-10-17; DB auto-migrated on first start.
|
|
# Runs as node (UID 1000), needs init. LOCAL disk (SQLite). Old config left
|
|
# at /mnt/docker-data/configs/jellyseerr for rollback.
|
|
image: seerr/seerr:v3.5.1
|
|
init: true
|
|
container_name: seerr
|
|
restart: unless-stopped
|
|
environment:
|
|
- TZ=America/Chicago
|
|
volumes:
|
|
- /var/lib/seerr:/app/config
|
|
ports:
|
|
- "5055:5055"
|
|
mem_limit: 512M
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "wget -q --spider http://localhost:5055/api/v1/status || exit 1"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 90s
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "50m"
|
|
max-file: "3"
|