Skip to content

Instantly share code, notes, and snippets.

@Sigri44
Forked from anonymous/docker-compose.yml
Last active July 27, 2022 15:17
Show Gist options
  • Save Sigri44/582f825f80b1f60a44eac8d342a7790b to your computer and use it in GitHub Desktop.
Save Sigri44/582f825f80b1f60a44eac8d342a7790b to your computer and use it in GitHub Desktop.
docker homelab media stack
# My homelab-media-docker-stack
#
# Services
# Nginx-Proxy - Proxy server
# Organizr - Dashboard
# Plex - Media player
# Tautulli - Plex statistics
# Ombi - Allows users to request shows/movies to add to Plex/Sonarr/Radarr
# Sonarr - Searches for TV shows to download
# Radarr - Searches for movies to download
# Lidarr - Searches for music to download
# Jackett - Allows Sonarr/Radarr to search torrent trackers
# Deluge - Torrent downloader (uses nginx container as frontend proxy)
# Flaresolverr - Bypass Cloudflare protection
# VPN - VPN client to route torrent (deluge) traffic through
version: "3.4"
services:
vpn:
container_name: vpn
image: dperson/openvpn-client:latest
cap_add:
- net_admin # required to modify network interfaces
restart: unless-stopped
volumes:
- /dev/net:/dev/net:z # tun device
- ${ROOT}/config/vpn:/vpn # OpenVPN configuration
security_opt:
- label:disable
ports:
- 8112:8112 # port for deluge web UI to be reachable from local network
command: '-f "" -r 192.168.1.0/24' # enable firewall and route local network traffic
deluge:
container_name: deluge
image: linuxserver/deluge:latest
restart: unless-stopped
network_mode: service:vpn # run on the vpn network
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 # downloads folder
- ${ROOT}/config/deluge:/config # config files
jackett:
container_name: jackett
image: linuxserver/jackett: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}/downloads/torrent-blackhole:/downloads # place where to put .torrent files for manual download
- ${ROOT}/config/jackett:/config # config files
sonarr:
container_name: sonarr
image: 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}/complete/tv:/tv # tv shows folder
- ${ROOT}/downloads:/downloads # download folder
radarr:
container_name: radarr
image: 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}/complete/movies:/movies # movies folder
- ${ROOT}/downloads:/downloads # download folder
lidarr:
container_name: lidarr
image: linuxserver/lidarr: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/lidarr:/config # config files
- ${ROOT}/complete/music:/music # movies folder
- ${ROOT}/downloads:/downloads # download folder
plex-server:
container_name: plex-server
image: plexinc/pms-docker:latest
restart: unless-stopped
environment:
- TZ=${TZ} # timezone, defined in .env
network_mode: host
volumes:
- ${ROOT}/config/plex/db:/config # plex database
- ${ROOT}/config/plex/transcode:/transcode # temp transcoded files
- ${ROOT}/complete:/data # media library
tautulli:
image: tautulli/tautulli:latest
container_name: tautulli
restart: unless-stopped
network_mode: host
depends_on:
- plex-server
volumes:
- ${ROOT}/config/tautulli/config:/config
- ${ROOT}/config/plex/db/Library/Application\ Support/Plex\ Media\ Server/Logs:/logs:ro
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
bazarr:
container_name: bazarr
image: linuxserver/bazarr
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
- UMASK_SET=022 #optional
volumes:
- ${ROOT}/config/bazarr:/config # config files
- ${ROOT}/complete/movies:/movies # movies folder
- ${ROOT}/complete/tv:/tv # tv shows folder
flaresolverr:
container_name: flaresolverr
image: ghcr.io/flaresolverr/flaresolverr
restart: unless-stopped
network_mode: host
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- LOG_LEVEL=info
organizr:
container_name: organizr
hostname: organizr
image: organizr/organizr
restart: unless-stopped
ports:
- 9292:80
volumes:
- ${ROOT}/config/organizr:/config
environment:
- fpm=true
- branch=v2-master
- PUID=${PUID} # default user id, defined in .env
- PGID=${PGID} # default group id, defined in .env
- TZ=${TZ} # timezone, defined in .env
restart: always
npm-app:
image: jc21/nginx-proxy-manager:latest
container_name: npm-app
restart: always
ports:
- 80:80
- 81:81
- 443:443
volumes:
- ${ROOT}/config/npm/config.json:/app/config/production.json
- ${ROOT}/config/npm/data:/data
- ${ROOT}/config/npm/letsencrypt:/etc/letsencrypt
npm-db:
image: mariadb
container_name: npm-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- ${ROOT}/config/npm/db/mysql:/var/lib/mysql
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment