Skip to content

Instantly share code, notes, and snippets.

@JSH32
Last active April 11, 2024 19:08
Show Gist options
  • Save JSH32/8a5dc7c950ade9effcf3f85d38a24613 to your computer and use it in GitHub Desktop.
Save JSH32/8a5dc7c950ade9effcf3f85d38a24613 to your computer and use it in GitHub Desktop.
My media stack file for media server
version: "3.8"
services:
jellyfin:
image: jellyfin/jellyfin
volumes:
- jellyfin-config:/config
- jellyfin-cache:/cache
- ${MEDIA_LOCATION}:/media
# This is for menu links https://jellyfin.org/docs/general/clients/web-config/#custom-menu-links
# When doing initial setup this may need to be commented out
- /var/lib/docker/volumes/media_jellyfin-config/_data/config.json:/jellyfin/jellyfin-web/config.json
restart: unless-stopped
network_mode: "host"
environment:
TZ: ${TIMEZONE}
PUID: 1000
PGID: 1000
extra_hosts:
- "host.docker.internal:host-gateway"
labels:
- docker-volume-backup.stop-during-backup=true
qbittorrent:
image: dyonr/qbittorrentvpn
restart: unless-stopped
ports:
- 8089:8080
cap_add:
- NET_ADMIN
environment:
TZ: ${TIMEZONE}
PUID: 1000
PGID: 1000
VPN_ENABLED: yes
VPN_TYPE: wireguard
LAN_NETWORK: 192.168.0.0/24
sysctls:
- net.ipv6.conf.all.disable_ipv6=0
volumes:
- qbittorrent-config:/config
- ${MEDIA_LOCATION}/downloads:/downloads
labels:
- docker-volume-backup.stop-during-backup=true
sonarr:
image: cr.hotio.dev/hotio/sonarr:latest
environment:
TZ: ${TIMEZONE}
PUID: 1000
PGID: 1000
volumes:
- sonarr-config:/config
- ${MEDIA_LOCATION}/downloads:/downloads
- ${MEDIA_LOCATION}:/media
ports:
- 8989:8989
restart: unless-stopped
labels:
- docker-volume-backup.stop-during-backup=true
radarr:
image: cr.hotio.dev/hotio/radarr:latest
user: root:root
environment:
TZ: ${TIMEZONE}
PUID: 1000
PGID: 1000
volumes:
- radarr-config:/config
- ${MEDIA_LOCATION}/downloads:/downloads
- ${MEDIA_LOCATION}:/media
ports:
- 7878:7878
restart: unless-stopped
labels:
- docker-volume-backup.stop-during-backup=true
prowlarr:
image: lscr.io/linuxserver/prowlarr:latest
environment:
TZ: ${TIMEZONE}
PUID: 1000
PGID: 1000
volumes:
- prowlarr-config:/config
ports:
- 9696:9696
restart: unless-stopped
labels:
- docker-volume-backup.stop-during-backup=true
flaresolverr:
# DockerHub mirror flaresolverr/flaresolverr:latest
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: flaresolverr
environment:
LOG_LEVEL: info
LOG_HTML: false
CAPTCHA_SOLVER: ${CAPTCHA_SOLVER:-none}
TZ: ${TIMEZONE}
ports:
- 8191:8191
restart: unless-stopped
jellyseerr:
image: fallenbagel/jellyseerr:latest
container_name: jellyseerr
environment:
LOG_LEVEL: debug
TZ: ${TIMEZONE}
ports:
- 5055:5055
volumes:
- jellyseer-config:/app/config
restart: unless-stopped
labels:
- docker-volume-backup.stop-during-backup=true
jfa:
container_name: jfa
image: hrfee/jfa-go
restart: unless-stopped
ports:
- 8056:8056
environment:
TZ: ${TZ}
volumes:
- jfa-db:/data
- jellyfin-config:/jf
labels:
- docker-volume-backup.stop-during-backup=true
decluttarr:
image: ghcr.io/manimatter/decluttarr:latest
container_name: decluttarr
restart: always
labels:
- docker-volume-backup.stop-during-backup=true
env_file:
- stack.env
environment:
TZ: ${TIMEZONE}
PUID: 1000
PGID: 1000
# General
LOG_LEVEL: INFO
# Features
REMOVE_TIMER: 10
REMOVE_FAILED: True
REMOVE_STALLED: True
REMOVE_METADATA_MISSING: True
REMOVE_ORPHANS: True
REMOVE_UNMONITORED: True
PERMITTED_ATTEMPTS: 3
NO_STALLED_REMOVAL_QBIT_TAG: "Don't Kill If Stalled"
# Radarr
RADARR_URL: http://radarr:7878
# Sonarr
SONARR_URL: http://sonarr:8989
# Qbittorrent
QBITTORRENT_URL: http://qbittorrent:8080
miniserve:
image: svenstaro/miniserve
restart: always
volumes:
- ${MEDIA_LOCATION}/downloads:/files/downloads
- ${MEDIA_LOCATION}/movies:/files/movies
- ${MEDIA_LOCATION}/shows:/files/shows
- ${MEDIA_LOCATION}/books:/files/books
ports:
- 4567:8080
command: "--dirs-first --enable-zip --auth ${FILES_USERNAME}:${FILES_PASSWORD} --title Files /files"
# Volume backup
backup:
image: offen/docker-volume-backup:v2.39.0
environment:
# Run on Mondays and Thursdays at 5am
BACKUP_CRON_EXPRESSION: "0 5 * * MON,THU"
BACKUP_FILENAME: backup-%Y-%m-%dT%H-%M-%S.tar.gz
BACKUP_LATEST_SYMLINK: backup-latest.tar.gz
volumes:
# All the volumes to backup
- jfa-db:/backup/jfa-db-backup:ro
- prowlarr-config:/backup/prowlarr-config-backup:ro
- sonarr-config:/backup/sonarr-config-backup:ro
- radarr-config:/backup/radarr-config-backup:ro
- qbittorrent-config:/backup/qbittorrent-config-backup:ro
- jellyfin-config:/backup/jellyfin-config-backup:ro
- jellyfin-cache:/backup/jellyfin-cache-backup:ro
- jellyseer-config:/backup/jellyseer-config-backup:ro
# Docker socket
- /var/run/docker.sock:/var/run/docker.sock:ro
# Location to backup to
- ${MEDIA_LOCATION}/media-vol-backups:/archive
volumes:
jfa-db:
reiverr-config:
prowlarr-config:
sonarr-config:
radarr-config:
qbittorrent-config:
jellyfin-config:
jellyfin-cache:
jellyseer-config:
@JSH32
Copy link
Author

JSH32 commented Jul 19, 2023

This will need to be configured further. You'll have to go into qbittorrent-config/_data/wireguard and drop a config file in here for it to function (or VPN_ENABLED=no). You will also most likely have to change your LAN_NETWORK.

This is not designed to be a setup guide but just simply a starting point for getting your media server rolling. You should probably have prior experience with docker and linux.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment