Skip to main content

Docker - VPN Media Stack without Downloaders

services:
###########################################################################
##  Docker Compose File:  TransmissionProwlarr (haugene)LinuxServer.io)
##  Function:             TorrentIndexer Downloadand ClientSearch Manager
##  Documentation:        https://github.com/haugene/docs.linuxserver.io/images/docker-transmission-openvpnprowlarr
###########################################################################
  transmission:prowlarr:
    image: haugene/transmission-openvpnlscr.io/linuxserver/prowlarr:latest
    container_name: transmission-openvpn
    cap_add:
        - NET_ADMIN # Required for VPN functionality if using haugene/transmission-openvpnprowlarr
    environment:
        - CREATE_TUN_DEVICE=true
        - OPENVPN_PROVIDER=custom
        - OPENVPN_CONFIG=hr-15.protonvpn.udp # Replace with your .ovpn filename
        - OPENVPN_USERNAME=${OPENVPN_USERNAME:?err}
        - OPENVPN_PASSWORD=${OPENVPN_PASSWORD:?err}
        - OPENVPN_OPTS=--inactive 3600 --ping 10 --ping-exit 60
        - WEBPROXY_ENABLED=false
        - LOCAL_NETWORK=$LAN_NETWORK{:?err}  # Your local network range
      - PUID=${PUID:?err}PUID}    # User ID
      - PGID=${PGID:?err}PGID}    # Group ID
      - TZ=${TZ:?err}TZ}        # TimeZone
      - UMASK=${UMASK:?err}UMASK}  # File Umask
      - DEBUG=true
        - TRANSMISSION_SCRAPE_PAUSED_TORRENTS_ENABLED=false
        - TRANSMISSION_UMASK=002
    volumes:
        - ${DOCKERFOLDER:?err}/transmission-openvpn/ovpn_files/:/etc/openvpn/custom
        - ${DOCKERFOLDER:?err}/transmission-openvpn/config/:/config
        #- /volume1/Video/MOVIES:/data/movies
        #- /volume1/Video/MOVIES_TV:/data/movies_tv
        #- /volume1/Music:/data/music
        #- /volume1/Books:/data/books
        #- /volume1/Comics:/data/comics
        #- /volume1/Video/XXX:/data/xxx
        #- /volume1/Media/downloads:/data # Shared downloads directory for persistence and sharing with *arr services
        - ${MEDIAFOLDER:?err}/torrents:/dataARGS=
    logging:
      driver: json-file
      options:
        max-file: ${DOCKERLOGGING_MAXFILE:?err}DOCKERLOGGING_MAXFILE}  # Max number of log files
        max-size: ${DOCKERLOGGING_MAXSIZE:?err}DOCKERLOGGING_MAXSIZE}  # Max file size
    ports:
      - 9091:90919696:9696 # TransmissionProwlarr Webweb UIinterface port
    volumes:
      - 51413:51413${DOCKERFOLDER}/prowlarr/config:/config:rw # TransmissionHost Peerpath Portfor (adjustProwlarr ifconfiguration
    using port forwarding)depends_on:
      - 51413:51413/udp # Transmission Peer Port (adjust if using port forwarding)flaresolverr
    restart: unless-stopped

###########################################################################
##  Docker Compose File:  qBittorrentFlaresolverr (LinuxServer.io)Flaresolverr)
##  Function:             TorrentCloudflare DownloadProxy ClientServer
##  Documentation:        https://docs.linuxserver.io/images/docker-qbittorrentgithub.com/FlareSolverr/FlareSolverr
###########################################################################
  #     qbittorrent:
#flaresolverr:
    image: linuxserver/qbittorrent:flaresolverr/flaresolverr:latest
#
    container_name: qbittorrent
#flaresolverr
#    network_mode: service:transmission
    # qBittorrent MUST always use a VPN / Secure Internet connection
#       environment:
      #- LOG_LEVEL=info
      - CAPTCHA_SOLVER=none
      - PUID=1031${PUID}    # Optional: Adjust for your userUser ID
#
      - PGID=100${PGID}    # Optional: Adjust for your groupGroup ID
      - TZ=${TZ}        # TimeZone
      - UMASK=002${UMASK}  # -File TZ=America/Montreal
#         # - DOCKER_MODS=ghcr.io/gilbn/theme.park:qbittorrent
#         # - TP_THEME=${TP_THEME:?err:?err}
#       volumes:
#         - /volume1/docker/qbittorrent/config:/config
#         - /volume1/data:/data
#Umask
    logging:
#
      driver: json-file
      #         options:
#
        max-file: "10"${DOCKERLOGGING_MAXFILE}  # Max number of log files
        #           max-size: "200k"${DOCKERLOGGING_MAXSIZE}  # Max file size
    #ports:
      ports:- 8191:8191 # -FlareSolverr 6881:6881web # Torrentinterface port
    (TCP)
#volumes:
      - 6881:6881/udp # Torrent port (UDP)
#         - 8280:8080 # Web UI port
#       depends_on:
#         - transmission
#${DOCKERFOLDER}/flaresolverr/config:/config
    restart: unless-stopped

###########################################################################
##  Docker Compose File:  SABnzbdRadarr (LinuxServer.io)
##  Function:             UsenetMovie DownloadLibrary ClientManager
##  Documentation:        https://docs.linuxserver.io/images/docker-sabnzbdradarr
###########################################################################
  # sabnzbd:
  #radarr:
    image: lscr.io/linuxserver/sabnzbd:radarr:latest
  #
    container_name: sabnzbdradarr
#    network_mode: service:transmission
    # SABnzbd MUST always use a VPN / Secure Internet connection
  #   environment:
  #
      - PUID=${PUID:?err}PUID}    # User ID
      #   - PGID=${PGID:?err}PGID}    # Group ID
      #   - TZ=${TZ:?err}TZ}        # TimeZone
  #
      - UMASK=${UMASK:?err}UMASK}  # File Umask
    #   - DOCKER_MODS=ghcr.io/gilbn/theme.park:sabnzbd
  #   - TP_THEME=organizr # Refer to Theme Park for more info / options: https://docs.theme-park.dev/theme-options/aquamarine/
  #   volumes:
  #     - ${DOCKERFOLDER:?err}/sabnzbd/config:/config
  #     - ${MEDIAFOLDER:?err}:/data
  #   logging:
  #
      driver: json-file
      #     options:
  #
        max-file: ${DOCKERLOGGING_MAXFILE:?err}DOCKERLOGGING_MAXFILE}  # Max number of log files
        #       max-size: ${DOCKERLOGGING_MAXSIZE:?err}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
    depends_on:
      - prowlarr
    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
#    network_mode: service:transmission
    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 number of log files
        max-size: ${DOCKERLOGGING_MAXSIZE}  # Max file size
    ports:
      - 8989:8989 # Sonarr web interface port
    volumes:
      - 8080:8080/etc/localtime:/etc/localtime:ro
      - ${DOCKERFOLDER}/sonarr/config:/config # Replace with your desired config path
      - ${MEDIAFOLDER}:/data
    depends_on:
      - prowlarr
    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
#    network_mode: service:transmission
    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}/media:/data/media
    depends_on:
      - prowlarr
    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
#    network_mode: service:transmission
    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:
      - 8686:8686 # Lidarr web interface port
    volumes:
      - ${DOCKERFOLDER}/lidarr/config:/config # Replace with your config path
      - ${MEDIAFOLDER}:/data
    depends_on:
      - prowlarr
    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
#    network_mode: service:transmission
    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
    depends_on:
      - prowlarr
    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
#    network_mode: service:transmission
    environment:
      - PUID=${PUID}    # User ID
      - PGID=${PGID}    # Group ID
      - TZ=${TZ}        # TimeZone
      - UMASK=${UMASK}  # File Umask
      - COMICVIN_BASEURL=#optional
    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
    depends_on:
      - prowlarr
    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
#    network_mode: service:transmission
    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
    depends_on:
      - prowlarr
    restart: unless-stopped

  plex:
    image: ghcr.io/hotio/plex
    container_name: plex
#    network_mode: service:transmission
    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}
      - 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
    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
    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
#    network_mode: service:transmission
    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 # Web UI
      port- 8920:8920 # HTTPS (optional)
      - 9090:90907359:7359/udp # Optional:DLNA SSLdiscovery
      port- if configured1900:1900/udp # depends_on:DLNA advertising
    #runtime: nvidia # Crucial for NVIDIA GPU access
    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
#    network_mode: service:transmission
    environment:
      - transmissionPUID=${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
    volumes:
      - ${DOCKERFOLDER}/jelleyseer/config:/app/config # Change to your desired config path
    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

# CreateUncomment vlanthe onlines Synologybelow #sudoto dockeruse networkNvidia createGPUs for Hardware Transcoding
#    deploy:
#      resources:
#        reservations:
#          devices:
#            -d macvlandriver: --subnet=192.168.253.0/24nvidia
--gateway=192.168.253.#              count: 1
--ip-range=192.168.253.36/30#              --aux-addresscapabilities: 'host=192.168.253.39'[gpu]

-o#networks:
parent=eth3#  media-networkmedia_network:
#sudo#    ip link add media-network link eth3 type macvlan modedriver: bridge
#sudo ip addr add 192.168.253.39/32 dev media-network
#sudo ip link set media-network up
#sudo ip route add 192.168.253.36/30 dev media-network