Skip to content

Instantly share code, notes, and snippets.

@sudo-battlekafer
Last active December 11, 2021 16:26
Show Gist options
  • Save sudo-battlekafer/95852818f3e6b20adda13c0056d32a2f to your computer and use it in GitHub Desktop.
Save sudo-battlekafer/95852818f3e6b20adda13c0056d32a2f to your computer and use it in GitHub Desktop.
docker-compose for various
# Your timezone, https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
TZ=America/Chicago
# UNIX PUID and PGID, find with: id $USER
PUID=1001
PGID=1001
# The directory where data and configuration will be stored Example /docker or /data.
ROOT=/data
# CONTAINER STUFF
#PLEX
#get claim code at https://www.plex.tv/claim/
PLEX_CLAIM_CODE=claim-111111111111111111
PLEX_URL=https://plex.DNS.FQDN:443
PLEXHOSTNAME=plex.DNS.FQDN
TRANSMISSIONHOSTNAME=transmission.DNS.FQDN
REQUESTHOSTNAME=overseerr.DNS.FQDN
RADARRHOSTNAME=radarr.DNS.FQDN
SONARRHOSTNAME=sonarr.DNS.FQDN
BAZARRHOSTNAME=bazarr.DNS.FQDN
NZBHOSTNAME=nzb.DNS.FQDN
KUMAHOSTNAME=kuma.DNS.FQDN
LIDARRHOSTNAME=lidarr.DNS.FQDN
#OPENVPN
# provider list and options
# https://haugene.github.io/docker-transmission-openvpn/
TRANSVPN_PROVIDER=NORDVPN
TRANSVPN_USERNAME=ffjklsdfjkldsjfkldsjfklsdjf
TRANSVPN_PASSWORD=fjkdlfjdklsfjkldsjfkldsjfkl
NORD_COUNTRY=PO
NORD_CATEGORY=P2P
version: "3.4"
services:
# for PC minecraft
minecraft-java:
image: itzg/minecraft-server
ports:
- 25565:25565
volumes:
- ${ROOT}/config/minecraft-java:/data
environment:
- PUID=${PUID} # default user id, defined in .env
- PGID=${PGID} # default group id, defined in .env
- SERVER_NAME="mytest"
- SERVER_MODE="creative"
- EULA="TRUE"
restart: always
# for mobile/console minecraft
minecraft-bedrock:
image: itzg/minecraft-bedrock-server
ports:
- 19132:19132/udp
volumes:
- ${ROOT}/config/minecraft-bedrock:/data
environment:
- PUID=${PUID} # default user id, defined in .env
- PGID=${PGID} # default group id, defined in .env
- SERVER_NAME="mytest"
- SERVER_MODE="creative"
- EULA="TRUE"
restart: always
version: "3.4"
services:
plex:
image: plexinc/pms-docker:latest
container_name: plex
environment:
- TZ=${TZ} # timezone, defined in .env
# # get claim at https://www.plex.tv/claim/
- PLEX_CLAIM=${PLEX_CLAIM_CODE} # defined in .env
- ADVERTISE_IP=${PLEX_URL} # defined in .env
- PUID=${PUID} # default user id, defined in .env
- PGID=${PGID} # default group id, defined in .env
- VERSION=docker
volumes:
- ${ROOT}/config/plex/config:/config
- ${ROOT}/transcode:/transcode #trancode mount directory
- ${ROOT}/media/movies:/data/movies # movies folder
- ${ROOT}/media/tvshows:/data/tv # tv shows folder
- ${ROOT}/media/anime:/data/anime # tv shows folder
- ${ROOT}/media/music:/music # music folder
hostname: ${PLEXHOSTNAME} # defined in .env
ports:
- 32400:32400/tcp
- 32400:32400/udp
- 3005:3005/tcp
- 8324:8324/tcp
- 32469:32469/tcp
- 1900:1900/udp
- 32410:32410/udp
- 32412:32412/udp
- 32413:32413/udp
- 32414:32414/udp
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.plex.rule=Host(`${PLEXHOSTNAME}`)"
- "traefik.http.routers.plex.entrypoints=websecure"
- "traefik.http.routers.plex.tls.certresolver=mydnschallenge"
- "traefik.http.services.plex.loadbalancer.server.port=32400"
# tv series management
sonarr:
container_name: sonarr
image: ghcr.io/linuxserver/sonarr:latest
restart: unless-stopped
network_mode: host
environment:
- PUID=${PUID} # default user id, defined in .env
- PGID=${PGID} # default group id, defined in .env
- TZ=${TZ} # timezone, defined in .env
volumes:
- /etc/localtime:/etc/localtime:ro
- ${ROOT}/config/sonarr:/config # config files
- ${ROOT}/media/tvshows:/tv # tv shows folder
- ${ROOT}/downloads:/downloads # download folder
- ${ROOT}/media/anime:/anime # anime shows folder
labels:
- "traefik.enable=true"
- "traefik.http.routers.sonarr.rule=Host(`${SONARRHOSTNAME}`)"
- "traefik.http.routers.sonarr.entrypoints=websecure"
- "traefik.http.routers.sonarr.tls.certresolver=mydnschallenge"
- "traefik.http.services.sonarr.loadbalancer.server.port=8989"
# movie management
radarr:
container_name: radarr
image: ghcr.io/linuxserver/radarr:latest
restart: unless-stopped
network_mode: host
environment:
- PUID=${PUID} # default user id, defined in .env
- PGID=${PGID} # default group id, defined in .env
- TZ=${TZ} # timezone, defined in .env
volumes:
- /etc/localtime:/etc/localtime:ro
- ${ROOT}/config/radarr:/config # config files
- ${ROOT}/media/movies:/movies # movies folder
- ${ROOT}/downloads:/downloads # download folder
- ${ROOT}/media/anime:/anime # anime shows folder
labels:
- "traefik.enable=true"
- "traefik.http.routers.radarr.rule=Host(`${RADARRHOSTNAME}`)"
- "traefik.http.routers.radarr.entrypoints=websecure"
- "traefik.http.routers.radarr.tls.certresolver=mydnschallenge"
- "traefik.http.services.radarr.loadbalancer.server.port=7878"
# subtitle management
bazarr:
container_name: bazarr
image: ghcr.io/linuxserver/bazarr:latest
restart: unless-stopped
network_mode: host
environment:
- PUID=${PUID} # default user id, defined in .env
- PGID=${PGID} # default group id, defined in .env
- TZ=${TZ} # timezone, defined in .env
volumes:
- ${ROOT}/config/bazarr:/config # config files
- ${ROOT}/media/movies:/movies # movies folder
- ${ROOT}/media/tvshows:/tv # tv shows folder
- ${ROOT}/media/anime:/anime # anime shows folder
# ports:
# - 6767:6767
labels:
- "traefik.enable=true"
- "traefik.http.routers.bazarr.rule=Host(`${BAZARRHOSTNAME}
- "traefik.http.routers.bazarr.tls.certresolver=mydnschallenge"
- "traefik.http.services.bazarr.loadbalancer.server.port=6767"
# music mgmt
lidarr:
image: lscr.io/linuxserver/lidarr
container_name: lidarr
environment:
- PUID=${PUID} # default user id, defined in .env
- PGID=${PGID} # default group id, defined in .env
- TZ=${TZ} # timezone, defined in .env
volumes:
- /etc/localtime:/etc/localtime:ro
- ${ROOT}/config/lidarr:/config # config files
- ${ROOT}/media/music:/music # music root folder
- ${ROOT}/downloads:/downloads # download folder
ports:
- 8686:8686
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.lidarr.rule=Host(`${LIDARRHOSTNAME}`)"
- "traefik.http.routers.lidarr.entrypoints=websecure"
- "traefik.http.routers.lidarr.tls.certresolver=mydnschallenge"
- "traefik.http.services.lidarr.loadbalancer.server.port=8686"
# openvpn torrent client
transmission:
cap_add:
- NET_ADMIN
volumes:
- '${ROOT}/downloads:/downloads'
- '${ROOT}/config/transmission/transmission-home:/data/transmission-home'
# combustion UI dark mode
# download at: https://github.com/SebDanielsson/dark-combustion
- '${ROOT}/config/transmission/main.77f9cffc.css:/opt/transmission-ui/combustion-release/main.77f9cffc.css'
restart: unless-stopped
container_name: transmission
environment:
- PUID=${PUID} # default user id, defined in .env
- PGID=${PGID} # default group id, defined in .env
- TZ=${TZ} # timezone, defined in .env
# provider list and options
# https://haugene.github.io/docker-transmission-openvpn/
- OPENVPN_PROVIDER=${TRANSVPN_PROVIDER} # defined in .env
# - OPENVPN_CONFIG=romania
- OPENVPN_USERNAME=${TRANSVPN_USERNAME} # defined in .env
- OPENVPN_PASSWORD=${TRANSVPN_PASSWORD} # defined in .env
- NORDVPN_COUNTRY=${NORD_COUNTRY} # defined in .env
- NORDVPN_CATEGORY=${NORD_CATEGORY} # defined in .env
# optional use of combustion UI
- TRANSMISSION_WEB_UI=combustion
- TRANSMISSION_DOWNLOAD_DIR=/downloads/completed
- TRANSMISSION_INCOMPLETE_DIR=/downloads/incomplete
- TRANSMISSION_WATCH_DIR=/downloads/torrents
- LOCAL_NETWORK=10.11.0.0/16
- DISABLE_PORT_UPDATER=true
- OVERRIDE_DNS_1=1.1.1.1
- OVERRIDE_DNS_2=1.0.0.1
logging:
driver: json-file
options:
max-size: 10m
ports:
- '9091:9091'
image: haugene/transmission-openvpn
labels:
- "traefik.enable=true"
- "traefik.http.routers.transmission.rule=Host(`${TRANSMISSIONHOSTNAME}`)"
- "traefik.http.routers.transmission.entrypoints=websecure"
- "traefik.http.routers.transmission.tls.certresolver=mydnschallenge"
- "traefik.http.services.transmission.loadbalancer.server.port=9091"
nzbget:
container_name: nzbget
image: ghcr.io/linuxserver/nzbget:latest
restart: unless-stopped
network_mode: host
environment:
- PUID=${PUID} # default user id, defined in .env
- PGID=${PGID} # default group id, defined in .env
- TZ=${TZ} # timezone, defined in .env
volumes:
- ${ROOT}/downloads:/downloads # download folder
- ${ROOT}/config/nzbget:/config # config files
labels:
- "traefik.enable=true"
- "traefik.http.routers.nzb.rule=Host(`${NZBHOSTNAME}`)"
- "traefik.http.routers.nzb.entrypoints=websecure"
- "traefik.http.routers.nzb.tls.certresolver=mydnschallenge"
- "traefik.http.services.nzb.loadbalancer.server.port=6789"
uptime-kuma:
image: louislam/uptime-kuma
container_name: uptime-kuma
volumes:
- ${ROOT}/config/uptime-kuma:/app/data
ports:
- 3001:3001
labels:
- "traefik.enable=true"
- "traefik.http.routers.uptime-kuma.rule=Host(`${KUMAHOSTNAME}`)"
- "traefik.http.routers.uptime-kuma.entrypoints=websecure"
- "traefik.http.routers.uptime-kuma.tls.certresolver=mydnschallenge"
- "traefik.http.services.uptime-kuma.loadbalancer.server.port=9696"
# not routed through traefik
smtp:
image: namshi/smtp
container_name: smtp_relay
restart: always
ports:
- "25:25"
environment:
# change this to your subnets (ex: :192.168.10/24)
# must include the :
- RELAY_NETWORKS=:10.11.2.0/24:10.11.3.0/24
# this can be used with other providers, I just chose gmail
# # To act as a Gmail relay
- GMAIL_USER=<gmail user, no domain>
- GMAIL_PASSWORD=<gmail password>
# # set this to any value to disable ipv6
- DISABLE_IPV6=true
# indexer mgmt
prowlarr:
image: ghcr.io/linuxserver/prowlarr:develop
container_name: prowlarr
environment:
- PUID=${PUID} # default user id, defined in .env
- PGID=${PGID} # default group id, defined in .env
- TZ=${TZ} # timezone, defined in .env
volumes:
- ${ROOT}/config/prowlarr:/config
ports:
- 9696:9696
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.prowlarr.rule=Host(`${PROWLARRHOSTNAME}`)"
- "traefik.http.routers.prowlarr.entrypoints=websecure"
- "traefik.http.routers.prowlarr.tls.certresolver=mydnschallenge"
- "traefik.http.services.prowlarr.loadbalancer.server.port=9696"
# to keep the images updated
# no web interface, not routed through traefik
watchtower:
container_name: watchtower
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
ports:
- 8082:8080
command: --interval 10 --http-api-metrics --http-api-token demotoken --debug radarr sonarr prowlarr nzbget trannsmission bazarr nzbhydra2 uptime-kuma
overseerr:
image: lscr.io/linuxserver/overseerr
container_name: overseerr
environment:
- LOG_LEVEL=debug
- PUID=${PUID} # default user id, defined in .env
- PGID=${PGID} # default group id, defined in .env
- TZ=${TZ} # timezone, defined in .env
ports:
- 5055:5055
volumes:
- ${ROOT}/config/overseer:/config
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.overseerr.rule=Host(`${REQUESTHOSTNAME}`)"
- "traefik.http.routers.overseerr.entrypoints=websecure"
- "traefik.http.routers.overseerr.tls.certresolver=mydnschallenge"
- "traefik.http.services.overseerr.loadbalancer.server.port=5055"
traefik:
restart: always
image: traefik
container_name: traefik
read_only: true
ports:
- "80:80"
- "443:443"
# - "8080:8080" # traefik wed interface - optional
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ${ROOT}/config/traefik/traefik.yaml:/traefik.yaml:ro
# - ${ROOT}/config/traefik/data/traefik.yaml:/traefik.yaml:ro
- ${ROOT}/config/traefik/etc/traefik:/etc/traefik/
- ${ROOT}/config/traefik/log:/var/log/traefik/
- ${ROOT}/config/traefik/config.yml:/config.yml:ro
# - ${ROOT}/config/traefik/data/acme.json:/acme.json
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment