Files
EZ-Homelab/docker-compose/media/docker-compose.yml
Kelin e2a654b3f4 Refactor docker-compose configurations and add new services
- Reorganize Authelia configuration files
- Add new dynamic routing files for Traefik
- Update various service docker-compose files
- Remove outdated templates and scripts
2026-02-03 22:20:09 -05:00

130 lines
4.0 KiB
YAML

# Media Services
# SABLIER SESSION DURATION: Set to 5m for testing. Increase to 30m for production in config-templates/traefik/dynamic/sablier.yml
# RESTART POLICY GUIDE:
# - unless-stopped: Core infrastructure services that should always run
# - no: Services with Sablier lazy loading (start on-demand)
# - See individual service comments for specific reasoning
services:
# Jellyfin - Open-source media streaming server
# NOTE: No Authelia - allows app access from Roku, Fire TV, mobile, etc.
# Uses Sablier lazy loading - starts on-demand, stops after 5min inactivity
jellyfin:
image: jellyfin/jellyfin:10.8.13
deploy:
resources:
limits:
cpus: '2.0'
memory: 2G
pids: 2048
reservations:
cpus: '1.0'
memory: 1G
container_name: jellyfin
restart: no
networks:
- homelab-network
- traefik-network
ports:
- '8096:8096'
volumes:
- ./jellyfin/config:/config
- ./jellyfin/cache:/cache
- /mnt/media:/media:ro # Large media files on separate drive
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:8096/']
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
# Uncomment for hardware transcoding
# devices:
# - /dev/dri:/dev/dri
# TRAEFIK CONFIGURATION
labels:
# Service metadata
- 'com.centurylinklabs.watchtower.enable=true'
- 'homelab.category=media'
- 'homelab.description=Open-source media streaming server'
- 'traefik.enable=true'
- 'traefik.docker.network=traefik-network'
# Router configuration
- 'traefik.http.routers.jellyfin.rule=Host(`jellyfin.${DOMAIN}`)'
- 'traefik.http.routers.jellyfin.entrypoints=websecure'
- 'traefik.http.routers.jellyfin.tls=true'
- 'traefik.http.routers.jellyfin.tls.certresolver=letsencrypt'
# Service configuration
- 'traefik.http.services.jellyfin.loadbalancer.server.port=8096'
# Sablier configuration
- 'sablier.enable=true'
- 'sablier.group=jasper-jellyfin'
- 'sablier.start-on-demand=true'
- 'sablier.theme=hacker-terminal'
# Calibre-Web - Ebook reader and server
calibre-web:
image: lscr.io/linuxserver/calibre-web:latest
deploy:
resources:
limits:
cpus: '0.50'
memory: 256M
pids: 512
reservations:
cpus: '0.25'
memory: 128M
container_name: calibre-web
restart: unless-stopped
networks:
- homelab-network
- traefik-network
ports:
- '8083:8083'
volumes:
- ./calibre-web/config:/config
- /mnt/media/books:/books
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
- DOCKER_MODS=linuxserver/mods:universal-calibre
# TRAEFIK CONFIGURATION
labels:
# Service metadata
- 'com.centurylinklabs.watchtower.enable=true'
- 'homelab.category=media'
- 'homelab.description=Ebook reader and library management'
- 'traefik.enable=true'
- 'traefik.docker.network=traefik-network'
# Router configuration
- 'traefik.http.routers.calibre.rule=Host(`calibre.${DOMAIN}`)'
- 'traefik.http.routers.calibre.entrypoints=websecure'
- 'traefik.http.routers.calibre.tls.certresolver=letsencrypt'
- 'traefik.http.routers.calibre.middlewares=authelia@docker'
# Service configuration
- 'traefik.http.services.calibre.loadbalancer.server.port=8083'
# Sablier configuration (disabled by default)
- 'sablier.enable=true'
- 'sablier.group=jasper-calibre-web'
- 'sablier.start-on-demand=true'
x-dockge:
urls:
# Proxied URLs (through Traefik)
- https://jellyfin.${DOMAIN}
- http://192.168.4.4:8096
- https://calibre.${DOMAIN}
- http://192.168.4.4:8083
networks:
homelab-network:
external: true
traefik-network:
external: true