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
|
2022-09-26 17:15:24 +02:00
|
|
|
restart: always
|
2022-12-31 01:05:22 +01:00
|
|
|
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
|
2023-05-13 21:49:14 +02:00
|
|
|
- --certificatesresolvers.myresolver.acme.dnschallenge=${DNS_CHALLENGE:-true}
|
2023-03-26 23:45:47 +02:00
|
|
|
- --certificatesresolvers.myresolver.acme.dnschallenge.provider=${DNS_CHALLENGE_PROVIDER:-cloudflare}
|
2023-05-13 21:49:14 +02:00
|
|
|
- --certificatesresolvers.myresolver.acme.caserver=${LETS_ENCRYPT_CA_SERVER:-https://acme-v02.api.letsencrypt.org/directory}
|
2022-12-31 01:05:22 +01:00
|
|
|
- --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:
|
2022-12-31 01:05:22 +01:00
|
|
|
- ./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}
|
2023-03-26 23:17:42 +02:00
|
|
|
- TZ=${TIMEZONE}
|
2022-02-19 23:17:15 +01:00
|
|
|
volumes:
|
|
|
|
- ./sonarr:/config
|
2022-04-16 23:53:29 +02:00
|
|
|
- ${DATA_ROOT}:/data
|
2022-09-26 17:15:24 +02:00
|
|
|
restart: always
|
2022-04-18 00:59:35 +02:00
|
|
|
labels:
|
|
|
|
- traefik.enable=true
|
2023-03-26 23:37:11 +02:00
|
|
|
- traefik.http.routers.sonarr.rule=(Host(`${HOSTNAME}`) && PathPrefix(`/sonarr`))
|
2022-04-18 00:59:35 +02:00
|
|
|
- traefik.http.routers.sonarr.tls=true
|
2022-12-31 01:05:22 +01:00
|
|
|
- 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}
|
2023-03-26 23:17:42 +02:00
|
|
|
- TZ=${TIMEZONE}
|
2022-02-19 23:17:15 +01:00
|
|
|
volumes:
|
|
|
|
- ./radarr:/config
|
2022-04-16 23:53:29 +02:00
|
|
|
- ${DATA_ROOT}:/data
|
2022-09-26 17:15:24 +02:00
|
|
|
restart: always
|
2022-04-18 00:59:35 +02:00
|
|
|
labels:
|
|
|
|
- traefik.enable=true
|
2023-03-26 23:37:11 +02:00
|
|
|
- traefik.http.routers.radarr.rule=(Host(`${HOSTNAME}`) && PathPrefix(`/radarr`))
|
2022-04-18 00:59:35 +02:00
|
|
|
- traefik.http.routers.radarr.tls=true
|
2022-12-31 01:05:22 +01:00
|
|
|
- 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}
|
2023-03-26 23:17:42 +02:00
|
|
|
- TZ=${TIMEZONE}
|
2022-02-19 23:17:15 +01:00
|
|
|
volumes:
|
|
|
|
- ./prowlarr:/config
|
2022-09-26 17:15:24 +02:00
|
|
|
restart: always
|
2022-04-18 00:59:35 +02:00
|
|
|
labels:
|
|
|
|
- traefik.enable=true
|
2023-03-26 23:37:11 +02:00
|
|
|
- traefik.http.routers.prowlarr.rule=(Host(`${HOSTNAME}`) && PathPrefix(`/prowlarr`))
|
2022-04-18 00:59:35 +02:00
|
|
|
- traefik.http.routers.prowlarr.tls=true
|
2022-12-31 01:05:22 +01:00
|
|
|
- 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:
|
2023-02-16 05:15:12 +01:00
|
|
|
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
|
2022-04-16 23:53:29 +02:00
|
|
|
- ${DOWNLOAD_ROOT}:/data/torrents
|
2022-09-26 17:15:24 +02:00
|
|
|
restart: always
|
2022-02-19 23:17:15 +01:00
|
|
|
network_mode: "service:vpn"
|
|
|
|
depends_on:
|
2023-05-13 21:00:57 +02:00
|
|
|
vpn:
|
|
|
|
condition: service_healthy
|
2022-04-18 00:59:35 +02:00
|
|
|
labels:
|
|
|
|
- traefik.enable=true
|
2023-03-26 23:37:11 +02:00
|
|
|
- traefik.http.routers.qbittorrent.rule=(Host(`${HOSTNAME}`) && PathPrefix(`/qbittorrent`))
|
2022-04-18 00:59:35 +02:00
|
|
|
- traefik.http.routers.qbittorrent.tls=true
|
2022-12-31 01:05:22 +01:00
|
|
|
- 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
|
2022-09-26 17:15:24 +02:00
|
|
|
#- 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
|
2023-05-25 22:44:43 +02:00
|
|
|
- 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
|
2023-03-26 22:54:01 +02:00
|
|
|
- PORT_PERSIST=1
|
2022-02-19 23:17:15 +01:00
|
|
|
- PORT_SCRIPT=/pia-shared/portupdate-qbittorrent.sh
|
2023-03-26 22:54:01 +02:00
|
|
|
- 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
|
2022-09-26 17:15:24 +02:00
|
|
|
restart: always
|
2022-09-05 06:13:53 +02:00
|
|
|
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
|
2023-03-26 23:37:11 +02:00
|
|
|
- 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
|
2022-09-26 17:15:24 +02:00
|
|
|
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
|
2022-09-26 17:15:24 +02:00
|
|
|
restart: always
|
2022-08-31 16:33:42 +02:00
|
|
|
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
|