Create docker-compose.yml
This commit is contained in:
parent
19949d7b04
commit
78dd4f6845
1 changed files with 290 additions and 0 deletions
290
docker-compose.yml
Normal file
290
docker-compose.yml
Normal file
|
|
@ -0,0 +1,290 @@
|
||||||
|
# Welcome to my Ultimate Plex Stack!
|
||||||
|
# I was hoping this could maybe help some people out when setting up their stack
|
||||||
|
#
|
||||||
|
# Environment Variable Examples:
|
||||||
|
# USER_ID = 1000
|
||||||
|
# TZ = America/Edmonton
|
||||||
|
# BASE_PATH = /home/username/docker
|
||||||
|
#
|
||||||
|
# https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/ # This can be useful for establishing how the media will be presented below
|
||||||
|
# UNRAID_SHARE = /mnt/media # This can also be renamed to "SHARE" or "MEDIA" this is where you will present your media
|
||||||
|
#
|
||||||
|
# NOTE: This is not a plug and play solution, some research / customization will be required to make this work as intented
|
||||||
|
# Feel free to customize ie: remove/change/add containers as needed - one size does not fit all
|
||||||
|
|
||||||
|
---
|
||||||
|
version: "2.1"
|
||||||
|
|
||||||
|
networks: #This is used if you have a reverse proxy. I use Nginx Proxy Manager but anything will do
|
||||||
|
proxy:
|
||||||
|
external:
|
||||||
|
name: proxy
|
||||||
|
|
||||||
|
services:
|
||||||
|
#Plex - used to display the media
|
||||||
|
#
|
||||||
|
#This can also be replaced by Emby/Jellyfin
|
||||||
|
plex:
|
||||||
|
image: lscr.io/linuxserver/plex:latest
|
||||||
|
container_name: plex
|
||||||
|
network_mode: host
|
||||||
|
environment:
|
||||||
|
- PUID=${USER_ID}
|
||||||
|
- PGID=${USER_ID}
|
||||||
|
- TZ=${TZ}
|
||||||
|
- VERSION=docker
|
||||||
|
- PLEX_CLAIM=claim-JYFJ19NaVW-uqgWpSyyw
|
||||||
|
ports:
|
||||||
|
- 32400:32400
|
||||||
|
devices:
|
||||||
|
- /dev/dri:/dev/dri #Required for plex HW transcoding / QuickSync
|
||||||
|
volumes:
|
||||||
|
- ${BASE_PATH}/plex/config:/config
|
||||||
|
- ${UNRAID_SHARE}/media/tv:/tv
|
||||||
|
- ${UNRAID_SHARE}/media/movies:/movies
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
#Radarr - used to find movies automatically
|
||||||
|
radarr:
|
||||||
|
image: lscr.io/linuxserver/radarr:latest
|
||||||
|
container_name: radarr
|
||||||
|
environment:
|
||||||
|
- PUID=${USER_ID}
|
||||||
|
- PGID=${USER_ID}
|
||||||
|
- TZ=${TZ}
|
||||||
|
volumes:
|
||||||
|
- ${BASE_PATH}/radarr/config:/config
|
||||||
|
- ${UNRAID_SHARE}:/share #Access to the entire share
|
||||||
|
#networks: #Does not connect to overseer if you use NPM
|
||||||
|
# - proxy
|
||||||
|
ports:
|
||||||
|
- 7878:7878
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
#Sonarr - used to find tv shows automatically
|
||||||
|
sonarr:
|
||||||
|
image: lscr.io/linuxserver/sonarr:latest
|
||||||
|
container_name: sonarr
|
||||||
|
environment:
|
||||||
|
- PUID=${USER_ID}
|
||||||
|
- PGID=${USER_ID}
|
||||||
|
- TZ=${TZ}
|
||||||
|
volumes:
|
||||||
|
- ${BASE_PATH}/sonarr/config:/config
|
||||||
|
- ${UNRAID_SHARE}:/share #Access to the entire share
|
||||||
|
#networks: #Does not connect to overseer if you use NPM
|
||||||
|
# - proxy
|
||||||
|
ports:
|
||||||
|
- 8989:8989
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
#Prowlarr - manages your Sonarr, Radarr and download client
|
||||||
|
prowlarr:
|
||||||
|
image: lscr.io/linuxserver/prowlarr:latest
|
||||||
|
container_name: prowlarr
|
||||||
|
environment:
|
||||||
|
- PUID=${USER_ID}
|
||||||
|
- PGID=${USER_ID}
|
||||||
|
- TZ=${TZ}
|
||||||
|
volumes:
|
||||||
|
- ${BASE_PATH}/prowlarr/config:/config
|
||||||
|
#networks:
|
||||||
|
# - proxy
|
||||||
|
ports:
|
||||||
|
- 9696:9696
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
#Autobrr - used to grab torrents using the trackers IRC channel - Increases seeding due to grabbing content before RSS feed
|
||||||
|
autobrr:
|
||||||
|
container_name: autobrr
|
||||||
|
image: ghcr.io/autobrr/autobrr:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
user: 0:0
|
||||||
|
environment:
|
||||||
|
- TZ=${TZ}
|
||||||
|
volumes:
|
||||||
|
- ${BASE_PATH}/autobrr/config:/config
|
||||||
|
ports:
|
||||||
|
- 7474:7474
|
||||||
|
|
||||||
|
#Overseer - allows users to request media on their own
|
||||||
|
overseerr:
|
||||||
|
image: lscr.io/linuxserver/overseerr:latest
|
||||||
|
container_name: overseerr
|
||||||
|
environment:
|
||||||
|
- PUID=${USER_ID}
|
||||||
|
- PGID=${USER_ID}
|
||||||
|
- TZ=${TZ}
|
||||||
|
volumes:
|
||||||
|
- ${BASE_PATH}/overseer/config:/config
|
||||||
|
- ${UNRAID_SHARE}:/share #Access to the entire share
|
||||||
|
#networks:
|
||||||
|
# - proxy
|
||||||
|
ports:
|
||||||
|
- 5055:5055
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
#Gluetun - vpn container
|
||||||
|
gluetun: #Setup for this container will be different depending on your VPN of choice
|
||||||
|
image: qmcgaw/gluetun
|
||||||
|
container_name: gluetun
|
||||||
|
# line above must be uncommented to allow external containers to connect.
|
||||||
|
# See https://github.com/qdm12/gluetun-wiki/blob/main/setup/connect-a-container-to-gluetun.md#external-container-to-gluetun
|
||||||
|
cap_add:
|
||||||
|
- NET_ADMIN
|
||||||
|
devices:
|
||||||
|
- /dev/net/tun:/dev/net/tun
|
||||||
|
ports:
|
||||||
|
- 8888:8888/tcp # HTTP proxy
|
||||||
|
- 8388:8388/tcp # Shadowsocks
|
||||||
|
- 8388:8388/udp # Shadowsocks
|
||||||
|
- 8080:8080 #Qbittorent Web UI
|
||||||
|
- 8081:8081 #Qbittorent Web UI
|
||||||
|
- 6881:6881
|
||||||
|
- 6881:6881/udp
|
||||||
|
volumes:
|
||||||
|
- ${BASE_PATH}/gluetun:/gluetun
|
||||||
|
environment:
|
||||||
|
- VPN_SERVICE_PROVIDER=${VPN_SERVICE_PROVIDER} # Example airvpn
|
||||||
|
- VPN_TYPE=wireguard #Wireguard is generally faster than OpenVPN
|
||||||
|
- WIREGUARD_PRIVATE_KEY=${WIREGUARD_PRIVATE_KEY} #Example IE4cdRxZzoy/HvlLXVLB.2Hy@d=
|
||||||
|
- WIREGUARD_PRESHARED_KEY=${WIREGUARD_PRESHARED_KEY} #Example IE4cdRxZzoy/HvlLXVLB.2Hy@d=
|
||||||
|
- WIREGUARD_ADDRESSES=${WIREGUARD_ADDRESSES} #Example 101.14.14.28/32
|
||||||
|
- SERVER_HOSTNAMES=${SERVER_HOSTNAMES} #Example vpn.airdns.org
|
||||||
|
- SERVER_NAMES=Dalim
|
||||||
|
- SERVER_CITIES=Alblasserdam
|
||||||
|
- FIREWALL_VPN_INPUT_PORTS=${FIREWALL_VPN_INPUT_PORTS} #Example 8926 - Used for port forwarding
|
||||||
|
|
||||||
|
#Qbittorent - torrenting software
|
||||||
|
#
|
||||||
|
#You can also use RuTorrent, Transmisson or Deluge
|
||||||
|
qbittorrent:
|
||||||
|
image: lscr.io/linuxserver/qbittorrent:latest
|
||||||
|
network_mode: "service:gluetun"
|
||||||
|
container_name: qbittorrent
|
||||||
|
labels:
|
||||||
|
- deunhealth.restart.on.unhealthy=true
|
||||||
|
environment:
|
||||||
|
- PUID=${USER_ID}
|
||||||
|
- PGID=${USER_ID}
|
||||||
|
- TZ=${TZ}
|
||||||
|
- WEBUI_PORT=8080
|
||||||
|
healthcheck: # https://github.com/qdm12/gluetun/issues/641#issuecomment-933856220
|
||||||
|
test: "curl -sf https://1.1.1.1/ || exit 1"
|
||||||
|
interval: 1m
|
||||||
|
timeout: 10s
|
||||||
|
retries: 1
|
||||||
|
volumes:
|
||||||
|
- ${BASE_PATH}/qbittorent/config:/config
|
||||||
|
- ${UNRAID_SHARE}:/share
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
#De-unhealth - used to restart qbitorrent if gluetun VPN tunnel ever drops
|
||||||
|
deunhealth:
|
||||||
|
build: .
|
||||||
|
image: qmcgaw/deunhealth
|
||||||
|
container_name: deunhealth
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- LOG_LEVEL=info
|
||||||
|
- HEALTH_SERVER_ADDRESS=127.0.0.1:9999
|
||||||
|
- TZ=${TZ}
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
|
||||||
|
#Tautulli - for plex statistics. Very useful when troubleshooting performance issues
|
||||||
|
tautulli:
|
||||||
|
image: lscr.io/linuxserver/tautulli:latest
|
||||||
|
container_name: tautulli
|
||||||
|
environment:
|
||||||
|
- PUID=${USER_ID}
|
||||||
|
- PGID=${USER_ID}
|
||||||
|
- TZ=${TZ}
|
||||||
|
volumes:
|
||||||
|
- ${BASE_PATH}/tautulli:/config
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
ports:
|
||||||
|
- 8181:8181
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
#Tdarr - to transcode videos from one format to another like x265 or H.265
|
||||||
|
#
|
||||||
|
#This container requires a decent amount of horse power to run but will save space in the long run
|
||||||
|
tdarr:
|
||||||
|
container_name: tdarr
|
||||||
|
image: ghcr.io/haveagitgat/tdarr:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- 8265:8265 # webUI port
|
||||||
|
- 8266:8266 # server port
|
||||||
|
environment:
|
||||||
|
- TZ=${TZ}
|
||||||
|
- PUID=${USER_ID}
|
||||||
|
- PGID=${USER_ID}
|
||||||
|
- UMASK_SET=002
|
||||||
|
- nodeName=ServerNode
|
||||||
|
- serverIP=0.0.0.0
|
||||||
|
- serverPort=8266
|
||||||
|
- webUIPort=8265
|
||||||
|
- internalNode=true
|
||||||
|
- inContainer=true
|
||||||
|
- ffmpegVersion=6
|
||||||
|
volumes:
|
||||||
|
- ${BASE_PATH}/tdarr/server:/app/server
|
||||||
|
- ${BASE_PATH}/tdarr/configs:/app/configs
|
||||||
|
- ${BASE_PATH}/tdarr/logs:/app/logs
|
||||||
|
- ${UNRAID_SHARE}:/media
|
||||||
|
- /transcode_cache:/temp
|
||||||
|
devices:
|
||||||
|
- /dev/dri:/dev/dri #Required for HW transcoding / QuickSync
|
||||||
|
|
||||||
|
#Membarr - to invite users via discord
|
||||||
|
#
|
||||||
|
#Can be configured so that when a plex member invites an outside user to a discord channel they are auto invited to plex
|
||||||
|
#
|
||||||
|
#Feel free to remove this container if you want to manually invite everyone yourself
|
||||||
|
membarr:
|
||||||
|
container_name: membarr
|
||||||
|
image: yoruio/membarr:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- token=${MEMBARR_TOKEN}
|
||||||
|
volumes:
|
||||||
|
- ${BASE_PATH}/membarr/config:/app/app/config
|
||||||
|
|
||||||
|
#Bazarr - for subtitles. Try to use SRT format if you can rather than PGS due to performance issues
|
||||||
|
bazarr:
|
||||||
|
container_name: bazarr
|
||||||
|
image: lscr.io/linuxserver/bazarr:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- PUID=${USER_ID}
|
||||||
|
- PGID=${USER_ID}
|
||||||
|
- TZ=${TZ}
|
||||||
|
volumes:
|
||||||
|
- ${BASE_PATH}/bazarr/config:/config
|
||||||
|
- ${UNRAID_SHARE}:/share
|
||||||
|
ports:
|
||||||
|
- 6767:6767
|
||||||
|
|
||||||
|
#Cross Seed - used to take torrents from one tracker and seed them on another without leeching first. Increases ratio
|
||||||
|
#
|
||||||
|
#This is fairly advanced but can be removed if you don't think you will need it. Some trackers also don't allow this
|
||||||
|
cross-seed:
|
||||||
|
image: ghcr.io/cross-seed/cross-seed
|
||||||
|
container_name: cross-seed
|
||||||
|
environment:
|
||||||
|
- PUID=${USER_ID}
|
||||||
|
- PGID=${USER_ID}
|
||||||
|
ports:
|
||||||
|
- "2468:2468" # you'll need this for daemon mode only
|
||||||
|
volumes:
|
||||||
|
- ${BASE_PATH}/cross-seed/config:/config #To configure you have to manually nano the config file
|
||||||
|
- ${BASE_PATH}/qbittorent/config/qBittorrent/BT_backup:/torrents:ro # your torrent clients .torrent cache, can and should be mounted read-only (e.g. qbit: `BT_Backup` | deluge: `state` | transmission: `transmission/torrents` | rtorrent: session dir from `.rtorrent.rc`)
|
||||||
|
- ${UNRAID_SHARE}/cross-seed/current-cross-seeds:/cross-seeds # A place to temp save current cross seed .torrent files
|
||||||
|
#- ${UNRAID_SHARE}/downloads:/data # OPTIONAL!!! this is dataDir path (for data-based matching) - will need to replicate your torrent client's container path (like Arr's do)
|
||||||
|
command: daemon # this enables the search mode, change to daemon to specifically run the daemon
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue