Docker - VPN Media Stack without Downloaders
networks:
media-network:
name: media-network
driver: bridge
services:
###########################################################################
## Docker Compose File: Prowlarr (LinuxServer.io)
## Function: Indexer and Search Manager
## Documentation: https://docs.linuxserver.io/images/docker-prowlarr
###########################################################################
prowlarr:
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
environment:
- PUID=${PUID} # User ID
- PGID=${PGID} # Group ID
- TZ=${TZ} # TimeZone
- UMASK=${UMASK} # File Umask
- PROWLARR_API_KEY=${PROWLARR_API_KEY}
- ARGS=
logging:
driver: json-file
options:
max-file: ${DOCKERLOGGING_MAXFILE} # Max number of log files
max-size: ${DOCKERLOGGING_MAXSIZE} # Max file size
ports:
- 9696:9696 # Prowlarr web interface port
volumes:
- ${DOCKERFOLDER}/prowlarr/config:/config:rw # Host path for Prowlarr configuration
depends_on:
- flaresolverr
networks:
- media-network
restart: unless-stopped
###########################################################################
## Docker Compose File: Flaresolverr (Flaresolverr)
## Function: Cloudflare Proxy Server
## Documentation: https://github.com/FlareSolverr/FlareSolverr
###########################################################################
flaresolverr:
image: flaresolverr/flaresolverr:latest
container_name: flaresolverr
environment:
- LOG_LEVEL=info
- CAPTCHA_SOLVER=none
- PUID=${PUID} # User ID
- PGID=${PGID} # Group ID
- TZ=${TZ} # TimeZone
- UMASK=${UMASK} # File Umask
logging:
driver: json-file
options:
max-file: ${DOCKERLOGGING_MAXFILE} # Max number of log files
max-size: ${DOCKERLOGGING_MAXSIZE} # Max file size
ports:
- 8191:8191 # FlareSolverr web interface port
volumes:
- ${DOCKERFOLDER}/flaresolverr/config:/config
networks:
- media-network
restart: unless-stopped
###########################################################################
## Docker Compose File: Radarr (LinuxServer.io)
## Function: Movie Library Manager
## Documentation: https://docs.linuxserver.io/images/docker-radarr
###########################################################################
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
environment:
- PUID=${PUID} # User ID
- PGID=${PGID} # Group ID
- TZ=${TZ} # TimeZone
- UMASK=${UMASK} # File Umask
- RADARR_API_KEY=${RADARR_API_KEY}
logging:
driver: json-file
options:
max-file: ${DOCKERLOGGING_MAXFILE} # Max number of log files
max-size: ${DOCKERLOGGING_MAXSIZE} # Max file size
ports:
- 7878:7878 # Radarr web interface port
volumes:
- /etc/localtime:/etc/localtime:ro
- ${DOCKERFOLDER}/radarr/config:/config # Radarr configuration files
- ${MEDIAFOLDER}:/data
- ${MEDIAFOLDER}/torrents:/downloads # Torrent downloads (complete and incomplete)
depends_on:
- prowlarr
networks:
- media-network
restart: unless-stopped
###########################################################################
## Docker Compose File: Sonarr (LinuxServer.io)
## Function: Series Library Manager (TV Shows)
## Documentation: https://docs.linuxserver.io/images/docker-sonarr
###########################################################################
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
environment:
- PUID=${PUID} # User ID
- PGID=${PGID} # Group ID
- TZ=${TZ} # TimeZone
- UMASK=${UMASK} # File Umask
- SONARR__API=${SONARR_API_KEY}
logging:
driver: json-file
options:
max-file: ${DOCKERLOGGING_MAXFILE} # Max number of log files
max-size: ${DOCKERLOGGING_MAXSIZE} # Max file size
ports:
- 8989:8989 # Sonarr web interface port
volumes:
- /etc/localtime:/etc/localtime:ro
- ${DOCKERFOLDER}/sonarr/config:/config # Replace with your desired config path
- ${MEDIAFOLDER}:/data
- ${MEDIAFOLDER}/torrents:/downloads # Torrent downloads (complete and incomplete)
depends_on:
- prowlarr
networks:
- media-network
restart: unless-stopped
###########################################################################
## Docker Compose File: Bazarr (LinuxServer.io)
## Function: Download subtitles for Radarr and Sonarr
## Documentation: https://docs.linuxserver.io/images/docker-bazarr
###########################################################################
bazarr:
image: ghcr.io/hotio/bazarr:nightly
container_name: bazarr
environment:
- PUID=${PUID} # User ID
- PGID=${PGID} # Group ID
- TZ=${TZ} # TimeZone
- UMASK=${UMASK} # File Umask
logging:
driver: json-file
options:
max-file: ${DOCKERLOGGING_MAXFILE}
max-size: ${DOCKERLOGGING_MAXSIZE}
ports:
- 6767:6767 # Bazarr web interface port
volumes:
- /etc/localtime:/etc/localtime:ro
- ${DOCKERFOLDER}/bazarr:/config
- ${MEDIAFOLDER}:/data
- ${MEDIAFOLDER}/torrents:/downloads # Torrent downloads (complete and incomplete)
depends_on:
- prowlarr
networks:
- media-network
restart: unless-stopped
###########################################################################
## Docker Compose File: Lidarr (LinuxServer.io)
## Function: Music Library Manager
## Documentation: https://docs.linuxserver.io/images/docker-lidarr
###########################################################################
lidarr:
image: lscr.io/linuxserver/lidarr:latest
container_name: lidarr
environment:
- PUID=${PUID} # User ID
- PGID=${PGID} # Group ID
- TZ=${TZ} # TimeZone
- UMASK=${UMASK} # File Umask
- APIKEY=${LIDARR_API_KEY}
logging:
driver: json-file
options:
max-file: ${DOCKERLOGGING_MAXFILE}
max-size: ${DOCKERLOGGING_MAXSIZE}
ports:
- 8686:8686 # Lidarr web interface port
volumes:
- ${DOCKERFOLDER}/lidarr/config:/config # Replace with your config path
- ${MEDIAFOLDER}:/data
- ${MEDIAFOLDER}/torrents:/downloads # Torrent downloads (complete and incomplete)
depends_on:
- prowlarr
networks:
- media-network
restart: unless-stopped
###########################################################################
## Docker Compose File: Lazylibrarian (LinuxServer.io)
## Function: Book Library Manager
## Documentation: https://docs.linuxserver.io/images/docker-lazylibrarian/
###########################################################################
lazylibrarian:
image: lscr.io/linuxserver/lazylibrarian:latest
container_name: lazylibrarian
environment:
- PUID=${PUID} # User ID
- PGID=${PGID} # Group ID
- TZ=${TZ} # TimeZone
- UMASK=${UMASK} # File Umask
logging:
driver: json-file
options:
max-file: ${DOCKERLOGGING_MAXFILE}
max-size: ${DOCKERLOGGING_MAXSIZE}
ports:
- 5299:5299 # LazyLibrarian web interface port
volumes:
- ${DOCKERFOLDER}/lazylibrarian/config:/config # Path to store configuration files
- ${MEDIAFOLDER}:/data
- ${MEDIAFOLDER}/torrents:/downloads # Torrent downloads (complete and incomplete)
depends_on:
- prowlarr
networks:
- media-network
restart: unless-stopped
###########################################################################
## Docker Compose File: Mylar3 (LinuxServer.io)
## Function: Comic Manager
## Documentation: https://docs.linuxserver.io/images/docker-mylar3/
###########################################################################
mylar3:
image: linuxserver/mylar3
container_name: mylar3
environment:
- PUID=${PUID} # User ID
- PGID=${PGID} # Group ID
- TZ=${TZ} # TimeZone
- UMASK=${UMASK} # File Umask
- COMICVIN_BASEURL=#optional
- KEY=${MYLAR_API_KEY}
logging:
driver: json-file
options:
max-file: ${DOCKERLOGGING_MAXFILE}
max-size: ${DOCKERLOGGING_MAXSIZE}
ports:
- 8090:8090 # Mylar3 web interface port
volumes:
- ${DOCKERFOLDER}/mylar3/config:/config # Mylar3 configuration files
- ${MEDIAFOLDER}:/data
- ${MEDIAFOLDER}/media/comics:/comics
- ${MEDIAFOLDER}/torrents:/downloads # Torrent downloads (complete and incomplete)
depends_on:
- prowlarr
networks:
- media-network
restart: unless-stopped
###########################################################################
## Docker Compose File: Mylar3 (LinuxServer.io)
## Function: Comic Manager
## Documentation: https://github.com/thespad/docker-whisparr/pkgs/container/whisparr
###########################################################################
whisparr:
image: ghcr.io/thespad/whisparr:latest
container_name: whisparr
environment:
- PUID=${PUID} # User ID
- PGID=${PGID} # Group ID
- TZ=${TZ} # TimeZone
- UMASK=${UMASK} # File Umask
logging:
driver: json-file
options:
max-file: ${DOCKERLOGGING_MAXFILE}
max-size: ${DOCKERLOGGING_MAXSIZE}
ports:
- 6969:6969 # Whisparr web interface port
volumes:
- ${DOCKERFOLDER}/whisparr/config:/config # Whisparr configuration files
- ${MEDIAFOLDER}:/data
- ${MEDIAFOLDER}/torrents:/downloads # Torrent downloads (complete and incomplete)
depends_on:
- prowlarr
networks:
- media-network
restart: unless-stopped
plex:
image: ghcr.io/hotio/plex
container_name: plex
environment:
- PUID=${PUID} # User ID
- PGID=${PGID} # Group ID
- TZ=${TZ} # TimeZone
- UMASK=${UMASK} # File Umask
- PLEX_CLAIM_TOKEN=${PLEX_CLAIM_TOKEN}
- PLEX_ADVERTISE_URL=${PLEX_ADVERTISE_URL}
- PLEX_NO_AUTH_NETWORKS=
- PLEX_BETA_INSTALL=${PLEX_BETA_INSTALL}
- VERSION=docker # Specifies the Docker version of Plex
- NVIDIA_VISIBLE_DEVICES=all # Tells the NVIDIA Container Toolkit to expose all available NVIDIA GPUs to the container
- NVIDIA_DRIVER_CAPABILITIES=all
logging:
driver: json-file
options:
max-file: ${DOCKERLOGGING_MAXFILE}
max-size: ${DOCKERLOGGING_MAXSIZE}
ports:
- 32400:32400
#- 8324:8324/tcp
#- 32469:32469/tcp
#- 1900:1900/udp
#- 32410:32410/udp
#- 32412:32412/udp
#- 32413:32413/udp
#- 32414:32414/udp
volumes:
- /etc/localtime:/etc/localtime:ro
- ${DOCKERFOLDER}/plex:/config:rw
- ${MEDIAFOLDER}/media:/data/media:rw
- /mnt/photo:/media/photo:rw # Path to your photos, :ro for read-only :rw for read-write
devices: # optional: hardware transcoding (only with Plex Pass) uncomment this line.
- /dev/dri:/dev/dri # optional: hardware transcoding (only with Plex Pass) uncomment this line.
#- /dev/dvb:/dev/dvb # Uncomment this device for typical USB TV Tuner cards
tmpfs: # optional: enable transcoding in RAM. uncomment this line.
- /transcode # optional: enable transcoding in RAM. uncomment this line.
#runtime: nvidia # Crucial for NVIDIA GPU access
networks:
- media-network
restart: unless-stopped
###########################################################################
## Docker Compose File: Jellyfin (LinuxServer.io)
## Function: Media Server
## Documentation: https://jellyfin.org/docs/general/administration/installing#docker
## https://jellyfin.org/docs/general/administration/hardware-acceleration/
###########################################################################
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
environment:
- PUID=${PUID} # User ID
- PGID=${PGID} # Group ID
- TZ=${TZ} # TimeZone
- UMASK=${UMASK} # File Umask
- COMICVIN_BASEURL=#optional
- NVIDIA_VISIBLE_DEVICES=all # Tells the NVIDIA Container Toolkit to expose all available NVIDIA GPUs to the container
- NVIDIA_DRIVER_CAPABILITIES=all
- ROC_ENABLE_PRE_VEGA=1 # Hardware Acceleration
logging:
driver: json-file
options:
max-file: ${DOCKERLOGGING_MAXFILE}
max-size: ${DOCKERLOGGING_MAXSIZE}
healthcheck:
test: timeout 10s bash -c ':> /dev/tcp/127.0.0.1/8096' || exit 1
interval: 10s
timeout: 5s
retries: 3
start_period: 90s
volumes:
- ${DOCKERFOLDER}/jellyfin/config:/config # Path to your config directory
- ${DOCKERFOLDER}/jellyfin/cache:/cache # Path to your cache directory
- ${MEDIAFOLDER}/media:/data/media:rw
- /mnt/photo:/media/photo:rw # Path to your photos, :ro for read-only :rw for read-write
ports:
- 8096:8096 # Jellyfin Web UI
- 8920:8920 # Jellyfin Web UI HTTPS (optional)
- 7359:7359/udp # Jellyfin DLNA discovery
- 1900:1900/udp # Jellyfin DLNA advertising
#runtime: nvidia # Crucial for NVIDIA GPU access
networks:
- media-network
restart: unless-stopped
###########################################################################
## Docker Compose File: Jellyseerr (fallenbagel)
## Function: Media Request Manager
## Documentation: https://hub.docker.com/r/fallenbagel/jellyseerr
###########################################################################
jellyseerr:
image: fallenbagel/jellyseerr:latest
container_name: jellyseerr
environment:
- PUID=${PUID} # User ID
- PGID=${PGID} # Group ID
- TZ=${TZ} # TimeZone
- UMASK=${UMASK} # File Umask
- LOG_LEVEL=debug
logging:
driver: json-file
options:
max-file: ${DOCKERLOGGING_MAXFILE}
max-size: ${DOCKERLOGGING_MAXSIZE}
ports:
- 5055:5055 # Jellyseer Web UI
volumes:
- ${DOCKERFOLDER}/jelleyseer/config:/app/config # Change to your desired config path
networks:
- media-network
restart: unless-stopped
###########################################################################
## Docker Compose File: Unpackerr (Hotio.Dev)
## Function: Archive Media Extraction
## Documentation: https://github.com/davidnewhall/unpackerr
## https://github.com/davidnewhall/unpackerr/blob/master/examples/docker-compose.yml
###########################################################################
unpackerr:
image: golift/unpackerr:latest
container_name: unpackerr
network_mode: none
environment:
- PUID=${PUID} # User ID
- PGID=${PGID} # Group ID
- TZ=${TZ} # TimeZone
- UMASK=${UMASK} # File Umask
# Documentation on all Environment Variables can be found at:
# https://github.com/davidnewhall/unpackerr#docker-env-variables
- UN_DEBUG=false
- UN_LOG_FILE=
- UN_LOG_FILES=10
- UN_LOG_FILE_MB=10
- UN_INTERVAL=2m
- UN_START_DELAY=1m
- UN_RETRY_DELAY=5m
- UN_MAX_RETRIES=3
- UN_PARALLEL=1
- UN_FILE_MODE=0664
- UN_DIR_MODE=0775
# Sonarr Config - Copy API Key from: http://sonarr:8989/general/settings
- UN_SONARR_0_URL=http://sonarr:8989
- UN_SONARR_0_API_KEY=${SONARR_API_KEY}
- UN_SONARR_0_PATHS_0=/data/torrents/anime
- UN_SONARR_0_PATHS_1=/data/torrents/series
- UN_SONARR_0_PROTOCOLS=torrent
- UN_SONARR_0_TIMEOUT=10s
- UN_SONARR_0_DELETE_ORIG=false
- UN_SONARR_0_DELETE_DELAY=5m
# Radarr Config - Copy API Key from: http://radarr:7878/general/settings
- UN_RADARR_0_URL=http://radarr:7878
- UN_RADARR_0_API_KEY=${RADARR_API_KEY}
- UN_RADARR_0_PATHS_0=/data/torrents/movies
- UN_RADARR_0_PROTOCOLS=torrent
- UN_RADARR_0_TIMEOUT=10s
- UN_RADARR_0_DELETE_ORIG=false
- UN_RADARR_0_DELETE_DELAY=5m
# Lidarr Config - Copy API Key from: http://lidarr:8686/general/settings
- UN_LIDARR_0_URL=http://lidarr:8686
- UN_LIDARR_0_API_KEY=${LIDARR_API_KEY}
- UN_LIDARR_0_PATHS_0=/data/torrents/music
- UN_LIDARR_0_PROTOCOLS=torrent
- UN_LIDARR_0_TIMEOUT=10s
- UN_LIDARR_0_DELETE_ORIG=false
- UN_LIDARR_0_DELETE_DELAY=
volumes:
- ${DOCKERFOLDER}/unpackerr:/config
- ${MEDIAFOLDER}:/data
security_opt:
- no-new-privileges:true
restart: unless-stopped
# Uncomment the lines below to use Nvidia GPUs for Hardware Transcoding
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: 1
# capabilities: [gpu]
This is for the .env file
COMPOSE_PROJECT_NAME=MediaStack
OPENVPN_USERNAME=
OPENVPN_PASSWORD=
PUID=1031
PGID=100
TZ=America/Montreal
UMASK=002
DOCKERLOGGING_MAXFILE=10
DOCKERLOGGING_MAXSIZE=200k
PLEX_CLAIM_TOKEN=
PLEX_BETA_INSTALL=true
PLEX_ADVERTISE_URL="http://192.168.253.35:32400"
LAN_NETWORK=192.168.253.0/24
HOSTNAME=
DOCKERFOLDER=/volume1/docker
MEDIAFOLDER=/mnt/data
DOMAIN=
SUB_DOMAIN_JELLYFIN=jellyfin
SUB_DOMAIN_PLEX=plex
SUB_DOMAIN_SONARR=sonarr
SUB_DOMAIN_RADARR=radarr
SUB_DOMAIN_PROWLARR=prowlarr
SUB_DOMAIN_JELLYSEERR=jellyseerr
SUB_DOMAIN_BAZZAR=bazzar
SUB_DOMAIN_WHISPARR=whisparr
SUB_DOMAIN_LAZYLIBRARIAN=lazylibrarian
SUB_DOMAIN_MYLAR=mylar
SUB_DOMAIN_LIDARR=lidarr
SUB_DOMAIN_FLARESOLVERR=flaresolverr
SUB_DOMAIN_JELLYFIN=jellyfin
RADARR_API_KEY=
SONARR_API_KEY=
LIDARR_API_KEY=
MYLAR_API_KEY=
PROWLARR_API_KEY=
LAZYLIBRARIAN_API_KEY=