Media Stack
GPU-accelerated Docker media streaming stack, LXC 104.
The media-stack runs as an unprivileged LXC container (ID: 104) on the Proxmox host. It hosts a Docker-based media services stack with GPU-accelerated hardware transcoding via Intel HD Graphics 530 passthrough.
Deployment Strategy
A dedicated LXC container running Docker was chosen over individual VMs per service, to consolidate resource usage while keeping service isolation through Docker Compose.
Container Specs:
- Container ID: 104
- Compute: 2 Cores
- Memory: 2048MB RAM
- Swap: 2048MB
- Root Disk: 35GB on
local-lvm - Features:
nesting=1(required for Docker-in-LXC) - Network:
192.168.1.104onvmbr0 - Autostart:
onboot=1
GPU Passthrough (Hardware Transcoding)
The Intel HD Graphics 530 iGPU is passed through from the Proxmox host into this container for hardware-accelerated video transcoding (Quick Sync Video), avoiding CPU-bound transcoding bottlenecks.
LXC Configuration:
Device 226:0 is the DRM render node and 226:128 is the card node,
giving the container full GPU access for transcoding.
Storage Architecture
The Vault HDD (1TB) is bind-mounted into the container for media storage:
This keeps the media library (large, slow-tier storage) separate from application data (fast SSD-backed root disk), so the container root never fills up with media files.
Docker Services
Six containers run via Docker Compose with overlay networking:
- jellyfin — media server, the actual streaming frontend
- sonarr — TV show library management/automation
- radarr — movie library management/automation
- prowlarr — indexer manager feeding Sonarr/Radarr
- qbittorrent — download client
- flaresolverr — solves Cloudflare challenges some indexers present, so Prowlarr can query them successfully
To inspect the running services:
pct exec 104 -- docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"
External Dependencies
None. Every service here is self-hosted with no cloud account, API key, or external tunnel involved — indexers/trackers are queried directly, not through a managed third-party service.
Access & Security
Deliberately not behind the reverse proxy and not resolvable via
Tailscale split-DNS or any *.lab.jaysynclab.com hostname — both
exclusions are intentional, not oversights. Reachable only via direct LAN
IP:port from inside the home network (e.g. 192.168.1.104:8096 for
Jellyfin). No off-VLAN access exists for this stack by design.
Operational Notes
- No automated backup configured for application config (Sonarr/Radarr/ Prowlarr/qBittorrent settings) — only the media library itself lives on the more durable Vault HDD; app config lives on the root disk with the rest of the container.
- Health check:
docker ps(see command above) — all six should showUp, notRestartingorExited.