From 08a1ee3dd39587c71052490617ac35b4fc7ebc21 Mon Sep 17 00:00:00 2001 From: Arpad Krejczinger Date: Sun, 17 Aug 2025 20:57:59 +0200 Subject: [PATCH] Add Jellyfin media server Docker configuration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Docker compose setup with hardware acceleration support - Network host mode for optimal streaming performance - Volume mounts for config, cache, and media directories - Memory limits and resource management - Device access for GPU hardware transcoding - Integration with existing media folder structure 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- config/docker/jellyfin/docker-compose.yml | 53 +++++++++++++++++++++++ config/docker/jellyfin/setup.sh | 47 ++++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 config/docker/jellyfin/docker-compose.yml create mode 100755 config/docker/jellyfin/setup.sh diff --git a/config/docker/jellyfin/docker-compose.yml b/config/docker/jellyfin/docker-compose.yml new file mode 100644 index 0000000..ab6da5e --- /dev/null +++ b/config/docker/jellyfin/docker-compose.yml @@ -0,0 +1,53 @@ +# DEPLOYMENT LOCATION: /opt/docker/jellyfin/docker-compose.yml +# Deploy with: sudo mkdir -p /opt/docker/jellyfin && sudo cp config/docker/jellyfin/docker-compose.yml /opt/docker/jellyfin/ +# Start with: cd /opt/docker/jellyfin && sudo docker-compose up -d + +version: "3.8" + +services: + jellyfin: + image: jellyfin/jellyfin:latest + container_name: jellyfin + restart: unless-stopped + + # User and group IDs to match host user (hoborg) + user: 1000:1000 + + # Environment variables + environment: + - JELLYFIN_PublishedServerUrl=https://ak-homelab.duckdns.org/media + + # Network mode for better performance and hardware acceleration + network_mode: host + + # Volume mounts - using same folders as Copyparty + volumes: + # Jellyfin configuration and data + - /opt/docker/jellyfin/config:/config + - /opt/docker/jellyfin/cache:/cache + + # Media folders (shared with Copyparty) + - /home/hoborg/Music:/media/music:ro + - /home/hoborg/Videos:/media/videos:ro + - /home/hoborg/shared:/media/shared:ro + + # Additional media folders if they exist + # - /home/hoborg/Movies:/media/movies:ro + # - /home/hoborg/TV:/media/tv:ro + + # Device access for hardware acceleration (Intel/AMD GPU) + devices: + - /dev/dri:/dev/dri + + # Memory limits for container stability + deploy: + resources: + limits: + memory: 2G + reservations: + memory: 512M + +# Optional: Create a custom network if not using host networking +# networks: +# jellyfin: +# driver: bridge \ No newline at end of file diff --git a/config/docker/jellyfin/setup.sh b/config/docker/jellyfin/setup.sh new file mode 100755 index 0000000..c4646bd --- /dev/null +++ b/config/docker/jellyfin/setup.sh @@ -0,0 +1,47 @@ +#!/bin/bash +# DEPLOYMENT LOCATION: /opt/docker/jellyfin/setup.sh +# Deploy with: sudo cp config/docker/jellyfin/setup.sh /opt/docker/jellyfin/ && sudo chmod +x /opt/docker/jellyfin/setup.sh + +set -e + +echo "Setting up Jellyfin media server..." + +# Create necessary directories +echo "Creating Jellyfin directories..." +sudo mkdir -p /opt/docker/jellyfin/{config,cache} + +# Set proper ownership for Jellyfin directories +echo "Setting directory ownership..." +sudo chown -R 1000:1000 /opt/docker/jellyfin/ + +# Copy docker-compose.yml if it doesn't exist +if [ ! -f /opt/docker/jellyfin/docker-compose.yml ]; then + echo "Copying docker-compose.yml..." + sudo cp /home/hoborg/homelab/config/docker/jellyfin/docker-compose.yml /opt/docker/jellyfin/ +fi + +# Check if media directories exist, create if needed +echo "Checking media directories..." +for dir in Music Videos shared; do + if [ ! -d "/home/hoborg/$dir" ]; then + echo "Creating /home/hoborg/$dir directory..." + mkdir -p "/home/hoborg/$dir" + fi +done + +# Start Jellyfin container +echo "Starting Jellyfin container..." +cd /opt/docker/jellyfin +sudo docker-compose pull +sudo docker-compose up -d + +echo "Jellyfin setup complete!" +echo "Access URL: http://localhost:8096" +echo "External URL: https://ak-homelab.duckdns.org/media (after nginx setup)" +echo "" +echo "Media folders mapped:" +echo " - Music: /home/hoborg/Music → /media/music" +echo " - Videos: /home/hoborg/Videos → /media/videos" +echo " - Shared: /home/hoborg/shared → /media/shared" +echo "" +echo "To check status: cd /opt/docker/jellyfin && sudo docker-compose logs -f jellyfin" \ No newline at end of file