diff --git a/docker/stacks/media/docker-compose.yaml b/docker/stacks/media/docker-compose.yaml new file mode 100644 index 0000000..5236bd4 --- /dev/null +++ b/docker/stacks/media/docker-compose.yaml @@ -0,0 +1,146 @@ +services: + # Torrent client + qbittorrent: + image: linuxserver/qbittorrent + restart: unless-stopped + environment: + - PUID=${PUID} + - PGID=${PGID} + - TZ=${TZ} + - UMASK=002 + - WEBUI_PORT=8114 + volumes: + - ${MEDIA_PATH}:/media + - ${SERVICE_DATA_ROOT_PATH}/qbittorrent/config:/config + ports: + - 8114:8114 + - 23312:23312 + networks: + - traefik + - sonarr + - radarr + labels: + - "traefik.enable=true" + - "traefik.http.routers.qbittorrent-service.rule=Host(`${QBITTORRENT_SERVICE_DOMAIN}`) && PathPrefix(`/api/v2`)" + - "traefik.http.routers.qbittorrent-service.service=qbittorrent-service" + - "traefik.http.services.qbittorrent-service.loadbalancer.server.port=8114" + - "traefik.http.routers.qbittorrent-service.entrypoints=websecure" + - "traefik.http.routers.qbittorrent-service.tls.certresolver=myresolver" + - "traefik.http.middlewares.qbittorrent-service-auth.basicauth.users=${QBITTORRENT_BASIC_AUTH}" + - "traefik.http.routers.qbittorrent-service.middlewares=qbittorrent-service-auth@docker" + - "traefik.docker.network=traefik" + + # Tracker indexer + prowlarr: + image: linuxserver/prowlarr:latest + restart: unless-stopped + environment: + - PUID=${PUID} + - PGID=${PGID} + - TZ=${TZ} + volumes: + - ${SERVICE_DATA_ROOT_PATH}/prowlarr/config:/config + ports: + - 9696:9696 + networks: + - sonarr + - radarr + + # Series manager + sonarr: + image: linuxserver/sonarr:latest + restart: unless-stopped + environment: + - PUID=${PUID} + - PGID=${PGID} + - TZ=${TZ} + - UMASK=002 + volumes: + - ${SERVICE_DATA_ROOT_PATH}/sonarr/config:/config + - ${MEDIA_PATH}:/media + ports: + - 8989:8989 + depends_on: + - sonarr-db + networks: + - traefik + - sonarr + labels: + - "traefik.enable=true" + - "traefik.http.routers.sonarr-service.rule=Host(`${SONARR_SERVICE_DOMAIN}`) && PathPrefix(`/api/v3`)" + - "traefik.http.routers.sonarr-service.entrypoints=websecure" + - "traefik.http.routers.sonarr-service.tls.certresolver=myresolver" + - "traefik.http.middlewares.sonarr-service-auth.basicauth.users=${SONARR_BASIC_AUTH}" + - "traefik.http.routers.sonarr-service.middlewares=sonarr-service-auth@docker" + - "traefik.docker.network=traefik" + + sonarr-db: + image: postgres:14 + restart: unless-stopped + user: ${PUID}:${PGID} + environment: + - PUID=${PUID} + - PGID=${PGID} + - TZ=${TZ} + - UMASK=002 + - POSTGRES_DB=${SONARR_DB_NAME} + - POSTGRES_USER=${SONARR_DB_USER} + - POSTGRES_PASSWORD=${SONARR_DB_PASSWORD} + volumes: + - ${SERVICE_DATA_ROOT_PATH}/sonarr/database:/var/lib/postgresql/data + networks: + - sonarr + + # Movies manager + radarr: + image: linuxserver/radarr:latest + restart: unless-stopped + environment: + - PUID=${PUID} + - PGID=${PGID} + - TZ=${TZ} + - UMASK=002 + volumes: + - ${SERVICE_DATA_ROOT_PATH}/radarr/config:/config + - ${MEDIA_PATH}:/media + ports: + - 7878:7878 + depends_on: + - radarr-db + networks: + - traefik + - radarr + labels: + - "traefik.enable=true" + - "traefik.http.routers.radarr-service.rule=Host(`${RADARR_SERVICE_DOMAIN}`) && PathPrefix(`/api/v3`)" + - "traefik.http.routers.radarr-service.entrypoints=websecure" + - "traefik.http.routers.radarr-service.tls.certresolver=myresolver" + - "traefik.http.middlewares.radarr-service-auth.basicauth.users=${RADARR_BASIC_AUTH}" + - "traefik.http.routers.radarr-service.middlewares=radarr-service-auth@docker" + - "traefik.docker.network=traefik" + + radarr-db: + image: postgres:14 + restart: unless-stopped + user: ${PUID}:${PGID} + environment: + - PUID=${PUID} + - PGID=${PGID} + - TZ=${TZ} + - UMASK=002 + - POSTGRES_DB=${RADARR_DB_NAME} + - POSTGRES_USER=${RADARR_DB_USER} + - POSTGRES_PASSWORD=${RADARR_DB_PASSWORD} + volumes: + - ${SERVICE_DATA_ROOT_PATH}/radarr/database:/var/lib/postgresql/data + networks: + - radarr + +networks: + radarr: + name: radarr + sonarr: + name: sonarr + traefik: + name: traefik + external: true diff --git a/docker/stacks/media/stack.env b/docker/stacks/media/stack.env new file mode 100644 index 0000000..8491ae5 --- /dev/null +++ b/docker/stacks/media/stack.env @@ -0,0 +1,30 @@ +# Paths +MEDIA_PATH= +SERVICE_DATA_ROOT_PATH= + +# User/Group IDs +PUID=1027 +PGID=100 +TZ=Europe/Kyiv + +# Service Domains +QBITTORRENT_SERVICE_DOMAIN= +SONARR_SERVICE_DOMAIN= +SONARR_DOMAIN= +RADARR_SERVICE_DOMAIN= + +# Database Configuration +# Sonarr Database +SONARR_DB_USER=sonarr +SONARR_DB_NAME=sonarr-main +SONARR_DB_PASSWORD= + +# Radarr Database +RADARR_DB_USER=radarr +RADARR_DB_NAME=radarr-main +RADARR_DB_PASSWORD= + +# Basic Auth for API access (format: user:hashedpassword) +QBITTORRENT_BASIC_AUTH= +SONARR_BASIC_AUTH= +RADARR_BASIC_AUTH=