3bb01ddaaf
- New Ansible role: jellyfin — Docker + nvidia-container-toolkit setup, full *arr stack compose file (Jellyfin, qBittorrent, Radarr, Sonarr, Prowlarr, FlareSolverr, Jellyseerr), systemd service for auto-start - New playbook: jellyfin.yml targeting media_servers group - Inventory: add media LXC (10.10.1.50) to media_servers group - Traefik: add internal .homelab routes for all 6 media services - Pi-hole: add DNS records for all 6 media services → Traefik - network-interfaces: DNAT port 6881 TCP+UDP → 10.10.1.50 for BitTorrent - homelab-requirements.md: document full Jellyfin stack requirements including NVIDIA GTX 1060 passthrough approach and driver notes - jellyfin-tools: original reference compose file from upstream Infrastructure created on Proxmox: - LXC 106 (media, Debian 12, privileged, nesting=1, 10.10.1.50/vmbr1) - ZFS dataset hdd/media mounted at /media in LXC - NVIDIA device passthrough entries in /etc/pve/lxc/106.conf Note: NVIDIA driver 580.159.03 (.run) installed on Proxmox host — not managed by apt (Debian only has 550.x which doesn't support kernel 7.x or GTX 1060 Pascal as of this driver version). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
132 lines
3.5 KiB
Plaintext
132 lines
3.5 KiB
Plaintext
name: jellyfin-tools
|
|
services:
|
|
qbittorrent:
|
|
container_name: qbittorrent
|
|
image: lscr.io/linuxserver/qbittorrent:5.1.4
|
|
networks:
|
|
- proxy
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.qbittorrent.rule=Host(`bittorrent.home.sjaun.ch`)"
|
|
- "traefik.http.services.qbittorrent.loadbalancer.server.port=5080"
|
|
environment:
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- TZ=Europe/Zurich
|
|
- WEBUI_PORT=5080
|
|
volumes:
|
|
- /containers/qbittorrent/config:/config
|
|
- /media:/downloads
|
|
ports:
|
|
- 5080:5080
|
|
- 6881:6881
|
|
- 6881:6881/udp
|
|
restart: "unless-stopped"
|
|
|
|
radarr:
|
|
container_name: radarr
|
|
image: lscr.io/linuxserver/radarr:6.0.4
|
|
networks:
|
|
- proxy
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.radarr.rule=Host(`radarr.home.sjaun.ch`)"
|
|
- "traefik.http.services.radarr.loadbalancer.server.port=7878"
|
|
environment:
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- TZ=Europe/Zurich
|
|
ports:
|
|
- 7878:7878
|
|
volumes:
|
|
- /containers/radarr/config:/config
|
|
- /media:/downloads
|
|
restart: "unless-stopped"
|
|
|
|
sonarr:
|
|
image: linuxserver/sonarr:4.0.16
|
|
container_name: sonarr
|
|
networks:
|
|
- proxy
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.sonarr.rule=Host(`sonarr.home.sjaun.ch`)"
|
|
- "traefik.http.services.sonarr.loadbalancer.server.port=8989"
|
|
environment:
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- TZ=Europe/Zurich
|
|
volumes:
|
|
- /containers/sonarr/config:/config
|
|
- /media:/downloads
|
|
ports:
|
|
- 8989:8989
|
|
restart: unless-stopped
|
|
|
|
prowlarr:
|
|
container_name: prowlarr
|
|
image: linuxserver/prowlarr:2.3.0
|
|
networks:
|
|
- proxy
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.prowlarr.rule=Host(`prowlarr.home.sjaun.ch`)"
|
|
- "traefik.http.services.prowlarr.loadbalancer.server.port=9696"
|
|
environment:
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- TZ=Europe/Zurich
|
|
volumes:
|
|
- /containers/prowlarr/config:/config
|
|
ports:
|
|
- 9696:9696
|
|
restart: unless-stopped
|
|
|
|
flaresolverr:
|
|
# DockerHub mirror flaresolverr/flaresolverr:latest
|
|
image: ghcr.io/flaresolverr/flaresolverr:latest
|
|
networks:
|
|
- proxy
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.flaresolverr.rule=Host(`flaresolverr.home.sjaun.ch`)"
|
|
- "traefik.http.services.flaresolverr.loadbalancer.server.port=8191"
|
|
container_name: flaresolverr
|
|
environment:
|
|
- LOG_LEVEL=${LOG_LEVEL:-info}
|
|
- LOG_FILE=${LOG_FILE:-none}
|
|
- LOG_HTML=${LOG_HTML:-false}
|
|
- CAPTCHA_SOLVER=${CAPTCHA_SOLVER:-none}
|
|
- TZ=Europe/Zurich
|
|
ports:
|
|
- "${PORT:-8191}:8191"
|
|
volumes:
|
|
- /containers/flaresolver/config:/config
|
|
restart: unless-stopped
|
|
|
|
jellyseerr:
|
|
image: ghcr.io/fallenbagel/jellyseerr:latest
|
|
init: true
|
|
container_name: jellyseerr
|
|
networks:
|
|
- proxy
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.jellyseerr.rule=Host(`jellyseerr.home.sjaun.ch`)"
|
|
- "traefik.http.services.jellyseerr.loadbalancer.server.port=5055"
|
|
environment:
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- TZ=Europe/Zurich
|
|
volumes:
|
|
- /containers/jellyseerr/config:/app/config
|
|
healthcheck:
|
|
test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1
|
|
start_period: 20s
|
|
timeout: 3s
|
|
interval: 15s
|
|
retries: 3
|
|
restart: unless-stopped
|
|
networks:
|
|
proxy:
|
|
external: true |