media-stack/docker-compose.yml

273 lines
10 KiB
YAML
Raw Normal View History

2022-02-19 23:17:15 +01:00
version: "3.9"
services:
2022-04-18 00:59:35 +02:00
traefik:
2022-12-30 23:04:46 +01:00
image: traefik:v2.9
2022-04-18 00:59:35 +02:00
container_name: traefik
restart: always
environment:
- CLOUDFLARE_EMAIL=${CLOUDFLARE_EMAIL}
- CLOUDFLARE_DNS_API_TOKEN=${CLOUDFLARE_DNS_API_TOKEN}
- CLOUDFLARE_ZONE_API_TOKEN=${CLOUDFLARE_ZONE_API_TOKEN}
- LETS_ENCRYPT_EMAIL=${LETS_ENCRYPT_EMAIL}
2022-04-18 00:59:35 +02:00
command:
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
- --entrypoints.web-secure.address=:443
- --entrypoints.web.http.redirections.entryPoint.to=web-secure
- --entrypoints.web.http.redirections.entryPoint.scheme=https
- --entrypoints.web.http.redirections.entrypoint.permanent=true
- --certificatesresolvers.myresolver.acme.dnschallenge=${DNS_CHALLENGE:-true}
- --certificatesresolvers.myresolver.acme.dnschallenge.provider=${DNS_CHALLENGE_PROVIDER:-cloudflare}
- --certificatesresolvers.myresolver.acme.caserver=${LETS_ENCRYPT_CA_SERVER:-https://acme-v02.api.letsencrypt.org/directory}
- --certificatesresolvers.myresolver.acme.email=${LETS_ENCRYPT_EMAIL}
- --certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json
2022-04-18 00:59:35 +02:00
ports:
- "80:80"
- "443:443"
volumes:
- ./letsencrypt:/letsencrypt
2022-04-18 00:59:35 +02:00
- "/var/run/docker.sock:/var/run/docker.sock:ro"
2022-02-19 23:17:15 +01:00
sonarr:
image: lscr.io/linuxserver/sonarr
container_name: sonarr
environment:
- PUID=${USER_ID}
- PGID=${GROUP_ID}
- TZ=${TIMEZONE}
2022-02-19 23:17:15 +01:00
volumes:
- ./sonarr:/config
- ${DATA_ROOT}:/data
restart: always
2022-04-18 00:59:35 +02:00
labels:
- traefik.enable=true
- traefik.http.routers.sonarr.rule=(Host(`${HOSTNAME}`) && PathPrefix(`/sonarr`))
2022-04-18 00:59:35 +02:00
- traefik.http.routers.sonarr.tls=true
- traefik.http.routers.sonarr.tls.certresolver=myresolver
- traefik.http.services.sonarr.loadbalancer.server.port=8989
2023-05-14 06:19:04 +02:00
- homepage.group=Media
- homepage.name=Sonarr
- homepage.icon=sonarr.png
- homepage.href=/sonarr
- homepage.description=Series management
- homepage.weight=0
- homepage.widget.type=sonarr
- homepage.widget.url=http://sonarr:8989/sonarr
- homepage.widget.key=${SONARR_API_KEY}
2022-02-19 23:17:15 +01:00
radarr:
image: lscr.io/linuxserver/radarr
container_name: radarr
environment:
- PUID=${USER_ID}
- PGID=${GROUP_ID}
- TZ=${TIMEZONE}
2022-02-19 23:17:15 +01:00
volumes:
- ./radarr:/config
- ${DATA_ROOT}:/data
restart: always
2022-04-18 00:59:35 +02:00
labels:
- traefik.enable=true
- traefik.http.routers.radarr.rule=(Host(`${HOSTNAME}`) && PathPrefix(`/radarr`))
2022-04-18 00:59:35 +02:00
- traefik.http.routers.radarr.tls=true
- traefik.http.routers.radarr.tls.certresolver=myresolver
2022-04-18 00:59:35 +02:00
- traefik.http.services.radarr.loadbalancer.server.port=7878
2023-05-14 06:19:04 +02:00
- homepage.group=Media
- homepage.name=Radarr
- homepage.icon=radarr.png
- homepage.href=/radarr
- homepage.description=Movies management
- homepage.weight=1
- homepage.widget.type=radarr
- homepage.widget.url=http://radarr:7878/radarr
- homepage.widget.key=${RADARR_API_KEY}
2023-05-25 19:13:39 +02:00
jellyseerr:
image: fallenbagel/jellyseerr:latest
container_name: jellyseerr
environment:
- LOG_LEVEL=debug
- TZ=${TIMEZONE}
volumes:
- ./jellyseerr:/app/config
restart: always
labels:
- traefik.enable=true
2023-05-25 21:08:12 +02:00
- traefik.http.routers.jellyseerr.rule=Host(`jellyseerr.${HOSTNAME}`)
- traefik.http.routers.jellyseerr.tls=true
2023-05-25 19:13:39 +02:00
- traefik.http.routers.jellyseerr.tls.certresolver=myresolver
2023-05-25 21:08:12 +02:00
- traefik.http.services.jellyseerr.loadbalancer.server.port=5055
2023-05-25 19:13:39 +02:00
- homepage.group=Media
- homepage.name=JellySeerr
- homepage.icon=jellyseerr.png
2023-05-25 21:08:12 +02:00
- homepage.href=http://jellyseerr.${HOSTNAME}
- homepage.description=Content Recommendations and Request Management
2023-05-25 19:13:39 +02:00
- homepage.weight=2
- homepage.widget.type=jellyseerr
- homepage.widget.url=http://jellyseerr:5055
- homepage.widget.key=${JELLYSEERR_API_KEY}
2022-02-19 23:17:15 +01:00
prowlarr:
2023-02-17 06:41:26 +01:00
image: lscr.io/linuxserver/prowlarr:latest
2022-02-19 23:17:15 +01:00
container_name: prowlarr
environment:
- PUID=${USER_ID}
- PGID=${GROUP_ID}
- TZ=${TIMEZONE}
2022-02-19 23:17:15 +01:00
volumes:
- ./prowlarr:/config
restart: always
2022-04-18 00:59:35 +02:00
labels:
- traefik.enable=true
- traefik.http.routers.prowlarr.rule=(Host(`${HOSTNAME}`) && PathPrefix(`/prowlarr`))
2022-04-18 00:59:35 +02:00
- traefik.http.routers.prowlarr.tls=true
- traefik.http.routers.prowlarr.tls.certresolver=myresolver
2022-04-18 00:59:35 +02:00
- traefik.http.services.prowlarr.loadbalancer.server.port=9696
2023-05-14 06:19:04 +02:00
- homepage.group=Download
- homepage.name=Prowlarr
- homepage.icon=prowlarr.png
- homepage.href=/prowlarr
- homepage.description=Indexers management
- homepage.weight=4
- homepage.widget.type=prowlarr
- homepage.widget.url=http://prowlarr:9696/prowlarr
- homepage.widget.key=${PROWLARR_API_KEY}
2022-02-19 23:17:15 +01:00
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:libtorrentv1
2022-02-19 23:17:15 +01:00
container_name: qbittorrent
environment:
- PUID=${USER_ID}
- PGID=${GROUP_ID}
- TZ=${TIMEZONE}
- WEBUI_PORT=8080
volumes:
- ./qbittorrent:/config
- ${DOWNLOAD_ROOT}:/data/torrents
restart: always
2022-02-19 23:17:15 +01:00
network_mode: "service:vpn"
depends_on:
vpn:
condition: service_healthy
2022-04-18 00:59:35 +02:00
labels:
- traefik.enable=true
- traefik.http.routers.qbittorrent.rule=(Host(`${HOSTNAME}`) && PathPrefix(`/qbittorrent`))
2022-04-18 00:59:35 +02:00
- traefik.http.routers.qbittorrent.tls=true
- traefik.http.routers.qbittorrent.tls.certresolver=myresolver
2022-04-18 00:59:35 +02:00
- traefik.http.services.qbittorrent.loadbalancer.server.port=8080
- traefik.http.routers.qbittorrent.middlewares=qbittorrent-strip-slash,qbittorrent-stripprefix
# https://github.com/qbittorrent/qBittorrent/issues/5693#issuecomment-552146296
- traefik.http.middlewares.qbittorrent-stripprefix.stripPrefix.prefixes=/qbittorrent
# https://community.traefik.io/t/middleware-to-add-the-if-needed/1895/19
- traefik.http.middlewares.qbittorrent-strip-slash.redirectregex.regex=(^.*\/qbittorrent$$)
- traefik.http.middlewares.qbittorrent-strip-slash.redirectregex.replacement=$$1/
- traefik.http.middlewares.qbittorrent-strip-slash.redirectregex.permanent=false
#- com.centurylinklabs.watchtower.depends-on=/vpn
2023-05-14 06:19:04 +02:00
- homepage.group=Download
- homepage.name=qBittorrent
- homepage.icon=qbittorrent.png
- homepage.href=/qbittorrent
- homepage.description=Bittorrent client
- homepage.weight=5
- homepage.widget.type=qbittorrent
- homepage.widget.url=http://vpn:8080
- homepage.widget.username=${QBITTORRENT_USERNAME}
- homepage.widget.password=${QBITTORRENT_PASSWORD}
2022-02-19 23:17:15 +01:00
vpn:
image: thrnz/docker-wireguard-pia
container_name: vpn
volumes:
- ./pia:/pia
- ./pia-shared:/pia-shared
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- LOC=${PIA_LOCATION}
- USER=${PIA_USER}
- PASS=${PIA_PASS}
- LOCAL_NETWORK=${PIA_LOCAL_NETWORK}
- PORT_FORWARDING=1
- PORT_PERSIST=1
2022-02-19 23:17:15 +01:00
- PORT_SCRIPT=/pia-shared/portupdate-qbittorrent.sh
- EXIT_ON_FATAL=1
2022-02-19 23:17:15 +01:00
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv6.conf.default.disable_ipv6=1
- net.ipv6.conf.all.disable_ipv6=1
- net.ipv6.conf.lo.disable_ipv6=1
healthcheck:
test: ping -c 1 www.google.com || exit 1
interval: 30s
timeout: 10s
retries: 3
restart: always
labels:
# network mode is not supported: https://github.com/containrrr/watchtower/issues/1286#issuecomment-1214291660
- com.centurylinklabs.watchtower.enable=false
2023-02-13 06:42:29 +01:00
jellyfin:
image: lscr.io/linuxserver/jellyfin
container_name: jellyfin
environment:
- PUID=${USER_ID}
- PGID=${GROUP_ID}
- TZ=${TIMEZONE}
- JELLYFIN_PublishedServerUrl=${HOSTNAME}/jellyfin
volumes:
- ./jellyfin:/config
- ${DATA_ROOT}:/data
ports:
- "7359:7359/udp"
- "1900:1900/udp"
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
- /dev/dri/card0:/dev/dri/card0
restart: always
labels:
- traefik.enable=true
- traefik.http.routers.jellyfin.rule=(Host(`${HOSTNAME}`) && PathPrefix(`/jellyfin`))
2023-02-13 06:42:29 +01:00
- traefik.http.routers.jellyfin.tls=true
- traefik.http.routers.jellyfin.tls.certresolver=myresolver
- traefik.http.services.jellyfin.loadbalancer.server.port=8096
2023-05-14 06:19:04 +02:00
- homepage.group=Media
- homepage.name=Jellyfin
- homepage.icon=jellyfin.png
- homepage.href=/jellyfin
- homepage.description=Media server
- homepage.weight=3
- homepage.widget.type=jellyfin
- homepage.widget.url=http://jellyfin:8096/jellyfin
- homepage.widget.key=${JELLYFIN_API_KEY}
homepage:
image: ghcr.io/benphelps/homepage:latest
container_name: homepage
2022-02-19 23:17:15 +01:00
environment:
2023-05-14 06:19:04 +02:00
- HOMEPAGE_VAR_TITLE=${HOMEPAGE_VAR_TITLE}
- HOMEPAGE_VAR_SEARCH_PROVIDER=${HOMEPAGE_VAR_SEARCH_PROVIDER}
- HOMEPAGE_VAR_HEADER_STYLE=${HOMEPAGE_VAR_HEADER_STYLE}
- HOMEPAGE_VAR_WEATHER_CITY=${HOMEPAGE_VAR_WEATHER_CITY}
- HOMEPAGE_VAR_WEATHER_LAT=${HOMEPAGE_VAR_WEATHER_LAT}
- HOMEPAGE_VAR_WEATHER_LONG=${HOMEPAGE_VAR_WEATHER_LONG}
- HOMEPAGE_VAR_WEATHER_TIME=${TIMEZONE}
- HOMEPAGE_VAR_WEATHER_UNIT=${HOMEPAGE_VAR_WEATHER_UNIT}
2022-02-19 23:17:15 +01:00
volumes:
2023-05-14 06:19:04 +02:00
- ./homepage:/app/config
- /var/run/docker.sock:/var/run/docker.sock:ro
- ${DATA_ROOT}:/data
restart: always
2023-05-14 06:19:04 +02:00
command: [sh, -c, "cp -n /app/config/tpl/*.yaml /app/config && node server.js"]
2022-04-18 00:59:35 +02:00
labels:
- traefik.enable=true
2023-05-14 06:19:04 +02:00
- traefik.http.routers.homepage.rule=(Host(`${HOSTNAME}`) && PathPrefix(`/`))
- traefik.http.routers.homepage.tls=true
- traefik.http.routers.homepage.tls.certresolver=myresolver
- traefik.http.services.homepage.loadbalancer.server.port=3000
2022-08-24 04:16:33 +02:00
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: always
environment:
- WATCHTOWER_CLEANUP=true
2022-08-24 04:16:33 +02:00
volumes:
- /var/run/docker.sock:/var/run/docker.sock
2022-07-23 21:41:36 +02:00
networks:
default:
name: docker-compose-nas