diff --git a/README.md b/README.md index 17e0172..13d5233 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ -# stremio-addons-compose-template -A template compose.yaml to self host various Stremio addons and utilities +# Docker Compose VPS Template + +A template compose.yaml to self host various applications on a server/VPS using Docker Compose with Traefik as a reverse proxy. You can use the Always Free resources of Oracle to set this up. Here is a [set up guide](https://guides.viren070.me/oracle) I made for that. @@ -10,15 +11,16 @@ It will go through setting up an Oracle VPS for free, installing Docker, and the If you know what you're doing, then this is the general guide: 1. Ensure docker is installed per https://get.docker.com -2. Download and run the installation script +2. Clone this repository and cd into it: ``` - curl https://raw.githubusercontent.com/Viren070/stremio-addons-docker-compose-template/refs/heads/main/install.sh | bash + git clone https://github.com/Viren070/docker-compose-vps-template.git docker-apps + cd docker-apps ``` 3. Open the .env file using: ``` nano .env ``` -4. Fill in all the values, making sure to read all the comments. +4. Fill in all the values, making sure to read all the comments, and filling in any other files that are mentioned. 5. Run this command: ``` docker compose up -d diff --git a/auto/compose.addon-manager.yaml b/auto/compose.addon-manager.yaml deleted file mode 100644 index cc966a4..0000000 --- a/auto/compose.addon-manager.yaml +++ /dev/null @@ -1,15 +0,0 @@ -services: - addon-manager: - image: reddravenn/stremio-addon-manager:latest - container_name: addon-manager - restart: unless-stopped - expose: - - 80 - labels: - - "traefik.enable=true" - - "traefik.http.routers.addon-manager.rule=Host(`${ADDON_MANAGER_HOSTNAME}`)" - - "traefik.http.routers.addon-manager.entrypoints=websecure" - - "traefik.http.routers.addon-manager.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=Stremio Addon Manager" - - "flame.url=https://${ADDON_MANAGER_HOSTNAME}" \ No newline at end of file diff --git a/auto/compose.aiostreams.yaml b/auto/compose.aiostreams.yaml deleted file mode 100644 index 0ee32cd..0000000 --- a/auto/compose.aiostreams.yaml +++ /dev/null @@ -1,39 +0,0 @@ -services: - aiostreams: - image: ghcr.io/viren070/aiostreams:dev - container_name: aiostreams - restart: unless-stopped - expose: - - 3000 - environment: - - ADDON_PROXY=${PROXY_URL:-} # only route requests to any strem.fun subdomain through the proxy - - ADDON_PROXY_CONFIG=*:false,*.strem.fun:true # only route requests to any strem.fun subdomain through the proxy - - EASYNEWS_PLUS_URL=${AIOSTREAMS_EASYNEWS_PLUS_URL:-} - - MEDIAFUSION_URL=${AIOSTREAMS_MEDIAFUSION_URL:-} - - MEDIAFUSION_API_PASSWORD=${MEDIAFUSION_API_PASSWORD:-} - - MEDIAFUSION_CONFIG_TIMEOUT=3000 - - COMET_URL=${AIOSTREAMS_COMET_URL:-} - - FORCE_COMET_HOSTNAME=${COMET_HOSTNAME:-} - - COMET_INDEXERS=${COMET_INDEXERS:-} - - JACKETTIO_URL=${AIOSTREAMS_JACKETTIO_URL:-} - - STREMIO_JACKETT_URL=${AIOSTREAMS_STREMIO_JACKETT_URL:-} - - JACKETT_URL=${AIOSTREAMS_JACKETT_URL:-} - - JACKETT_API_KEY=${AIOSTREAMS_JACKETT_API_KEY:-} - - JACKETT_INDEXERS=${AIOSTREAMS_JACKETT_INDEXERS:-} - - SECRET_KEY=${AIOSTREAMS_SECRET_KEY} - - DEFAULT_TIMEOUT=5000 - - TMDB_API_KEY=${TMDB_API_KEY:-} - labels: - - "traefik.enable=true" - - "traefik.http.routers.aio.rule=Host(`${AIOSTREAMS_HOSTNAME}`)" - - "traefik.http.routers.aio.entrypoints=websecure" - - "traefik.http.routers.aio.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=AIOStreams" - - "flame.url=https://${AIOSTREAMS_HOSTNAME}" - networks: - - addon_network - -networks: - addon_network: - external: true \ No newline at end of file diff --git a/auto/compose.aiostremio.yaml b/auto/compose.aiostremio.yaml deleted file mode 100644 index 8c937c7..0000000 --- a/auto/compose.aiostremio.yaml +++ /dev/null @@ -1,25 +0,0 @@ -services: - aiostremio: - image: viren070/aiostremio:latest - container_name: aiostremio - restart: unless-stopped - expose: - - 8469 - volumes: - - ./data/aiostremio:/app/data - environment: - ADMIN_USERNAME: ${AIOSTREMIO_ADMIN_USERNAME} - ADMIN_PASSWORD: ${AIOSTREMIO_ADMIN_PASSWORD} - MEDIAFLOW_API_PASSWORD: ${MEDIAFLOW_API_PASSWORD} - REDIS_HOST: redis - REDIS_PORT: 6379 - REDIS_PASSWORD: - DEBRID_API_KEY: ${DEBRID_API_KEY} - labels: - - "traefik.enable=true" - - "traefik.http.routers.aiostremio.rule=Host(`${AIOSTREMIO_HOSTNAME}`)" - - "traefik.http.routers.aiostremio.entrypoints=websecure" - - "traefik.http.routers.aiostremio.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=AIOStreams" - - "flame.url=https://${AIOSTREMIO_HOSTNAME}" \ No newline at end of file diff --git a/auto/compose.comet.yaml b/auto/compose.comet.yaml deleted file mode 100644 index 9393acf..0000000 --- a/auto/compose.comet.yaml +++ /dev/null @@ -1,44 +0,0 @@ -services: - comet: - container_name: comet - image: g0ldyy/comet:rewrite - restart: unless-stopped - expose: - - 2020 - environment: - - DASHBOARD_ADMIN_PASSWORD=${COMET_ADMIN_PASSWORD} - - DEBRID_PROXY_URL=http://warp:1080 - - INDEXER_MANAGER_TYPE=prowlarr # or jackett - - INDEXER_MANAGER_URL=http://prowlarr:9696 # or http://jackett:9117 - - INDEXER_MANAGER_API_KEY=${PROWLARR_API_KEY:-} # or ${JACKETT_API_KEY:-} - - INDEXER_MANAGER_INDEXERS=${COMET_INDEXERS:-[]} # comma separated list of indexer ids # for jackett, get the names from https://github.com/Jackett/Jackett/tree/master/src/Jackett.Common/Definitions - for prowlarr you can write them like on the web dashboard - - SCRAPE_ZILEAN=True - - ZILEAN_URL=http://zilean:8181 # or https://zilean.elfhosted.com if not hosting zilean locally - - ZILEAN_TAKE_FIRST=500 - - SCRAPE_TORRENTIO=False - - SCRAPE_MEDIAFUSION=False - - MEDIAFUSION_URL=http://mediafusion:8000 # or https://mediafusion.elfhosted.com if not hosting mediafusion locally - - STREMTHRU_URL=http://stremthru:8080 # or https://stremthru.13377001.xyz if not hosting stremthru locally - - DOWNLOAD_TORRENT_FILES=False - - REMOVE_ADULT_CONTENT=True - labels: - - "traefik.enable=true" - - "traefik.http.routers.comet.rule=Host(`${COMET_HOSTNAME}`)" - - "traefik.http.routers.comet.entrypoints=websecure" - - "traefik.http.routers.comet.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=Comet" - - "flame.url=https://${COMET_HOSTNAME}" - volumes: - - ./data/comet:/data - healthcheck: - test: wget -qO- http://127.0.0.1:2020/health - interval: 1m - timeout: 10s - retries: 5 - start_period: 10s - networks: - - addon_network -networks: - addon_network: - external: true \ No newline at end of file diff --git a/auto/compose.dozzle.yaml b/auto/compose.dozzle.yaml deleted file mode 100644 index cb2fa71..0000000 --- a/auto/compose.dozzle.yaml +++ /dev/null @@ -1,34 +0,0 @@ -services: - dozzle: - image: amir20/dozzle:latest - container_name: dozzle - restart: unless-stopped - expose: - - 8080 - environment: - DOZZLE_ENABLE_ACTIONS: "true" - DOZZLE_NO_ANALYTICS: "true" - volumes: - - /var/run/docker.sock:/var/run/docker.sock - labels: - - "traefik.enable=true" - - "traefik.http.routers.dozzle.rule=Host(`${DOZZLE_HOSTNAME}`)" - - "traefik.http.routers.dozzle.entrypoints=websecure" - - "traefik.http.routers.dozzle.tls.certresolver=myresolver" - - "traefik.http.routers.dozzle.middlewares=dozzle-auth" - - "traefik.http.middlewares.dozzle-auth.basicauth.users=${DOZZLE_USERNAME}:${DOZZLE_HASHED_PASSWORD}" - - "flame.type=app" - - "flame.name=Dozzle" - - "flame.url=https://${DOZZLE_HOSTNAME}" - healthcheck: - test: ["CMD", "/dozzle", "healthcheck"] - interval: 3s - timeout: 30s - retries: 5 - start_period: 30s - networks: - - addon_network - -networks: - addon_network: - external: true \ No newline at end of file diff --git a/auto/compose.easynews-plus.yaml b/auto/compose.easynews-plus.yaml deleted file mode 100644 index 3070507..0000000 --- a/auto/compose.easynews-plus.yaml +++ /dev/null @@ -1,21 +0,0 @@ -services: - easynews-plus: - image: ghcr.io/sleeyax/stremio-easynews-addon:latest - container_name: easynews-plus - restart: unless-stopped - expose: - - 1337 - labels: - - "traefik.enable=true" - - "traefik.http.routers.easynews.rule=Host(`${EASYNEWS_PLUS_HOSTNAME}`)" - - "traefik.http.routers.easynews.entrypoints=websecure" - - "traefik.http.routers.easynews.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=Easynews+" - - "flame.url=https://${EASYNEWS_PLUS_HOSTNAME}" - networks: - - addon_network - -networks: - addon_network: - external: true \ No newline at end of file diff --git a/auto/compose.flame.yaml b/auto/compose.flame.yaml deleted file mode 100644 index c49bf9d..0000000 --- a/auto/compose.flame.yaml +++ /dev/null @@ -1,23 +0,0 @@ -services: - flame: - image: pawelmalak/flame:multiarch - container_name: flame - restart: unless-stopped - expose: - - 5005 - environment: - - PASSWORD=${FLAME_PASSWORD} - labels: - - "traefik.enable=true" - - "traefik.http.routers.flame.rule=Host(`${FLAME_HOSTNAME}`)" - - "traefik.http.routers.flame.entrypoints=websecure" - - "traefik.http.routers.flame.tls.certresolver=myresolver" - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - ./data/flame:/app/data - networks: - - addon_network - -networks: - addon_network: - external: true \ No newline at end of file diff --git a/auto/compose.flaresolverr.yaml b/auto/compose.flaresolverr.yaml deleted file mode 100644 index e1a3b8e..0000000 --- a/auto/compose.flaresolverr.yaml +++ /dev/null @@ -1,16 +0,0 @@ -services: - flaresolverr: - image: ghcr.io/flaresolverr/flaresolverr:latest - container_name: flaresolverr - restart: unless-stopped - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8191/health"] - interval: 30s - timeout: 10s - retries: 3 - networks: - - addon_network - -networks: - addon_network: - external: true \ No newline at end of file diff --git a/auto/compose.gluetun.yaml b/auto/compose.gluetun.yaml deleted file mode 100644 index e1634ea..0000000 --- a/auto/compose.gluetun.yaml +++ /dev/null @@ -1,37 +0,0 @@ -services: - gluetun: - image: qmcgaw/gluetun - container_name: gluetun - restart: unless-stopped - cap_add: - - NET_ADMIN - devices: - - /dev/net/tun:/dev/net/tun - ports: - - 127.0.0.1:8888:8888/tcp # HTTP proxy - environment: - - VPN_SERVICE_PROVIDER=protonvpn - - VPN_TYPE=wireguard - - WIREGUARD_PRIVATE_KEY=${WIREGUARD_PRIVATE_KEY} - - SERVER_COUNTRIES=Netherlands - - FREE_ONLY=true - # Server list updater - # See https://github.com/qdm12/gluetun-wiki/blob/main/setup/servers.md#update-the-vpn-servers-list - - UPDATER_PERIOD=24h - - HTTPPROXY=on - - HTTPPROXY_LISTENING_ADDRESS=:8888 - - HTTPPROXY_STEALTH=on - volumes: - - gluetun-data:/gluetun - healthcheck: - test: ["CMD", "/gluetun-entrypoint", "healthcheck"] - interval: 60s - timeout: 5s - retries: 3 - start_period: 1m - networks: - - addon_network - -networks: - addon_network: - external: true diff --git a/auto/compose.jackett.yaml b/auto/compose.jackett.yaml deleted file mode 100644 index 18b52f1..0000000 --- a/auto/compose.jackett.yaml +++ /dev/null @@ -1,27 +0,0 @@ -services: - jackett: - image: linuxserver/jackett:latest - container_name: jackett - environment: - - PUID=1000 - - PGID=1000 - - TZ=${TZ:-UTC} # Add timezone support - expose: - - 9117 - volumes: - - ./data/jackett:/config - restart: unless-stopped - labels: - - "traefik.enable=true" - - "traefik.http.routers.jackett.rule=Host(`${JACKETT_HOSTNAME}`)" - - "traefik.http.routers.jackett.entrypoints=websecure" - - "traefik.http.routers.jackett.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=Jackett" - - "flame.url=https://${JACKETT_HOSTNAME}" - healthcheck: - test: curl -f http://localhost:9117/health - interval: 30s - timeout: 10s - retries: 3 - start_period: 30s \ No newline at end of file diff --git a/auto/compose.jackettio.yaml b/auto/compose.jackettio.yaml deleted file mode 100644 index e76656f..0000000 --- a/auto/compose.jackettio.yaml +++ /dev/null @@ -1,27 +0,0 @@ -services: - jackettio: - image: arvida42/jackettio:latest - container_name: jackettio - restart: unless-stopped - expose: - - 4000 - environment: - - JACKETT_URL=http://jackett:9117 - - JACKETT_API_KEY=${JACKETT_API_KEY:-} - - TMDB_ACCESS_TOKEN=${TMDB_ACCESS_TOKEN} - volumes: - - ./data/jackettio:/data - labels: - - "traefik.enable=true" - - "traefik.http.routers.jackettio.rule=Host(`${JACKETTIO_HOSTNAME}`)" - - "traefik.http.routers.jackettio.entrypoints=websecure" - - "traefik.http.routers.jackettio.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=Jackettio" - - "flame.url=https://${JACKETTIO_HOSTNAME}" - networks: - - addon_network - -networks: - addon_network: - external: true \ No newline at end of file diff --git a/auto/compose.mediaflow.yaml b/auto/compose.mediaflow.yaml deleted file mode 100644 index c04d025..0000000 --- a/auto/compose.mediaflow.yaml +++ /dev/null @@ -1,25 +0,0 @@ -services: - mediaflow-proxy: - image: mhdzumair/mediaflow-proxy - container_name: mediaflow-proxy - restart: unless-stopped - expose: - - 8888 - environment: - API_PASSWORD: ${MEDIAFLOW_API_PASSWORD} - PROXY_URL: ${HTTP_PROXY:-} - TRANSPORT_ROUTES: '{ "https://torrentio.strem.fun": { "proxy": true } }' - labels: - - "traefik.enable=true" - - "traefik.http.routers.mediaflow.rule=Host(`${MEDIAFLOW_HOSTNAME}`)" - - "traefik.http.routers.mediaflow.entrypoints=websecure" - - "traefik.http.routers.mediaflow.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=MediaFlow Proxy" - - "flame.url=https://${MEDIAFLOW_HOSTNAME}" - healthcheck: - test: python3 -c "import urllib.request; print(urllib.request.urlopen('http://127.0.0.1:8888/health').read().decode())" - interval: 1m - timeout: 10s - retries: 5 - start_period: 10s \ No newline at end of file diff --git a/auto/compose.mediafusion.yaml b/auto/compose.mediafusion.yaml deleted file mode 100644 index 934a4c2..0000000 --- a/auto/compose.mediafusion.yaml +++ /dev/null @@ -1,68 +0,0 @@ -services: - mediafusion: - image: mhdzumair/mediafusion:latest - container_name: mediafusion - restart: unless-stopped - expose: - - 8000 - environment: - - HOST_URL=https://${MEDIAFUSION_HOSTNAME} - - POSTER_HOST_URL=https://${MEDIAFUSION_HOSTNAME} - - MONGO_URI=mongodb://mongodb:27017/mediafusion - - REDIS_URL=redis://redis:6379 - - IS_SCRAP_FROM_TORRENTIO=true - - IS_SCRAP_FROM_MEDIAFUSION=true - - IS_SCRAP_FROM_ZILEAN=true - - IS_SCRAP_FROM_PROWLARR=true - - IS_SCRAP_FROM_JACKETT=true - - IS_SCRAP_FROM_YTS=false - - PROWLARR_API_KEY=${PROWLARR_API_KEY:-} - - PROWLARR_URL=http://prowlarr:9696 - - PROWLARR_IMMEDIATE_MAX_PROCESS=30 - - PROWLARR_IMMEDIATE_MAX_PROCESS_TIME=30 - - PROWLARR_SEARCH_INTERVAL_HOUR=24 - - PROWLARR_LIVE_TITLE_SEARCH=true - - JACKETT_URL=http://jackett:9117 - - JACKETT_API_KEY=${JACKETT_API_KEY:-} - - JACKETT_IMMEDIATE_MAX_PROCESS=30 - - JACKETT_IMMEDIATE_MAX_PROCESS_TIME=30 - - JACKETT_SEARCH_INTERVAL_HOUR=24 - - JACKETT_LIVE_TITLE_SEARCH=true - - ENABLE_RATE_LIMIT=false - - TORRENTIO_URL=https://torrentio.strem.fun - - MEDIAFUSION_URL=https://mediafusion.elfhosted.com - - ZILEAN_URL=http://zilean:8181 - - STORE_STREMTHRU_MAGNET_CACHE=false - - REQUESTS_PROXY_URL=${HTTP_PROXY_URL:-} - - FLARESOLVERR_URL=http://flaresolverr:8191 - - TMDB_API_KEY=${TMDB_API_KEY} # https://www.themoviedb.org/settings/api - - SECRET_KEY=${MEDIAFUSION_SECRET_KEY} # openssl rand -hex 32 - - API_PASSWORD=${MEDIAFUSION_API_PASSWORD} # random password for API -# - LOGGING_LEVEL="DEBUG" - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8000/health"] - interval: 1m - timeout: 10s - retries: 5 - start_period: 10s - depends_on: - mongodb: - condition: service_healthy - redis: - condition: service_healthy - warp: - condition: service_healthy - labels: - - "traefik.enable=true" - - "traefik.http.routers.mediafusion.rule=Host(`${MEDIAFUSION_HOSTNAME}`)" - - "traefik.http.routers.mediafusion.entrypoints=websecure" - - "traefik.http.routers.mediafusion.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=MediaFusion" - - "flame.url=https://${MEDIAFUSION_HOSTNAME}" - networks: - - addon_network - -networks: - addon_network: - external: true \ No newline at end of file diff --git a/auto/compose.mongodb.yaml b/auto/compose.mongodb.yaml deleted file mode 100644 index d5cacbd..0000000 --- a/auto/compose.mongodb.yaml +++ /dev/null @@ -1,22 +0,0 @@ -services: - mongodb: - image: mongo:latest - container_name: mongodb - restart: unless-stopped - volumes: - - mongodb-data:/data/db - healthcheck: - test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet - interval: 10s - timeout: 10s - retries: 5 - start_period: 40s - networks: - - addon_network - -networks: - addon_network: - external: true - -volumes: - mongodb-data: \ No newline at end of file diff --git a/auto/compose.nzbhydra2.yaml b/auto/compose.nzbhydra2.yaml deleted file mode 100644 index 82f6050..0000000 --- a/auto/compose.nzbhydra2.yaml +++ /dev/null @@ -1,28 +0,0 @@ -services: - nzbhydra2: - container_name: nzbhydra2 - image: ghcr.io/hotio/nzbhydra2:latest - expose: - - 5076 - environment: - - PUID=1000 - - PGID=1000 - - UMASK=002 - - TZ=${TZ:-UTC} - volumes: - - ./data/nzbhydra/config:/config - restart: unless-stopped - labels: - - "traefik.enable=true" - - "traefik.http.routers.nzbhydra2.rule=Host(`${NZBHYDRA2_HOSTNAME}`)" - - "traefik.http.routers.nzbhydra2.entrypoints=websecure" - - "traefik.http.routers.nzbhydra2.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=NZBHydra2" - - "flame.url=https://${NZBHYDRA2_HOSTNAME}" - networks: - - addon_network - -networks: - addon_network: - external: true \ No newline at end of file diff --git a/auto/compose.plausible.yaml b/auto/compose.plausible.yaml deleted file mode 100644 index 946f7e6..0000000 --- a/auto/compose.plausible.yaml +++ /dev/null @@ -1,64 +0,0 @@ -services: - plausible_db: - image: postgres:16-alpine - restart: unless-stopped - container_name: plausible-db - volumes: - - plausible-db:/var/lib/postgresql/data - environment: - POSTGRES_USER: ${POSTGRES_USER} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - healthcheck: - test: ["CMD-SHELL", "pg_isready -U postgres"] - start_period: 1m - - plausible_events_db: - image: clickhouse/clickhouse-server:24.3.3.102-alpine - restart: unless-stopped - container_name: plausible-events-db - volumes: - - plausible-event-db:/var/lib/clickhouse - - plausible-event-logs:/var/log/clickhouse-server - - ./data/plausible/clickhouse/logs.xml:/etc/clickhouse-server/config.d/logs.xml:ro - - ./data/plausible/clickhouse/ipv4-only.xml:/etc/clickhouse-server/config.d/ipv4-only.xml:ro - - ./data/plausible/clickhouse/low-resources.xml:/etc/clickhouse-server/config.d/low-resources.xml:ro - ulimits: - nofile: - soft: 262144 - hard: 262144 - healthcheck: - test: ["CMD-SHELL", "wget --no-verbose --tries=1 -O - http://127.0.0.1:8123/ping || exit 1"] - start_period: 1m - - plausible: - image: ghcr.io/plausible/community-edition:latest - container_name: plausible - restart: unless-stopped - command: sh -c "/entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run" - depends_on: - plausible_db: - condition: service_healthy - plausible_events_db: - condition: service_healthy - volumes: - - plausible-data:/var/lib/plausible - ulimits: - nofile: - soft: 65535 - hard: 65535 - expose: - - 8000 - environment: - TMPDIR: /var/lib/plausible/tmp - BASE_URL: https://${PLAUSIBLE_HOSTNAME} - SECRET_KEY_BASE: ${PLAUSIBLE_SECRET_KEY_BASE} - HTTP_PORT: 8000 - labels: - - "traefik.enable=true" - - "traefik.http.routers.plausible.rule=Host(`${PLAUSIBLE_HOSTNAME}`)" - - "traefik.http.routers.plausible.entrypoints=websecure" - - "traefik.http.routers.plausible.tls.certresolver=myresolver" - - "traefik.http.services.plausible.loadbalancer.server.port=8000" - - "flame.type=app" - - "flame.name=Plausible" - - "flame.url=https://${PLAUSIBLE_HOSTNAME}" \ No newline at end of file diff --git a/auto/compose.postgres.yaml b/auto/compose.postgres.yaml deleted file mode 100644 index 442e335..0000000 --- a/auto/compose.postgres.yaml +++ /dev/null @@ -1,27 +0,0 @@ -services: - postgres: - image: postgres:17.2-alpine - container_name: postgres - restart: unless-stopped - shm_size: 2G - environment: - PGDATA: /var/lib/postgresql/data/pgdata - POSTGRES_USER: ${POSTGRES_USER} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - POSTGRES_DB: postgres - volumes: - - postgres-data:/var/lib/postgresql/data/pgdata - healthcheck: - test: [ "CMD-SHELL", "pg_isready -U postgres" ] - interval: 10s - timeout: 5s - retries: 5 - networks: - - addon_network - -networks: - addon_network: - external: true - -volumes: - postgres-data: \ No newline at end of file diff --git a/auto/compose.prowlarr.yaml b/auto/compose.prowlarr.yaml deleted file mode 100644 index 057f98a..0000000 --- a/auto/compose.prowlarr.yaml +++ /dev/null @@ -1,22 +0,0 @@ -services: - prowlarr: - image: ghcr.io/hotio/prowlarr:latest - container_name: prowlarr - environment: - - PUID=1000 - - PGID=1000 - - UMASK=002 - - TZ=${TZ:-UTC} # Add timezone support - expose: - - 9696 - volumes: - - ./data/prowlarr:/config - restart: unless-stopped - labels: - - "traefik.enable=true" - - "traefik.http.routers.prowlarr.rule=Host(`${PROWLARR_HOSTNAME}`)" - - "traefik.http.routers.prowlarr.entrypoints=websecure" - - "traefik.http.routers.prowlarr.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=Prowlarr" - - "flame.url=https://${PROWLARR_HOSTNAME}" \ No newline at end of file diff --git a/auto/compose.redis.yaml b/auto/compose.redis.yaml deleted file mode 100644 index 8cfb920..0000000 --- a/auto/compose.redis.yaml +++ /dev/null @@ -1,22 +0,0 @@ -services: - redis: - image: redis:latest - container_name: redis - restart: unless-stopped - volumes: - - redis-data:/data - command: redis-server --appendonly yes --save 60 1 - healthcheck: - test: ["CMD", "redis-cli", "ping"] - interval: 10s - timeout: 5s - retries: 5 - networks: - - addon_network - -networks: - addon_network: - external: true - -volumes: - redis-data: \ No newline at end of file diff --git a/auto/compose.seanime.yaml b/auto/compose.seanime.yaml deleted file mode 100644 index a8ecb11..0000000 --- a/auto/compose.seanime.yaml +++ /dev/null @@ -1,34 +0,0 @@ -services: - seanime: - image: umagistr/seanime - container_name: seanime - command: - volumes: - - /mnt/user/anime:/anime - - /mnt/user/downloads:/downloads - - ./data/seanime:/root/.config/Seanime - expose: - - 43211 - restart: unless-stopped - labels: - - "traefik.enable=true" - - "traefik.http.routers.seanime.rule=Host(`${SEANIME_HOSTNAME}`)" - - "traefik.http.routers.seanime.entrypoints=websecure" - - "traefik.http.routers.seanime.tls.certresolver=myresolver" - - "traefik.http.routers.seanime.middlewares=seanime-auth" - - "traefik.http.middlewares.seanime-auth.basicauth.users=${SEANIME_USERNAME}:${SEANIME_HASHED_PASSWORD}" - - "flame.type=app" - - "flame.name=Seanime" - - "flame.url=https://${SEANIME_HOSTNAME}" - healthcheck: - test: wget -qO- http://localhost:43211/api/v1/status - interval: 5m - timeout: 10s - retries: 5 - start_period: 10s - networks: - - addon_network - -networks: - addon_network: - external: true \ No newline at end of file diff --git a/auto/compose.stremio-jackett.yaml b/auto/compose.stremio-jackett.yaml deleted file mode 100644 index 9bce6e4..0000000 --- a/auto/compose.stremio-jackett.yaml +++ /dev/null @@ -1,25 +0,0 @@ -services: - stremio-jackett: - image: belmeg/stremio-addon-jackett - container_name: stremio-jackett - restart: unless-stopped - expose: - - 3000 - environment: - - PUID=1000 - - PGID=1000 - - TZ=${TZ:-UTC} # Add timezone support - labels: - - "traefik.enable=true" - - "traefik.http.routers.stremiojackett.rule=Host(`${STREMIO_JACKETT_HOSTNAME}`)" - - "traefik.http.routers.stremiojackett.entrypoints=websecure" - - "traefik.http.routers.stremiojackett.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=Stremio-Jackett" - - "flame.url=https://${STREMIO_JACKETT_HOSTNAME}" - networks: - - addon_network - -networks: - addon_network: - external: true \ No newline at end of file diff --git a/auto/compose.stremio-server.yaml b/auto/compose.stremio-server.yaml deleted file mode 100644 index f13e478..0000000 --- a/auto/compose.stremio-server.yaml +++ /dev/null @@ -1,21 +0,0 @@ -services: - stremio-server: - image: stremio/server:latest - container_name: stremio-server - expose: - - 11470 - restart: unless-stopped - labels: - - "traefik.enable=true" - - "traefik.http.routers.stremio-server.rule=Host(`${STREMIO_SERVER_HOSTNAME}`)" - - "traefik.http.routers.stremio-server.entrypoints=websecure" - - "traefik.http.routers.stremio-server.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=Stremio Server" - - "flame.url=https://${STREMIO_SERVER_HOSTNAME}" - networks: - - addon_network - -networks: - addon_network: - external: true \ No newline at end of file diff --git a/auto/compose.stremthru.yaml b/auto/compose.stremthru.yaml deleted file mode 100644 index 6ae5668..0000000 --- a/auto/compose.stremthru.yaml +++ /dev/null @@ -1,38 +0,0 @@ -services: - stremthru: - image: muniftanjim/stremthru:latest-heavy - container_name: stremthru - restart: unless-stopped - expose: - - 8080 - environment: - - STREMTHRU_HTTP_PROXY=http://warp:1080 - - STREMTHRU_TUNNEL=*:false,torrentio.strem.fun:true # Only tunnel hostnames that block VPS access (e.g. Torrentio) - - STREMTHRU_PROXY_AUTH=user1:pass1,user2:pass2 - - STREMTHRU_STORE_AUTH=*:realdebrid:abc...xyz # Add apikey - - STREMTHRU_STORE_TUNNEL=realdebrid:api # Only send RD API via tunnel, not all access (e.g playback) - - STREMTHRU_STORE_CONTENT_PROXY=*:true,easydebrid:false,premiumize:false - - STREMTHRU_PEER_URI=https://stremthru.mooo.com - - STREMTHRU_DATABASE_URI=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/stremthru?sslmode=disable - - STREMTHRU_REDIS_URI=redis://redis:6379 - depends_on: - stremthru-db: - condition: service_healthy - stremthru-cache: - condition: service_healthy - labels: - - "traefik.enable=true" - - "traefik.http.routers.stremthru.rule=Host(`${STREMTHRU_HOSTNAME}`)" - - "traefik.http.routers.stremthru.entrypoints=websecure" - - "traefik.http.routers.stremthru.tls.certresolver=myresolver" - - "traefik.http.services.stremthru.loadbalancer.server.port=8080" - - "flame.type=app" - - "flame.name=StremThru" - - "flame.url=https://${STREMTHRU_HOSTNAME}" - networks: - - addon_network - - -networks: - addon_network: - external: true \ No newline at end of file diff --git a/auto/compose.tmdb-addon.yaml b/auto/compose.tmdb-addon.yaml deleted file mode 100644 index 8319098..0000000 --- a/auto/compose.tmdb-addon.yaml +++ /dev/null @@ -1,34 +0,0 @@ -services: - tmdb-addon: - image: mrcanelas/tmdb-addon:latest - container_name: tmdb-addon - restart: unless-stopped - expose: - - 3232 - environment: - - PORT=3232 - - TMDB_API=${TMDB_API_KEY} # https://www.themoviedb.org/settings/api - - FANART_API=${FANART_API_KEY} # https://fanart.tv/get-an-api-key/ - - HOST_NAME=tmdb-${TMDB_ADDON_HOSTNAME} - - MONGODB_URI=mongodb://mongodb:27017/tmdb - - META_TTL=604800 # 1 week - - CATALOG_TTL=86400 # 1 day - - NO_CACHE=false # Enable cache, set to true to disable - labels: - - "traefik.enable=true" - - "traefik.http.routers.tmdb.rule=Host(`${TMDB_ADDON_HOSTNAME}`)" - - "traefik.http.routers.tmdb.entrypoints=websecure" - - "traefik.http.routers.tmdb.tls.certresolver=myresolver" - - "traefik.http.services.tmdb.loadbalancer.server.port=3232" - - "flame.type=app" - - "flame.name=TMDB Addon" - - "flame.url=https://${TMDB_ADDON_HOSTNAME}" - depends_on: - mongodb: - condition: service_healthy - networks: - - addon_network - -networks: - addon_network: - external: true \ No newline at end of file diff --git a/auto/compose.traefik.yaml b/auto/compose.traefik.yaml deleted file mode 100644 index 8a3bf74..0000000 --- a/auto/compose.traefik.yaml +++ /dev/null @@ -1,37 +0,0 @@ -services: - traefik: - image: traefik:v3 - container_name: traefik - restart: unless-stopped - ports: - - 443:443 - # - 80:80 # adguard - - 127.0.0.1:8080:8080 - # - 853:853/tcp # adguard - command: - - "--api.insecure=true" - - "--providers.docker=true" - - "--providers.docker.exposedbydefault=false" - # - "--entryPoints.web.address=:80" # adguard - - "--entryPoints.websecure.address=:443" - # - "--entryPoints.dot.address=:853" # adguard - - "--certificatesresolvers.myresolver.acme.tlschallenge=true" - - "--certificatesresolvers.myresolver.acme.email=${LETSENCRYPT_EMAIL}" - - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" - - "--log.level=INFO" - - "--ping" - volumes: - - "/var/run/docker.sock:/var/run/docker.sock" - - "./data/letsencrypt:/letsencrypt" - healthcheck: - test: ["CMD", "traefik", "healthcheck", "--ping"] - interval: 10s - timeout: 5s - retries: 3 - networks: - - addon_network - -networks: - addon_network: - external: true - diff --git a/auto/compose.uptime-kuma.yaml b/auto/compose.uptime-kuma.yaml deleted file mode 100644 index 1554b5c..0000000 --- a/auto/compose.uptime-kuma.yaml +++ /dev/null @@ -1,24 +0,0 @@ -services: - uptime-kuma: - image: louislam/uptime-kuma:latest - container_name: kuma - restart: unless-stopped - expose: - - 3001 - labels: - - "traefik.enable=true" - - "traefik.http.routers.uptime-kuma.rule=Host(`${UPTIME_KUMA_HOSTNAME}`)" - - "traefik.http.routers.uptime-kuma.entrypoints=websecure" - - "traefik.http.routers.uptime-kuma.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=Uptime Kuma" - - "flame.url=https://${UPTIME_KUMA_HOSTNAME}" - volumes: - - ./data/kuma:/app/data - - /var/run/docker.sock:/var/run/docker.sock - networks: - - addon_network - -networks: - addon_network: - external: true diff --git a/auto/compose.warp.yaml b/auto/compose.warp.yaml deleted file mode 100644 index 89b76b3..0000000 --- a/auto/compose.warp.yaml +++ /dev/null @@ -1,30 +0,0 @@ -services: - warp: - image: caomingjun/warp - container_name: warp - restart: unless-stopped - device_cgroup_rules: - - 'c 10:200 rwm' - expose: - - 1080 - environment: - - WARP_SLEEP=5 - cap_add: - - NET_ADMIN - sysctls: - - net.ipv6.conf.all.disable_ipv6=0 - - net.ipv4.conf.all.src_valid_mark=1 - volumes: - - ./data/warp:/var/lib/cloudflare-warp - healthcheck: - test: curl -x "socks5h://127.0.0.1:1080" -fsSL "https://www.cloudflare.com/cdn-cgi/trace" | grep -qE "warp=(plus|on)" || exit 1 - interval: 15s - timeout: 5s - retries: 3 - start_period: 5s - networks: - - addon_network - -networks: - addon_network: - external: true \ No newline at end of file diff --git a/auto/compose.watchtower.yaml b/auto/compose.watchtower.yaml deleted file mode 100644 index 8647d72..0000000 --- a/auto/compose.watchtower.yaml +++ /dev/null @@ -1,38 +0,0 @@ -services: - watchtower: - image: containrrr/watchtower - container_name: watchtower - restart: unless-stopped - environment: - TZ: ${TZ:-UTC} - WATCHTOWER_CLEANUP: "true" - WATCHTOWER_SCHEDULE: ${AUTO_UPDATE_SCHEDULE:-0 0 6 * * *} # Run at 6am daily - WATCHTOWER_NOTIFICATION_URL: ${AUTO_UPDATE_NOTIFICATION_URL:-} - WATCHTOWER_NOTIFICATION_REPORT: "true" - WATCHTOWER_NOTIFICATION_TEMPLATE: | - {{- if .Report -}} - {{- with .Report -}} - {{- if ( or .Updated .Failed ) -}} - {{len .Scanned}} Scanned, {{len .Updated}} Updated, {{len .Failed}} Failed - {{- range .Updated}} - - {{.Name}} ({{.ImageName}}): {{.CurrentImageID.ShortID}} updated to {{.LatestImageID.ShortID}} - {{- end -}} - {{- range .Skipped}} - - {{.Name}} ({{.ImageName}}): {{.State}}: {{.Error}} - {{- end -}} - {{- range .Failed}} - - {{.Name}} ({{.ImageName}}): {{.State}}: {{.Error}} - {{- end -}} - {{- end -}} - {{- end -}} - {{- else -}} - {{range .Entries -}}{{.Message}}{{"\n"}}{{- end -}} - {{- end -}} - volumes: - - /var/run/docker.sock:/var/run/docker.sock - networks: - - addon_network - -networks: - addon_network: - external: true \ No newline at end of file diff --git a/auto/compose.zilean.yaml b/auto/compose.zilean.yaml deleted file mode 100644 index 6794a62..0000000 --- a/auto/compose.zilean.yaml +++ /dev/null @@ -1,32 +0,0 @@ -services: - zilean: - image: ipromknight/zilean:latest - restart: unless-stopped - container_name: zilean - tty: true - environment: - Zilean__Database__ConnectionString: Host=postgres;Database=zilean;Username=${POSTGRES_USER};Password=${POSTGRES_PASSWORD};Include Error Detail=true;Timeout=30;CommandTimeout=3600 - Zilean__Imdb__UseAllCores: true - Zilean__Imdb__UseLucene: true - healthcheck: - test: curl --connect-timeout 10 --silent --show-error --fail http://localhost:8181/healthchecks/ping - timeout: 60s - interval: 30s - retries: 10 - depends_on: - postgres: - condition: service_healthy - volumes: - - ./data/zilean/tmp:/tmp - networks: - - addon_network - - - - -networks: - addon_network: - external: true - - - \ No newline at end of file diff --git a/compose.yaml b/compose.yaml index 7850758..f18c3d0 100644 --- a/compose.yaml +++ b/compose.yaml @@ -737,6 +737,7 @@ services: profiles: - stremio - all + postgres: image: postgres:17.2-alpine container_name: postgres @@ -755,6 +756,7 @@ services: timeout: 5s retries: 5 profiles: + - debrid_media_server - stremio - all @@ -1207,7 +1209,7 @@ services: profiles: - minecraft - all - + vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden @@ -1229,6 +1231,10 @@ services: profiles: - vaultwarden - all + + + + # ================================================================================================== # DEBRID MEDIA SERVER # ================================================================================================== @@ -1236,511 +1242,522 @@ services: # The below stack does mostly work, but there could be some permission issues which can be resolved with (not recommended): # - sudo chmod -R 777 /mnt/symlinks # You should only use the below as a reference. - # blackhole: - # image: ghcr.io/westsurname/scripts/blackhole:latest - # container_name: blackhole - # user: "1000:1000" - # volumes: - # - ${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null}:${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null} - # - ${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null}:${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null} - # - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH}:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH} - # - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH}:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH} - # - ./data/blackhole/logs:/app/logs - # - /mnt:/mnt - # env_file: - # - ./data/blackhole/.env - # environment: - # - PUID=1000 - # - PGID=1000 - # - UMASK=002 - # restart: unless-stopped - # depends_on: - # rclone: - # condition: service_started - # sonarr: - # condition: service_healthy - # radarr: - # condition: service_healthy - # profiles: - # - debrid_media_server - # - all + blackhole: + image: ghcr.io/westsurname/scripts/blackhole:latest + container_name: blackhole + user: "1000:1000" + volumes: + - ${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null}:${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null} + - ${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null}:${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null} + - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH}:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH} + - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH}:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH} + - ./data/blackhole/logs:/app/logs + - /mnt:/mnt + env_file: + - ./data/blackhole/.env + environment: + - PUID=1000 + - PGID=1000 + - UMASK=002 + restart: unless-stopped + depends_on: + rclone: + condition: service_started + sonarr: + condition: service_healthy + radarr: + condition: service_healthy + profiles: + - debrid_media_server + - all - # repair: - # image: ghcr.io/westsurname/scripts/scripts:latest - # container_name: repair - # command: python repair.py --no-confirm - # restart: unless-stopped - # env_file: - # - ./data/blackhole/.env - # volumes: - # - ${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null}:${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null} - # - ${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null}:${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null} - # - ${SONARR_ROOT_FOLDER}:${SONARR_ROOT_FOLDER} - # - ${RADARR_ROOT_FOLDER}:${RADARR_ROOT_FOLDER} - # profiles: - # - debrid_media_server - # - all + repair: + image: ghcr.io/westsurname/scripts/scripts:latest + container_name: repair + command: python repair.py --no-confirm + restart: unless-stopped + env_file: + - ./data/blackhole/.env + volumes: + - ${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null}:${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null} + - ${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null}:${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null} + - ${SONARR_ROOT_FOLDER}:${SONARR_ROOT_FOLDER} + - ${RADARR_ROOT_FOLDER}:${RADARR_ROOT_FOLDER} + profiles: + - debrid_media_server + - all - # blackhole4k: - # image: ghcr.io/westsurname/scripts/blackhole:latest - # container_name: blackhole4k - # user: "1000:1000" - # volumes: - # - ${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null}:${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null} - # - ${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null}:${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null} - # - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH}4k:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH} - # - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH}4k:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH} - # - ./data/blackhole4k/logs:/app/logs - # - /mnt:/mnt - # env_file: - # - ./data/blackhole/.env - # environment: - # - BLACKHOLE_BASE_WATCH_PATH=${BLACKHOLE_BASE_WATCH_PATH} - # - PUID=1000 - # - PGID=1000 - # - UMASK=002 - # restart: unless-stopped - # depends_on: - # rclone: - # condition: service_started - # sonarr4k: - # condition: service_healthy - # radarr4k: - # condition: service_healthy - # profiles: - # - debrid_media_server - # - all + blackhole4k: + image: ghcr.io/westsurname/scripts/blackhole:latest + container_name: blackhole4k + user: "1000:1000" + volumes: + - ${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null}:${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null} + - ${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null}:${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null} + - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH}4k:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH} + - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH}4k:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH} + - ./data/blackhole4k/logs:/app/logs + - /mnt:/mnt + env_file: + - ./data/blackhole/.env + environment: + - BLACKHOLE_BASE_WATCH_PATH=${BLACKHOLE_BASE_WATCH_PATH} + - PUID=1000 + - PGID=1000 + - UMASK=002 + restart: unless-stopped + depends_on: + rclone: + condition: service_started + sonarr4k: + condition: service_healthy + radarr4k: + condition: service_healthy + profiles: + - debrid_media_server + - all - # repair4k: - # image: ghcr.io/westsurname/scripts/scripts:latest - # container_name: repair4k - # command: python repair.py --no-confirm - # restart: unless-stopped - # env_file: - # - ./data/blackhole/.env - # volumes: - # - ${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null}:${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null} - # - ${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null}:${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null} - # - ${SONARR_ROOT_FOLDER_4K}:${SONARR_ROOT_FOLDER_4K} - # - ${RADARR_ROOT_FOLDER_4K}:${RADARR_ROOT_FOLDER_4K} - # profiles: - # - debrid_media_server - # - all + repair4k: + image: ghcr.io/westsurname/scripts/scripts:latest + container_name: repair4k + command: python repair.py --no-confirm + restart: unless-stopped + env_file: + - ./data/blackhole/.env + volumes: + - ${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null}:${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null} + - ${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null}:${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null} + - ${SONARR_ROOT_FOLDER_4K}:${SONARR_ROOT_FOLDER_4K} + - ${RADARR_ROOT_FOLDER_4K}:${RADARR_ROOT_FOLDER_4K} + profiles: + - debrid_media_server + - all - # blackholeanime: - # image: ghcr.io/westsurname/scripts/blackhole:latest - # container_name: blackholeanime - # user: "1000:1000" - # volumes: - # - ${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null}:${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null} - # - ${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null}:${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null} - # - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH}anime:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH} - # - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH}anime:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH} - # - ./data/blackholeanime/logs:/app/logs - # - /mnt:/mnt - # env_file: - # - ./data/blackhole/.env - # environment: - # - BLACKHOLE_BASE_WATCH_PATH=${BLACKHOLE_BASE_WATCH_PATH} - # - PUID=1000 - # - PGID=1000 - # - UMASK=002 - # restart: unless-stopped - # depends_on: - # rclone: - # condition: service_started - # sonarranime: - # condition: service_healthy - # radarranime: - # condition: service_healthy - # profiles: - # - debrid_media_server - # - all + blackholeanime: + image: ghcr.io/westsurname/scripts/blackhole:latest + container_name: blackholeanime + user: "1000:1000" + volumes: + - ${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null}:${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null} + - ${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null}:${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null} + - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH}anime:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH} + - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH}anime:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH} + - ./data/blackholeanime/logs:/app/logs + - /mnt:/mnt + env_file: + - ./data/blackhole/.env + environment: + - BLACKHOLE_BASE_WATCH_PATH=${BLACKHOLE_BASE_WATCH_PATH} + - PUID=1000 + - PGID=1000 + - UMASK=002 + restart: unless-stopped + depends_on: + rclone: + condition: service_started + sonarranime: + condition: service_healthy + radarranime: + condition: service_healthy + profiles: + - debrid_media_server + - all - # repairanime: - # image: ghcr.io/westsurname/scripts/scripts:latest - # container_name: repairanime - # command: python repair.py --no-confirm - # restart: unless-stopped - # env_file: - # - ./data/blackhole/.env - # volumes: - # - ${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null}:${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null} - # - ${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null}:${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null} - # - ${SONARR_ROOT_FOLDER_ANIME}:${SONARR_ROOT_FOLDER_ANIME} - # - ${RADARR_ROOT_FOLDER_ANIME}:${RADARR_ROOT_FOLDER_ANIME} - # profiles: - # - debrid_media_server - # - all - - # radarr: - # container_name: radarr - # environment: - # - PUID=1000 - # - PGID=1000 - # expose: - # - 7878 - # hostname: radarr - # image: ghcr.io/hotio/radarr:release - # restart: unless-stopped - # volumes: - # - /mnt:/mnt - # - /opt/radarr:/config - # - /opt/scripts:/scripts - # - /usr/bin/rclone:/usr/bin/rclone - # labels: - # - "traefik.enable=true" - # - "traefik.http.routers.radarr.rule=Host(`${RADARR_HOSTNAME}`)" - # - "traefik.http.routers.radarr.entrypoints=websecure" - # - "traefik.http.routers.radarr.tls.certresolver=myresolver" - # - "traefik.http.services.radarr.loadbalancer.server.port=7878" - # - "flame.type=app" - # - "flame.name=Radarr" - # - "flame.url=https://${RADARR_HOSTNAME}" - # depends_on: - # - rclone - # healthcheck: - # test: ["CMD-SHELL", "curl -s http://localhost:7878/ping | grep -q '\"status\": \"OK\"' || exit 1"] - # interval: 1m - # timeout: 10s - # retries: 5 - # start_period: 10s - # profiles: - # - debrid_media_server - # - all + repairanime: + image: ghcr.io/westsurname/scripts/scripts:latest + container_name: repairanime + command: python repair.py --no-confirm + restart: unless-stopped + env_file: + - ./data/blackhole/.env + volumes: + - ${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null}:${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null} + - ${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null}:${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null} + - ${SONARR_ROOT_FOLDER_ANIME}:${SONARR_ROOT_FOLDER_ANIME} + - ${RADARR_ROOT_FOLDER_ANIME}:${RADARR_ROOT_FOLDER_ANIME} + profiles: + - debrid_media_server + - all + + radarr: + container_name: radarr + environment: + - PUID=1000 + - PGID=1000 + expose: + - 7878 + hostname: radarr + image: ghcr.io/hotio/radarr:release + restart: unless-stopped + volumes: + - /mnt:/mnt + - /opt/radarr:/config + - /opt/scripts:/scripts + - /usr/bin/rclone:/usr/bin/rclone + labels: + - "traefik.enable=true" + - "traefik.http.routers.radarr.rule=Host(`${RADARR_HOSTNAME}`)" + - "traefik.http.routers.radarr.entrypoints=websecure" + - "traefik.http.routers.radarr.tls.certresolver=myresolver" + - "traefik.http.services.radarr.loadbalancer.server.port=7878" + - "flame.type=app" + - "flame.name=Radarr" + - "flame.url=https://${RADARR_HOSTNAME}" + depends_on: + - rclone + healthcheck: + test: ["CMD-SHELL", "curl -s http://localhost:7878/ping | grep -q '\"status\": \"OK\"' || exit 1"] + interval: 1m + timeout: 10s + retries: 5 + start_period: 10s + profiles: + - debrid_media_server + - all - # radarr4k: - # container_name: radarr4k - # expose: - # - 7878 - # environment: - # - PUID=1000 - # - PGID=1000 - # image: ghcr.io/hotio/radarr:release - # restart: unless-stopped - # volumes: - # - /mnt:/mnt - # - /opt/radarr4k:/config - # - /opt/scripts:/scripts - # - /usr/bin/rclone:/usr/bin/rclone - # labels: - # - "traefik.enable=true" - # - "traefik.http.routers.radarr4k.rule=Host(`${RADARR4K_HOSTNAME}`)" - # - "traefik.http.routers.radarr4k.entrypoints=websecure" - # - "traefik.http.routers.radarr4k.tls.certresolver=myresolver" - # - "traefik.http.services.radarr4k.loadbalancer.server.port=7878" - # - "flame.type=app" - # - "flame.name=Radarr4k" - # - "flame.url=https://${RADARR4K_HOSTNAME}" - # depends_on: - # - rclone - # healthcheck: - # test: ["CMD-SHELL", "curl -s http://localhost:7878/ping | grep -q '\"status\": \"OK\"' || exit 1"] - # interval: 1m - # timeout: 10s - # retries: 5 - # start_period: 10s - # profiles: - # - debrid_media_server - # - all + radarr4k: + container_name: radarr4k + expose: + - 7878 + environment: + - PUID=1000 + - PGID=1000 + image: ghcr.io/hotio/radarr:release + restart: unless-stopped + volumes: + - /mnt:/mnt + - /opt/radarr4k:/config + - /opt/scripts:/scripts + - /usr/bin/rclone:/usr/bin/rclone + labels: + - "traefik.enable=true" + - "traefik.http.routers.radarr4k.rule=Host(`${RADARR4K_HOSTNAME}`)" + - "traefik.http.routers.radarr4k.entrypoints=websecure" + - "traefik.http.routers.radarr4k.tls.certresolver=myresolver" + - "traefik.http.services.radarr4k.loadbalancer.server.port=7878" + - "flame.type=app" + - "flame.name=Radarr4k" + - "flame.url=https://${RADARR4K_HOSTNAME}" + depends_on: + - rclone + healthcheck: + test: ["CMD-SHELL", "curl -s http://localhost:7878/ping | grep -q '\"status\": \"OK\"' || exit 1"] + interval: 1m + timeout: 10s + retries: 5 + start_period: 10s + profiles: + - debrid_media_server + - all - # radarranime: - # container_name: radarranime - # expose: - # - 7878 - # image: ghcr.io/hotio/radarr:release - # environment: - # - PUID=1000 - # - PGID=1000 - # restart: unless-stopped - # volumes: - # - /mnt:/mnt - # - /opt/radarranime:/config - # - /opt/scripts:/scripts - # - /usr/bin/rclone:/usr/bin/rclone - # labels: - # - "traefik.enable=true" - # - "traefik.http.routers.radarranime.rule=Host(`${RADARRANIME_HOSTNAME}`)" - # - "traefik.http.routers.radarranime.entrypoints=websecure" - # - "traefik.http.routers.radarranime.tls.certresolver=myresolver" - # - "traefik.http.services.radarranime.loadbalancer.server.port=7878" - # - "flame.type=app" - # - "flame.name=RadarrAnime" - # - "flame.url=https://${RADARRANIME_HOSTNAME}" - # depends_on: - # - rclone - # healthcheck: - # test: ["CMD-SHELL", "curl -s http://localhost:7878/ping | grep -q '\"status\": \"OK\"' || exit 1"] - # interval: 1m - # timeout: 10s - # retries: 5 - # start_period: 10s - # profiles: - # - debrid_media_server - # - all + radarranime: + container_name: radarranime + expose: + - 7878 + image: ghcr.io/hotio/radarr:release + environment: + - PUID=1000 + - PGID=1000 + restart: unless-stopped + volumes: + - /mnt:/mnt + - /opt/radarranime:/config + - /opt/scripts:/scripts + - /usr/bin/rclone:/usr/bin/rclone + labels: + - "traefik.enable=true" + - "traefik.http.routers.radarranime.rule=Host(`${RADARRANIME_HOSTNAME}`)" + - "traefik.http.routers.radarranime.entrypoints=websecure" + - "traefik.http.routers.radarranime.tls.certresolver=myresolver" + - "traefik.http.services.radarranime.loadbalancer.server.port=7878" + - "flame.type=app" + - "flame.name=RadarrAnime" + - "flame.url=https://${RADARRANIME_HOSTNAME}" + depends_on: + - rclone + healthcheck: + test: ["CMD-SHELL", "curl -s http://localhost:7878/ping | grep -q '\"status\": \"OK\"' || exit 1"] + interval: 1m + timeout: 10s + retries: 5 + start_period: 10s + profiles: + - debrid_media_server + - all - # sonarr: - # container_name: sonarr - # expose: - # - 8989 - # image: ghcr.io/hotio/sonarr:release - # restart: unless-stopped - # environment: - # - PUID=1000 - # - PGID=1000 - # labels: - # - "traefik.enable=true" - # - "traefik.http.routers.sonarr.rule=Host(`${SONARR_HOSTNAME}`)" - # - "traefik.http.routers.sonarr.entrypoints=websecure" - # - "traefik.http.routers.sonarr.tls.certresolver=myresolver" - # - "traefik.http.services.sonarr.loadbalancer.server.port=8989" - # - "flame.type=app" - # - "flame.name=Sonarr" - # - "flame.url=https://${SONARR_HOSTNAME}" - # volumes: - # - /mnt:/mnt - # - /opt/sonarr:/config - # - /opt/scripts:/scripts - # - /usr/bin/rclone:/usr/bin/rclone - # depends_on: - # - rclone - # healthcheck: - # test: ["CMD-SHELL", "curl -s http://localhost:8989/ping | grep -q '\"status\": \"OK\"' || exit 1"] - # interval: 1m - # timeout: 10s - # retries: 5 - # start_period: 10s - # profiles: - # - debrid_media_server - # - all + sonarr: + container_name: sonarr + expose: + - 8989 + image: ghcr.io/hotio/sonarr:release + restart: unless-stopped + environment: + - PUID=1000 + - PGID=1000 + labels: + - "traefik.enable=true" + - "traefik.http.routers.sonarr.rule=Host(`${SONARR_HOSTNAME}`)" + - "traefik.http.routers.sonarr.entrypoints=websecure" + - "traefik.http.routers.sonarr.tls.certresolver=myresolver" + - "traefik.http.services.sonarr.loadbalancer.server.port=8989" + - "flame.type=app" + - "flame.name=Sonarr" + - "flame.url=https://${SONARR_HOSTNAME}" + volumes: + - /mnt:/mnt + - /opt/sonarr:/config + - /opt/scripts:/scripts + - /usr/bin/rclone:/usr/bin/rclone + depends_on: + - rclone + healthcheck: + test: ["CMD-SHELL", "curl -s http://localhost:8989/ping | grep -q '\"status\": \"OK\"' || exit 1"] + interval: 1m + timeout: 10s + retries: 5 + start_period: 10s + profiles: + - debrid_media_server + - all - # sonarr4k: - # container_name: sonarr4k - # environment: - # - PUID=1000 - # - PGID=1000 - # expose: - # - 8989 - # image: ghcr.io/hotio/sonarr:release - # restart: unless-stopped - # labels: - # - "traefik.enable=true" - # - "traefik.http.routers.sonarr4k.rule=Host(`${SONARR4K_HOSTNAME}`)" - # - "traefik.http.routers.sonarr4k.entrypoints=websecure" - # - "traefik.http.routers.sonarr4k.tls.certresolver=myresolver" - # - "traefik.http.services.sonarr4k.loadbalancer.server.port=8989" - # - "flame.type=app" - # - "flame.name=Sonarr4k" - # - "flame.url=https://${SONARR4K_HOSTNAME}" - # volumes: - # - /mnt:/mnt - # - /opt/sonarr4k:/config - # - /opt/scripts:/scripts - # - /usr/bin/rclone:/usr/bin/rclone - # depends_on: - # - rclone - # healthcheck: - # test: ["CMD-SHELL", "curl -s http://localhost:8989/ping | grep -q '\"status\": \"OK\"' || exit 1"] - # interval: 1m - # timeout: 10s - # retries: 5 - # start_period: 10s - # profiles: - # - debrid_media_server - # - all + sonarr4k: + container_name: sonarr4k + environment: + - PUID=1000 + - PGID=1000 + expose: + - 8989 + image: ghcr.io/hotio/sonarr:release + restart: unless-stopped + labels: + - "traefik.enable=true" + - "traefik.http.routers.sonarr4k.rule=Host(`${SONARR4K_HOSTNAME}`)" + - "traefik.http.routers.sonarr4k.entrypoints=websecure" + - "traefik.http.routers.sonarr4k.tls.certresolver=myresolver" + - "traefik.http.services.sonarr4k.loadbalancer.server.port=8989" + - "flame.type=app" + - "flame.name=Sonarr4k" + - "flame.url=https://${SONARR4K_HOSTNAME}" + volumes: + - /mnt:/mnt + - /opt/sonarr4k:/config + - /opt/scripts:/scripts + - /usr/bin/rclone:/usr/bin/rclone + depends_on: + - rclone + healthcheck: + test: ["CMD-SHELL", "curl -s http://localhost:8989/ping | grep -q '\"status\": \"OK\"' || exit 1"] + interval: 1m + timeout: 10s + retries: 5 + start_period: 10s + profiles: + - debrid_media_server + - all - # sonarranime: - # container_name: sonarranime - # expose: - # - 8989 - # image: ghcr.io/hotio/sonarr:release - # environment: - # - PUID=1000 - # - PGID=1000 - # restart: unless-stopped - # labels: - # - "traefik.enable=true" - # - "traefik.http.routers.sonarranime.rule=Host(`${SONARRANIME_HOSTNAME}`)" - # - "traefik.http.routers.sonarranime.entrypoints=websecure" - # - "traefik.http.routers.sonarranime.tls.certresolver=myresolver" - # - "traefik.http.services.sonarranime.loadbalancer.server.port=8989" - # - "flame.type=app" - # - "flame.name=SonarrAnime" - # - "flame.url=https://${SONARRANIME_HOSTNAME}" - # volumes: - # - /mnt:/mnt - # - /opt/sonarranime:/config - # - /opt/scripts:/scripts - # - /usr/bin/rclone:/usr/bin/rclone - # depends_on: - # - rclone - # healthcheck: - # test: ["CMD-SHELL", "curl -s http://localhost:8989/ping | grep -q '\"status\": \"OK\"' || exit 1"] - # interval: 1m - # timeout: 10s - # retries: 5 - # start_period: 10s - # profiles: - # - debrid_media_server - # - all + sonarranime: + container_name: sonarranime + expose: + - 8989 + image: ghcr.io/hotio/sonarr:release + environment: + - PUID=1000 + - PGID=1000 + restart: unless-stopped + labels: + - "traefik.enable=true" + - "traefik.http.routers.sonarranime.rule=Host(`${SONARRANIME_HOSTNAME}`)" + - "traefik.http.routers.sonarranime.entrypoints=websecure" + - "traefik.http.routers.sonarranime.tls.certresolver=myresolver" + - "traefik.http.services.sonarranime.loadbalancer.server.port=8989" + - "flame.type=app" + - "flame.name=SonarrAnime" + - "flame.url=https://${SONARRANIME_HOSTNAME}" + volumes: + - /mnt:/mnt + - /opt/sonarranime:/config + - /opt/scripts:/scripts + - /usr/bin/rclone:/usr/bin/rclone + depends_on: + - rclone + healthcheck: + test: ["CMD-SHELL", "curl -s http://localhost:8989/ping | grep -q '\"status\": \"OK\"' || exit 1"] + interval: 1m + timeout: 10s + retries: 5 + start_period: 10s + profiles: + - debrid_media_server + - all - # autosync: - # image: ghcr.io/pukabyte/autosync:latest - # container_name: autosync - # expose: - # - 3536 - # volumes: - # - ./data/autosync/config.yaml:/app/config.yaml:ro - # restart: unless-stopped - # labels: - # - "traefik.enable=true" - # - "traefik.http.routers.autosync.rule=Host(`${AUTOSYNC_HOSTNAME}`)" - # - "traefik.http.routers.autosync.entrypoints=websecure" - # - "traefik.http.routers.autosync.tls.certresolver=myresolver" - # - "traefik.http.services.autosync.loadbalancer.server.port=3536" - # - "flame.type=app" - # - "flame.name=AutoSync" - # - "flame.url=https://${AUTOSYNC_HOSTNAME}" - # profiles: - # - debrid_media_server - # - all - # plex: - # image: plexinc/pms-docker:latest - # container_name: plex - # restart: unless-stopped - # ports: - # - 1900/udp - # - "32400:32400/tcp" - # - 32410/udp - # - 32412/udp - # - 32413/udp - # - 32414/udp - # - 32469/tcp - # - 8324/tcp - # expose: - # - 32400 - # environment: - # - PLEX_UID=1000 - # - PLEX_GID=1000 - # - PLEX_CLAIM=${PLEX_CLAIM} - # - TZ=Europe/London - # volumes: - # - /dev/shm:/dev/shm - # - /mnt/local/transcodes/plex:/transcode - # - /mnt:/mnt - # - /opt/plex:/config - # - /opt/scripts:/scripts - # labels: - # - "traefik.enable=true" - # - "traefik.http.routers.plex.rule=Host(`${PLEX_HOSTNAME}`)" - # - "traefik.http.routers.plex.entrypoints=websecure" - # - "traefik.http.routers.plex.tls.certresolver=myresolver" - # - "traefik.http.services.plex.loadbalancer.server.port=32400" - # - "traefik.http.middlewares.plex-https-redirect.redirectscheme.scheme=https" - # - "traefik.http.routers.plex.middlewares=plex-https-redirect" - # - "flame.type=app" - # - "flame.name=Plex" - # - "flame.url=https://${PLEX_HOSTNAME}" - # depends_on: - # - rclone - # profiles: - # - debrid_media_server - # - all - # - # jellyfin: - # image: lscr.io/linuxserver/jellyfin:latest - # restart: unless-stopped - # container_name: jellyfin - # expose: - # - 8096 - # environment: - # - TZ=${TZ:-UTC} - # volumes: - # - ./data/jellyfin:/config - # - /mnt:/mnt - # labels: - # - "traefik.enable=true" - # - "traefik.http.routers.jellyfin.rule=Host(`${JELLYFIN_HOSTNAME}`)" - # - "traefik.http.routers.jellyfin.tls=true" - # - "traefik.http.services.jellyfin.loadbalancer.server.port=8096" - # - "traefik.http.routers.jellyfin.tls.certresolver=myresolver" - # - "flame.type=app" - # - "flame.name=Jellyfin" - # - "flame.url=https://${JELLYFIN_HOSTNAME}" - # depends_on: - # - rclone - # profiles: - # - debrid_media_server - # - all - # jellyseer: - # image: fallenbagel/jellyseerr:latest - # container_name: jellyseer - # restart: unless-stopped - # expose: - # - 5055 - # environment: - # - TZ=${TZ:-UTC} - # - LOG_LEVEL=debug - # labels: - # - "traefik.enable=true" - # - "traefik.http.routers.jellyseer.rule=Host(`${JELLYSEER_HOSTNAME}`)" - # - "traefik.http.routers.jellyseer.entrypoints=websecure" - # - "traefik.http.routers.jellyseer.tls.certresolver=myresolver" - # - "flame.type=app" - # - "flame.name=Jellyseer" - # - "flame.url=https://${JELLYSEER_HOSTNAME}" - # volumes: - # - ./data/jellyseer:/app/config - # depends_on: - # - rclone - # profiles: - # - debrid_media_server - # - all - # - # zurg: - # image: ghcr.io/debridmediamanager/zurg-testing:v0.9.3-final - # container_name: zurg - # restart: unless-stopped - # healthcheck: - # test: curl -f localhost:9999/dav/version.txt || exit 1 - # ports: - # - 9999:9999 - # volumes: - # - ./data/zurg/config.yml:/app/config.yml - # - ./data/zurg/data:/app/data - # profiles: - # - debrid_media_server - # - all + recyclarr: + image: ghcr.io/recyclarr/recyclarr:latest + container_name: recyclarr + user: "1000:1000" + restart: unless-stopped + environment: + - TZ=${TZ:-UTC} + volumes: + - ./data/recyclarr:/config - # rclone: - # image: rclone/rclone:latest - # container_name: rclone - # restart: unless-stopped - # environment: - # TZ: ${TZ:-UTC} - # PUID: 1000 - # PGID: 1000 - # volumes: - # - /mnt/remote/realdebrid:/data:rshared - # - ./data/zurg/rclone.conf:/config/rclone/rclone.conf - # - /mnt:/mnt - # cap_add: - # - SYS_ADMIN - # security_opt: - # - apparmor:unconfined - # devices: - # - /dev/fuse:/dev/fuse:rwm - # depends_on: - # zurg: - # condition: service_healthy - # restart: true - # command: "mount zurg: /data --allow-non-empty --allow-other --uid=1000 --gid=1000 --umask=002 --dir-cache-time 10s" - # profiles: - # - debrid_media_server - # - all + autosync: + image: ghcr.io/pukabyte/autosync:latest + container_name: autosync + expose: + - 3536 + volumes: + - ./data/autosync/config.yaml:/app/config.yaml:ro + restart: unless-stopped + labels: + - "traefik.enable=true" + - "traefik.http.routers.autosync.rule=Host(`${AUTOSYNC_HOSTNAME}`)" + - "traefik.http.routers.autosync.entrypoints=websecure" + - "traefik.http.routers.autosync.tls.certresolver=myresolver" + - "traefik.http.services.autosync.loadbalancer.server.port=3536" + - "flame.type=app" + - "flame.name=AutoSync" + - "flame.url=https://${AUTOSYNC_HOSTNAME}" + profiles: + - debrid_media_server + - all + plex: + image: plexinc/pms-docker:latest + container_name: plex + restart: unless-stopped + ports: + - 1900/udp + - "32400:32400/tcp" + - 32410/udp + - 32412/udp + - 32413/udp + - 32414/udp + - 32469/tcp + - 8324/tcp + expose: + - 32400 + environment: + - PLEX_UID=1000 + - PLEX_GID=1000 + - PLEX_CLAIM=${PLEX_CLAIM} + - TZ=Europe/London + volumes: + - /dev/shm:/dev/shm + - /mnt/local/transcodes/plex:/transcode + - /mnt:/mnt + - /opt/plex:/config + - /opt/scripts:/scripts + labels: + - "traefik.enable=true" + - "traefik.http.routers.plex.rule=Host(`${PLEX_HOSTNAME}`)" + - "traefik.http.routers.plex.entrypoints=websecure" + - "traefik.http.routers.plex.tls.certresolver=myresolver" + - "traefik.http.services.plex.loadbalancer.server.port=32400" + - "traefik.http.middlewares.plex-https-redirect.redirectscheme.scheme=https" + - "traefik.http.routers.plex.middlewares=plex-https-redirect" + - "flame.type=app" + - "flame.name=Plex" + - "flame.url=https://${PLEX_HOSTNAME}" + depends_on: + - rclone + profiles: + - debrid_media_server + - all + + jellyfin: + image: lscr.io/linuxserver/jellyfin:latest + restart: unless-stopped + container_name: jellyfin + expose: + - 8096 + environment: + - TZ=${TZ:-UTC} + volumes: + - ./data/jellyfin:/config + - /mnt:/mnt + labels: + - "traefik.enable=true" + - "traefik.http.routers.jellyfin.rule=Host(`${JELLYFIN_HOSTNAME}`)" + - "traefik.http.routers.jellyfin.tls=true" + - "traefik.http.services.jellyfin.loadbalancer.server.port=8096" + - "traefik.http.routers.jellyfin.tls.certresolver=myresolver" + - "flame.type=app" + - "flame.name=Jellyfin" + - "flame.url=https://${JELLYFIN_HOSTNAME}" + depends_on: + - rclone + profiles: + - debrid_media_server + - all + + jellyseer: + image: fallenbagel/jellyseerr:latest + container_name: jellyseer + restart: unless-stopped + expose: + - 5055 + environment: + - TZ=${TZ:-UTC} + - LOG_LEVEL=debug + labels: + - "traefik.enable=true" + - "traefik.http.routers.jellyseer.rule=Host(`${JELLYSEER_HOSTNAME}`)" + - "traefik.http.routers.jellyseer.entrypoints=websecure" + - "traefik.http.routers.jellyseer.tls.certresolver=myresolver" + - "flame.type=app" + - "flame.name=Jellyseer" + - "flame.url=https://${JELLYSEER_HOSTNAME}" + volumes: + - ./data/jellyseer:/app/config + depends_on: + - rclone + profiles: + - debrid_media_server + - all + + zurg: + image: ghcr.io/debridmediamanager/zurg-testing:v0.9.3-final + container_name: zurg + restart: unless-stopped + healthcheck: + test: curl -f localhost:9999/dav/version.txt || exit 1 + ports: + - 9999:9999 + volumes: + - ./data/zurg/config.yml:/app/config.yml + - ./data/zurg/data:/app/data + profiles: + - debrid_media_server + - all + + rclone: + image: rclone/rclone:latest + container_name: rclone + restart: unless-stopped + environment: + TZ: ${TZ:-UTC} + PUID: 1000 + PGID: 1000 + volumes: + - /mnt/remote/realdebrid:/data:rshared + - ./data/zurg/rclone.conf:/config/rclone/rclone.conf + - /mnt:/mnt + cap_add: + - SYS_ADMIN + security_opt: + - apparmor:unconfined + devices: + - /dev/fuse:/dev/fuse:rwm + depends_on: + zurg: + condition: service_healthy + restart: true + command: "mount zurg: /data --allow-non-empty --allow-other --uid=1000 --gid=1000 --umask=002 --dir-cache-time 10s" + profiles: + - debrid_media_server + - all volumes: zilean-tmp: diff --git a/data/blackhole/.env b/data/blackhole/.env new file mode 100644 index 0000000..d810392 --- /dev/null +++ b/data/blackhole/.env @@ -0,0 +1,46 @@ +#-------------------------------# +# REALDEBRID - BLACKHOLE, REPAIR # +#-------------------------------# + +REALDEBRID_ENABLED=true +REALDEBRID_HOST="https://api.real-debrid.com/rest/1.0/" +REALDEBRID_API_KEY= # https://real-debrid.com/apitoken +REALDEBRID_MOUNT_TORRENTS_PATH="/mnt/remote/realdebrid/__all__" + +#-----------------------# +# BLACKHOLE - BLACKHOLE # +#-----------------------# + +BLACKHOLE_BASE_WATCH_PATH="/mnt/symlinks" +BLACKHOLE_RADARR_PATH="radarr" +BLACKHOLE_SONARR_PATH="sonarr" +BLACKHOLE_FAIL_IF_NOT_CACHED=true +BLACKHOLE_RD_MOUNT_REFRESH_SECONDS=200 +BLACKHOLE_WAIT_FOR_TORRENT_TIMEOUT=300 +BLACKHOLE_HISTORY_PAGE_SIZE=500 + +#-----------------------------------------------------------------------------------------------# +# DISCORD - BLACKHOLE, WATCHLIST, PLEX AUTHENTICATION, PLEX REQUEST, MONITOR RAM, RECLAIM SPACE # +#-----------------------------------------------------------------------------------------------# + +DISCORD_ENABLED=false +DISCORD_UPDATE_ENABLED=false +DISCORD_WEBHOOK_URL= + +#-----------------# +# REPAIR - REPAIR # +#-----------------# + +REPAIR_REPAIR_INTERVAL="10m" +REPAIR_RUN_INTERVAL="1d" + +#-----------------------# +# GENERAL CONFIGURATION # +#-----------------------# + +PYTHONUNBUFFERED=TRUE +PUID=1000 +PGID=1000 +UMASK=002 +DOCKER_NETWORK="scripts_default" +DOCKER_NETWORK_EXTERNAL=false \ No newline at end of file diff --git a/honey.config.json b/data/honey/config.json similarity index 100% rename from honey.config.json rename to data/honey/config.json diff --git a/.env.mediafusion b/data/mediafusion/.env similarity index 100% rename from .env.mediafusion rename to data/mediafusion/.env diff --git a/data/recyclarr/config.yml b/data/recyclarr/config.yml new file mode 100644 index 0000000..bd51a2b --- /dev/null +++ b/data/recyclarr/config.yml @@ -0,0 +1,352 @@ +radarr: + radarr_default: + + delete_old_custom_formats: true + replace_existing_custom_formats: true + + include: + # Comment out any of the following includes to disable them + - template: radarr-quality-definition-movie + - template: radarr-quality-profile-remux-web-1080p + - template: radarr-custom-formats-remux-web-1080p + + # Custom Formats: https://recyclarr.dev/wiki/yaml/config-reference/custom-formats/ + custom_formats: + # Audio + - trash_ids: + # Uncomment the next section to enable Advanced Audio Formats + # - 496f355514737f7d83bf7aa4d24f8169 # TrueHD Atmos + # - 2f22d89048b01681dde8afe203bf2e95 # DTS X + # - 417804f7f2c4308c1f4c5d380d4c4475 # ATMOS (undefined) + # - 1af239278386be2919e1bcee0bde047e # DD+ ATMOS + # - 3cafb66171b47f226146a0770576870f # TrueHD + # - dcf3ec6938fa32445f590a4da84256cd # DTS-HD MA + # - a570d4a0e56a2874b64e5bfa55202a1b # FLAC + # - e7c2fcae07cbada050a0af3357491d7b # PCM + # - 8e109e50e0a0b83a5098b056e13bf6db # DTS-HD HRA + # - 185f1dd7264c4562b9022d963ac37424 # DD+ + # - f9f847ac70a0af62ea4a08280b859636 # DTS-ES + # - 1c1a4c5e823891c75bc50380a6866f73 # DTS + # - 240770601cc226190c367ef59aba7463 # AAC + # - c2998bd0d90ed5621d8df281e839436e # DD + assign_scores_to: + - name: Remux + WEB 1080p + + # Movie Versions + - trash_ids: + # Uncomment any of the following lines to prefer these movie versions + # - 0f12c086e289cf966fa5948eac571f44 # Hybrid + # - 570bc9ebecd92723d2d21500f4be314c # Remaster + # - eca37840c13c6ef2dd0262b141a5482f # 4K Remaster + # - e0c07d59beb37348e975a930d5e50319 # Criterion Collection + # - 9d27d9d2181838f76dee150882bdc58c # Masters of Cinema + # - db9b4c4b53d312a3ca5f1378f6440fc9 # Vinegar Syndrome + # - 957d0f44b592285f26449575e8b1167e # Special Edition + # - eecf3a857724171f968a66cb5719e152 # IMAX + # - 9f6cbff8cfe4ebbc1bde14c7b7bec0de # IMAX Enhanced + assign_scores_to: + - name: Remux + WEB 1080p + + # Optional + - trash_ids: + # - b6832f586342ef70d9c128d40c07b872 # Bad Dual Groups + # - cc444569854e9de0b084ab2b8b1532b2 # Black and White Editions + # - 90cedc1fea7ea5d11298bebd3d1d3223 # EVO (no WEBDL) + - ae9b7c9ebde1f3bd336a8cbd1ec4c5e5 # No-RlsGroup + # - 7357cf5161efbf8c4d5d0c30b4815ee2 # Obfuscated + # - 5c44f52a8714fdd79bb4d98e2673be1f # Retags + # - f537cf427b64c38c8e36298f657e4828 # Scene + assign_scores_to: + - name: Remux + WEB 1080p + + - trash_ids: + # Uncomment the next six lines to allow x265 HD releases with HDR/DV + # - dc98083864ea246d05a42df0d05f81cc # x265 (HD) + # assign_scores_to: + # - name: Remux + WEB 1080p + # score: 0 + # - trash_ids: + # - 839bea857ed2c0a8e084f3cbdbd65ecb # x265 (no HDR/DV) + assign_scores_to: + - name: Remux + WEB 1080p + + + radarr_anime: + delete_old_custom_formats: true + replace_existing_custom_formats: true + + media_naming: + folder: default + + movie: + rename: true + standard: anime + include: + # Comment out any of the following includes to disable them + - template: radarr-quality-definition-movie + - template: radarr-quality-profile-anime + - template: radarr-custom-formats-anime + +# Custom Formats: https://recyclarr.dev/wiki/yaml/config-reference/custom-formats/ + custom_formats: + - trash_ids: + - 064af5f084a0a24458cc8ecd3220f93f # Uncensored + assign_scores_to: + - name: Remux-1080p - Anime + score: 0 # Adjust scoring as desired + + - trash_ids: + - a5d148168c4506b55cf53984107c396e # 10bit + assign_scores_to: + - name: Remux-1080p - Anime + score: 0 # Adjust scoring as desired + + - trash_ids: + - 4a3b087eea2ce012fcc1ce319259a3be # Anime Dual Audio + assign_scores_to: + - name: Remux-1080p - Anime + score: 0 # Adjust scoring as desired + + radarr_4k: + delete_old_custom_formats: true + replace_existing_custom_formats: true + + media_naming: + folder: default + + movie: + rename: true + standard: standard + + include: + # Comment out any of the following includes to disable them + - template: radarr-quality-definition-movie + - template: radarr-quality-profile-remux-web-2160p + - template: radarr-custom-formats-remux-web-2160p + + # Custom Formats: https://recyclarr.dev/wiki/yaml/config-reference/custom-formats/ + custom_formats: + - trash_ids: + # Audio + # Uncomment the next section to enable Advanced Audio Formats + # - 496f355514737f7d83bf7aa4d24f8169 # TrueHD Atmos + # - 2f22d89048b01681dde8afe203bf2e95 # DTS X + # - 417804f7f2c4308c1f4c5d380d4c4475 # ATMOS (undefined) + # - 1af239278386be2919e1bcee0bde047e # DD+ ATMOS + # - 3cafb66171b47f226146a0770576870f # TrueHD + # - dcf3ec6938fa32445f590a4da84256cd # DTS-HD MA + # - a570d4a0e56a2874b64e5bfa55202a1b # FLAC + # - e7c2fcae07cbada050a0af3357491d7b # PCM + # - 8e109e50e0a0b83a5098b056e13bf6db # DTS-HD HRA + # - 185f1dd7264c4562b9022d963ac37424 # DD+ + # - f9f847ac70a0af62ea4a08280b859636 # DTS-ES + # - 1c1a4c5e823891c75bc50380a6866f73 # DTS + # - 240770601cc226190c367ef59aba7463 # AAC + # - c2998bd0d90ed5621d8df281e839436e # DD + assign_scores_to: + - name: Remux + WEB 2160p + + # Movie Versions + - trash_ids: + # Uncomment any of the following lines to prefer these movie versions + # - 0f12c086e289cf966fa5948eac571f44 # Hybrid + # - 570bc9ebecd92723d2d21500f4be314c # Remaster + # - eca37840c13c6ef2dd0262b141a5482f # 4K Remaster + # - e0c07d59beb37348e975a930d5e50319 # Criterion Collection + # - 9d27d9d2181838f76dee150882bdc58c # Masters of Cinema + # - db9b4c4b53d312a3ca5f1378f6440fc9 # Vinegar Syndrome + # - 957d0f44b592285f26449575e8b1167e # Special Edition + # - eecf3a857724171f968a66cb5719e152 # IMAX + # - 9f6cbff8cfe4ebbc1bde14c7b7bec0de # IMAX Enhanced + assign_scores_to: + - name: Remux + WEB 2160p + + # Optional + - trash_ids: + # - b6832f586342ef70d9c128d40c07b872 # Bad Dual Groups + # - cc444569854e9de0b084ab2b8b1532b2 # Black and White Editions + # - 90cedc1fea7ea5d11298bebd3d1d3223 # EVO (no WEBDL) + - ae9b7c9ebde1f3bd336a8cbd1ec4c5e5 # No-RlsGroup + # - 7357cf5161efbf8c4d5d0c30b4815ee2 # Obfuscated + # - 5c44f52a8714fdd79bb4d98e2673be1f # Retags + # - f537cf427b64c38c8e36298f657e4828 # Scene + assign_scores_to: + - name: Remux + WEB 2160p + + - trash_ids: + # Uncomment the next six lines to allow x265 HD releases with HDR/DV + # - dc98083864ea246d05a42df0d05f81cc # x265 (HD) + # assign_scores_to: + # - name: Remux + WEB 2160p + # score: 0 + # - trash_ids: + # - 839bea857ed2c0a8e084f3cbdbd65ecb # x265 (no HDR/DV) + assign_scores_to: + - name: Remux + WEB 2160p + + - trash_ids: + # Comment out the next line if you and all of your users' setups are fully DV compatible + # - 923b6abef9b17f937fab56cfcf89e1f1 # DV (WEBDL) + + # HDR10+ Boost - Uncomment the next two lines if any of your devices DO support HDR10+ + - b17886cb4158d9fea189859409975758 # HDR10Plus Boost + - 55a5b50cb416dea5a50c4955896217ab # DV HDR10+ Boost + assign_scores_to: + - name: Remux + WEB 2160p + + # Optional SDR + # Only ever use ONE of the following custom formats: + # SDR - block ALL SDR releases + # SDR (no WEBDL) - block UHD/4k Remux and Bluray encode SDR releases, but allow SDR WEB + - trash_ids: + - 9c38ebb7384dada637be8899efa68e6f # SDR + # - 25c12f78430a3a23413652cbd1d48d77 # SDR (no WEBDL) + assign_scores_to: + - name: Remux + WEB 2160p + +sonarr: + + sonarr_default: + delete_old_custom_formats: true + replace_existing_custom_formats: true + + media_naming: + series: default + season: default + episodes: + rename: true + standard: default + daily: default + anime: default + + include: + # Comment out any of the following includes to disable them + - template: sonarr-quality-definition-series + # Choose between the standard or alternative quality profile setup (choose one only) + # - template: sonarr-v4-quality-profile-web-1080p- + - template: sonarr-v4-quality-profile-web-1080p-alternative + - template: sonarr-v4-custom-formats-web-1080p + +# Custom Formats: https://recyclarr.dev/wiki/yaml/config-reference/custom-formats/ + custom_formats: + # Optional + - trash_ids: + # - 32b367365729d530ca1c124a0b180c64 # Bad Dual Groups + # - 82d40da2bc6923f41e14394075dd4b03 # No-RlsGroup + # - e1a997ddb54e3ecbfe06341ad323c458 # Obfuscated + # - 06d66ab109d4d2eddb2794d21526d140 # Retags + # - 1b3994c551cbb92a2c781af061f4ab44 # Scene + assign_scores_to: + - name: WEB-1080p + + - trash_ids: + # Uncomment the next six lines to allow x265 HD releases with HDR/DV + # - 47435ece6b99a0b477caf360e79ba0bb # x265 (HD) + # assign_scores_to: + # - name: WEB-1080p + # score: 0 + # - trash_ids: + # - 9b64dff695c2115facf1b6ea59c9bd07 # x265 (no HDR/DV) + assign_scores_to: + - name: WEB-1080p + + sonarr_4k: + delete_old_custom_formats: true + replace_existing_custom_formats: true + + media_naming: + series: default + season: default + episodes: + rename: true + standard: default + daily: default + anime: default + include: + # Comment out any of the following includes to disable them + - template: sonarr-quality-definition-series + # Choose between the standard or alternative quality profile setup (choose one only) + - template: sonarr-v4-quality-profile-web-2160p + # - template: sonarr-v4-quality-profile-web-2160p-alternative + - template: sonarr-v4-custom-formats-web-2160p + +# Custom Formats: https://recyclarr.dev/wiki/yaml/config-reference/custom-formats/ + custom_formats: + # HDR Formats + - trash_ids: + # Comment out the next line if you and all of your users' setups are fully DV compatible + - 9b27ab6498ec0f31a3353992e19434ca # DV (WEBDL) + + # HDR10+ Boost - Uncomment the next two lines if any of your devices DO support HDR10+ + # - 0dad0a507451acddd754fe6dc3a7f5e7 # HDR10+ Boost + # - 385e9e8581d33133c3961bdcdeffb7b4 # DV HDR10+ Boost + assign_scores_to: + - name: WEB-2160p + + # Optional + - trash_ids: + # - 32b367365729d530ca1c124a0b180c64 # Bad Dual Groups + # - 82d40da2bc6923f41e14394075dd4b03 # No-RlsGroup + # - e1a997ddb54e3ecbfe06341ad323c458 # Obfuscated + # - 06d66ab109d4d2eddb2794d21526d140 # Retags + # - 1b3994c551cbb92a2c781af061f4ab44 # Scene + assign_scores_to: + - name: WEB-2160p + + - trash_ids: + # Uncomment the next six lines to allow x265 HD releases with HDR/DV + # - 47435ece6b99a0b477caf360e79ba0bb # x265 (HD) + # assign_scores_to: + # - name: WEB-2160p + # score: 0 + # - trash_ids: + # - 9b64dff695c2115facf1b6ea59c9bd07 # x265 (no HDR/DV) + assign_scores_to: + - name: WEB-2160p + + # Optional SDR + # Only ever use ONE of the following custom formats: + # SDR - block ALL SDR releases + # SDR (no WEBDL) - block UHD/4k Remux and Bluray encode SDR releases, but allow SDR WEB + - trash_ids: + - 2016d1676f5ee13a5b7257ff86ac9a93 # SDR + # - 83304f261cf516bb208c18c54c0adf97 # SDR (no WEBDL) + assign_scores_to: + - name: WEB-2160p + sonarr_anime: + delete_old_custom_formats: true + replace_existing_custom_formats: true + + media_naming: + series: default + season: default + episodes: + rename: true + standard: default + daily: default + anime: default + include: + # Comment out any of the following includes to disable them + - template: sonarr-quality-definition-anime + - template: sonarr-v4-quality-profile-anime + - template: sonarr-v4-custom-formats-anime + +# Custom Formats: https://recyclarr.dev/wiki/yaml/config-reference/custom-formats/ + custom_formats: + - trash_ids: + - 026d5aadd1a6b4e550b134cb6c72b3ca # Uncensored + assign_scores_to: + - name: Remux-1080p - Anime + score: 0 # Adjust scoring as desired + + - trash_ids: + - b2550eb333d27b75833e25b8c2557b38 # 10bit + assign_scores_to: + - name: Remux-1080p - Anime + score: 0 # Adjust scoring as desired + + - trash_ids: + - 418f50b10f1907201b6cfdf881f467b7 # Anime Dual Audio + assign_scores_to: + - name: Remux-1080p - Anime + score: 0 # Adjust scoring as desired diff --git a/data/recyclarr/secrets.yml b/data/recyclarr/secrets.yml new file mode 100644 index 0000000..2134eea --- /dev/null +++ b/data/recyclarr/secrets.yml @@ -0,0 +1,17 @@ +radarr_default_base_url: http://radarr:7878 +radarr_default_api_key: + +radarr_4k_base_url: http://radarr4k:7878 +radarr_4k_api_key: + +radarr_anime_base_url: http://radarranime:7878 +radarr_anime_api_key: + +sonarr_default_base_url: http://sonarr:8989 +sonarr_default_api_key: + +sonarr_4k_base_url: http://sonarr4k:8989 +sonarr_4k_api_key: + +sonarr_anime_base_url: http://sonarranime:8989 +sonarr_anime_api_key: \ No newline at end of file diff --git a/data/zurg/config.yml b/data/zurg/config.yml new file mode 100644 index 0000000..213cb1b --- /dev/null +++ b/data/zurg/config.yml @@ -0,0 +1,28 @@ +# Zurg configuration version +zurg: v1 +token: ENTER REAL-DEBRID API TOKEN HERE # https://real-debrid.com/apitoken +# host: "[::]" +# port: 9999 +# username: +# password: +# proxy: +api_rate_limit_per_minute: 60 +torrents_rate_limit_per_minute: 25 +concurrent_workers: 32 +check_for_changes_every_secs: 10 +# repair_every_mins: 60 +ignore_renames: true +retain_rd_torrent_name: true +retain_folder_name_extension: true +enable_repair: false +auto_delete_rar_torrents: false +get_torrents_count: 5000 +# api_timeout_secs: 15 +# download_timeout_secs: 10 +# enable_download_mount: false +# rate_limit_sleep_secs: 6 +# retries_until_failed: 2 +# network_buffer_size: 4194304 # 4MB +serve_from_rclone: true +# verify_download_link: false +# force_ipv6: false \ No newline at end of file diff --git a/data/zurg/rclone.conf b/data/zurg/rclone.conf new file mode 100644 index 0000000..5b0ecd2 --- /dev/null +++ b/data/zurg/rclone.conf @@ -0,0 +1,5 @@ +[zurg] +type = webdav +url = http://zurg:9999/dav +vendor = other +pacer_min_sleep = 0 \ No newline at end of file diff --git a/install.sh b/install.sh deleted file mode 100644 index 2297d58..0000000 --- a/install.sh +++ /dev/null @@ -1,6 +0,0 @@ -curl https://raw.githubusercontent.com/Viren070/stremio-addons-docker-compose-template/refs/heads/main/.env -o .env -curl https://raw.githubusercontent.com/Viren070/stremio-addons-docker-compose-template/refs/heads/main/compose.yaml -o compose.yaml -mkdir -p ./data/mediafusion -mkdir -p ./data/honey -curl https://raw.githubusercontent.com/Viren070/stremio-addons-docker-compose-template/refs/heads/main/honey.config.json -o ./data/honey/config.json -curl https://raw.githubusercontent.com/Viren070/stremio-addons-docker-compose-template/refs/heads/main/.env.mediafusion -o ./data/mediafusion/.env \ No newline at end of file