Skip to main content

Docker - VPN Media Stack without Downloaders

services:
###########################################################################
##  Docker Compose File:  Transmission (haugene)
##  Function:             Torrent Download Client
##  Documentation:        https://github.com/haugene/docker-transmission-openvpn
###########################################################################
  transmission:
    image: haugene/transmission-openvpn
    container_name: transmission-openvpn
    cap_add:
        - NET_ADMIN # Required for VPN functionality if using haugene/transmission-openvpn
    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}    # User ID
        - PGID=${PGID:?err}    # Group ID
        - TZ=${TZ:?err}        # TimeZone
        - UMASK=${UMASK:?err}  # 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:/data
    logging:
      driver: json-file
      options:
        max-file: ${DOCKERLOGGING_MAXFILE:?err}  # Max number of log files
        max-size: ${DOCKERLOGGING_MAXSIZE:?err}  # Max file size
    ports:
        - 9091:9091 # Transmission Web UI
        - 51413:51413 # Transmission Peer Port (adjust if using port forwarding)
        - 51413:51413/udp # Transmission Peer Port (adjust if using port forwarding)
    restart: unless-stopped

###########################################################################
##  Docker Compose File:  qBittorrent (LinuxServer.io)
##  Function:             Torrent Download Client
##  Documentation:        https://docs.linuxserver.io/images/docker-qbittorrent
###########################################################################
#     qbittorrent:
#       image: linuxserver/qbittorrent:latest
#       container_name: qbittorrent
# #      network_mode: service:transmission  # qBittorrent MUST always use a VPN / Secure Internet connection
#       environment:
#         - PUID=1031 # Optional: Adjust for your user ID
#         - PGID=100  # Optional: Adjust for your group ID
#         - UMASK=002
#         - 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
#       logging:
#         driver: json-file
#         options:
#           max-file: "10"  # Max number of log files
#           max-size: "200k"  # Max file size
#       ports:
#         - 6881:6881 # Torrent port (TCP)
#         - 6881:6881/udp # Torrent port (UDP)
#         - 8280:8080 # Web UI port
#       depends_on:
#         - transmission
#       restart: unless-stopped

###########################################################################
##  Docker Compose File:  SABnzbd (LinuxServer.io)
##  Function:             Usenet Download Client
##  Documentation:        https://docs.linuxserver.io/images/docker-sabnzbd
###########################################################################
  # sabnzbd:
  #   image: lscr.io/linuxserver/sabnzbd:latest
  #   container_name: sabnzbd
  #   network_mode: service:transmission  # SABnzbd MUST always use a VPN / Secure Internet connection
  #   environment:
  #   - PUID=${PUID:?err}    # User ID
  #   - PGID=${PGID:?err}    # Group ID
  #   - TZ=${TZ:?err}        # TimeZone
  #   - UMASK=${UMASK:?err}  # 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}  # Max number of log files
  #       max-size: ${DOCKERLOGGING_MAXSIZE:?err}  # Max file size
  #   ports:
  #     - 8080:8080 # Web UI port
  #     - 9090:9090 # Optional: SSL port if configured
  #   depends_on:
  #     - transmission
  #   restart: unless-stopped
      
# Create vlan on Synology
#sudo docker network create -d macvlan --subnet=192.168.253.0/24 --gateway=192.168.253.1 --ip-range=192.168.253.36/30 --aux-address 'host=192.168.253.39' -o parent=eth3 media-network
#sudo ip link add media-network link eth3 type macvlan mode 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