diff --git a/.env b/.env index 3c3917a..a606efc 100644 --- a/.env +++ b/.env @@ -9,8 +9,9 @@ TZ=Etc/UTC # Directory configuration. This .env file should be in /opt/docker, using the defaults below. # You MUST use absolute paths, otherwise each bind mount would be created relative to each compose file, and not # the current directory -DOCKER_DATA_DIR=/opt/docker/data -DOCKER_APP_DIR=/opt/docker/apps +DOCKER_DIR=/opt/docker +DOCKER_DATA_DIR=${DOCKER_DIR}/data +DOCKER_APP_DIR=${DOCKER_DIR}/apps # The process user ID and group ID to use for applicable containers. # Run 'id' to see your UID and GID @@ -86,7 +87,7 @@ AUTHELIA_JWT_SECRET="" # tell you how to add users # Currently there is only one user (user1 with password 'password') and it has access to everything. # If you would like to configure access control policies, you will need to edit the access_control key -# in the ${DOCKER_DATA_DIR}/data/authelia/config/configuration.yml file. +# in the ${DOCKER_APP_DIR}/authelia/config/configuration.yml file. # ========================================================== # CLOUDFLARE DDNS @@ -185,6 +186,8 @@ COMPOSE_PROJECT_NAME=aio COMPOSE_REMOVE_ORPHANS=true # Delegate building to bake for improved performance. COMPOSE_BAKE=true +# Defining the location of the compose file. +COMPOSE_FILE=${DOCKER_DIR}/compose.yaml # Whether to change the name of the network that all containers run on or to connect to an external network. # Reference: https://docs.docker.com/compose/how-tos/networking/#use-a-pre-existing-network DOCKER_NETWORK=aio_network diff --git a/apps/aiostreams/.env b/apps/aiostreams/.env index 3ec78f4..65d73ce 100644 --- a/apps/aiostreams/.env +++ b/apps/aiostreams/.env @@ -521,7 +521,7 @@ EASYNEWS_URL=https://ea627ddf0ee7-easynews.baby-beamup.club/ # DEFAULT_EASYNEWS_TIMEOUT= # ------------ DEBRIDIO ----------- -DEBRIDIO_URL=https://debridio.adobotec.com/ +DEBRIDIO_URL=https://addon.debridio.com/ # DEFAULT_DEBRIDIO_TIMEOUT= # ------------ DEBRIDIO TVDB ------------ diff --git a/apps/aiostremio/compose.yaml b/apps/aiostremio/compose.yaml index fdfad15..4401529 100644 --- a/apps/aiostremio/compose.yaml +++ b/apps/aiostremio/compose.yaml @@ -6,7 +6,7 @@ services: expose: - 8469 volumes: - - ${DOCKER_DATA_DIR}/aiostremio:/app/data + - ./config.json:/app/data/config.json - ${DOCKER_DATA_DIR}/aiostremio/db:/app/db env_file: - .env diff --git a/data/aiostremio/config.json b/apps/aiostremio/config.json similarity index 100% rename from data/aiostremio/config.json rename to apps/aiostremio/config.json diff --git a/apps/authelia/.env b/apps/authelia/.env index 4cdf547..f2976a0 100644 --- a/apps/authelia/.env +++ b/apps/authelia/.env @@ -23,13 +23,13 @@ AUTHELIA_WEBAUTHN_DISPLAY_NAME="Authelia" # The valid users for Authelia are stored in the users.yml file. -# This is located in `${DOCKER_DATA_DIR}/data/authelia/config/users.yml` +# This is located in `./config/users.yml` # You must add your users to this file in order to be able to access secured services. # Note: When you first login with a user, Authelia will ask for a code that it says it sent to you. # This will be located in the notification.txt file in the same directory as the users.yml file. -# You can run this command to view the file, replacing ${DOCKER_DATA_DIR} with its actual value: -# cat ${DOCKER_DATA_DIR}/data/authelia/config/notification.txt +# You can run this command to view the file: +# cat /opt/docker/apps/authelia/config/notification.txt # A list of domains to apply page specific rules to. # Although we can't fully protect Stremio addons, we can still add authentication to specific pages like the configuration pages. diff --git a/apps/authelia/compose.yaml b/apps/authelia/compose.yaml index 4718bf5..281274b 100644 --- a/apps/authelia/compose.yaml +++ b/apps/authelia/compose.yaml @@ -24,7 +24,7 @@ services: - "traefik.http.middlewares.authelia.forwardAuth.trustForwardHeader=true" - "traefik.http.middlewares.authelia.forwardAuth.authResponseHeaders=Remote-User,Remote-Groups,Remote-Email,Remote-Name" volumes: - - '${DOCKER_DATA_DIR}/authelia/config:/config' + - './config:/config' depends_on: authelia_redis: condition: service_healthy diff --git a/data/authelia/config/assets/empty b/apps/authelia/config/assets/empty similarity index 100% rename from data/authelia/config/assets/empty rename to apps/authelia/config/assets/empty diff --git a/data/authelia/config/certificates/empty b/apps/authelia/config/certificates/empty similarity index 100% rename from data/authelia/config/certificates/empty rename to apps/authelia/config/certificates/empty diff --git a/data/authelia/config/configuration.yml b/apps/authelia/config/configuration.yml similarity index 100% rename from data/authelia/config/configuration.yml rename to apps/authelia/config/configuration.yml diff --git a/data/authelia/config/users.yml b/apps/authelia/config/users.yml similarity index 100% rename from data/authelia/config/users.yml rename to apps/authelia/config/users.yml diff --git a/apps/autosync/compose.yaml b/apps/autosync/compose.yaml index 44d98d6..98c05d9 100644 --- a/apps/autosync/compose.yaml +++ b/apps/autosync/compose.yaml @@ -18,7 +18,7 @@ services: - "traefik.http.routers.autosync.middlewares=authelia@docker" - "traefik.http.services.autosync.loadbalancer.server.port=3536" volumes: - - ${DOCKER_DATA_DIR}/autosync/config.yaml:/app/config.yaml + - ./config.yaml:/app/config.yaml - /etc/localtime:/etc/localtime:ro - /mnt:/mnt:rslave depends_on: diff --git a/data/autosync/config.yml b/apps/autosync/config.yaml similarity index 100% rename from data/autosync/config.yml rename to apps/autosync/config.yaml diff --git a/apps/borgmatic/.env b/apps/borgmatic/.env new file mode 100644 index 0000000..9cf512b --- /dev/null +++ b/apps/borgmatic/.env @@ -0,0 +1,33 @@ +# 🧠 Borgmatic + BorgBase Setup +# Coupled with https://www.borgbase.com/ β€” which offers 10 GB free encrypted backup storage. +# Thanks to efficient deduplication and compression, actual usage remains low even for large datasets. + +# πŸ” Your BorgBase repository SSH path +BORG_REPO_URL=ssh://USERNAME@repo.borgbase.com:22/REPO-ID + +# πŸ—οΈ Borg encryption passphrase (do not hardcode in config.yaml) +BORG_PASSPHRASE="your-strong-passphrase" + +# πŸ•“ Backup cron schedule (Every Sunday at 4 AM) +BACKUP_CRON=0 4 * * 0 +RUN_ON_STARTUP=true + +# 🌍 These values are inherited from your root /opt/docker/.env +# TZ=Asia/Kolkata +# PUID=1001 +# PGID=1001 + +# βœ… One-time SSH key setup (run before container start): +# mkdir -p /opt/docker/data/borgmatic/.ssh +# ssh-keygen -t ed25519 -f /opt/docker/data/borgmatic/.ssh/id_ed25519 -N "" +# βž• Copy the id_ed25519.pub content to your BorgBase repository SSH key section + +# πŸ“ Optional (can also be auto-created at container start): +# mkdir -p /opt/docker/data/borgmatic/{repo,borg,cache,logs} + +# πŸ”‘ After initializing the repo, export your Borg key! +# docker exec -it borgmatic sh +# borg key export $BORG_REPO_URL /root/.config/borg/borgbase-key-backup +# exit +# docker cp borgmatic:/root/.config/borg/borgbase-key-backup ~/borgbase-key-backup +# πŸ“Œ Keep ~/borgbase-key-backup in a safe, secure place (e.g., password manager or external drive) diff --git a/apps/borgmatic/compose.yaml b/apps/borgmatic/compose.yaml new file mode 100644 index 0000000..f9490fe --- /dev/null +++ b/apps/borgmatic/compose.yaml @@ -0,0 +1,26 @@ +services: + borgmatic: + image: ghcr.io/borgmatic-collective/borgmatic:latest + container_name: borgmatic + restart: unless-stopped + + volumes: + - /opt/docker:/mnt/source:ro # πŸ” Maps your entire stack (read-only) as the backup source + - ${DOCKER_DATA_DIR}/borgmatic:/etc/borgmatic # βš™οΈ Config folder (holds config.yaml + .env) + - ${DOCKER_DATA_DIR}/borgmatic/.ssh:/root/.ssh # πŸ” SSH key pair for BorgBase access + - ${DOCKER_DATA_DIR}/borgmatic/repo:/mnt/borg-repository # πŸ’Ύ Optional local repo folder (not used) + - ${DOCKER_DATA_DIR}/borgmatic/borg:/root/.config/borg # 🧠 Borg key and config files + - ${DOCKER_DATA_DIR}/borgmatic/cache:/root/.cache/borg # ⚑ Cache for deduplication and performance + + environment: + - TZ=${TZ} # 🌍 Timezone from main .env + - PUID=${PUID} # πŸ‘€ Your user ID (for file permissions) + - PGID=${PGID} # πŸ‘₯ Your group ID + - BORG_PASSPHRASE=${BORG_PASSPHRASE} # πŸ” Secure passphrase (don't hardcode in config.yaml) + - BORG_REPO_URL=${BORG_REPO_URL} # πŸ“¦ BorgBase SSH repository path + - BACKUP_CRON=0 4 * * 0 # πŸ•“ Weekly backup: Every Sunday at 4 AM + - RUN_ON_STARTUP=true # πŸš€ Trigger a backup when the container starts + + profiles: + - borgmatic # 🧩 Use this profile to selectively start this service + - all # βœ… Include in full stack if needed diff --git a/apps/debridav/.env b/apps/debridav/.env index 89e91cc..9d8121f 100644 --- a/apps/debridav/.env +++ b/apps/debridav/.env @@ -1,24 +1,27 @@ -# -------------- DebriDav Internal Paths -------------- +# -------------- Paths -------------- -# Internal path used inside the DebriDav container (should not be changed) +# DebriDav's internal storage ( NOT the path where DebriDav's WebDAV server should be mounted ) +# This only affects the internals of the DebriDav container, and should not need to be changed. DEBRIDAV_ROOT_PATH=/mnt -# Path on host that maps to DEBRIDAV_ROOT_PATH inside container -DEBRIDAV_ROOT_HOST_FS=/mnt +# Where DEBRIDAV_ROOT_PATH will be mapped to on the host FS +DEBRIDAV_ROOT_HOST_FS=/mnt/remote/debridav -# Subdirectory within DEBRIDAV_ROOT_PATH for downloads +# Where downloads will be placed, relative to DEBRIDAV_ROOT_PATH DEBRIDAV_DOWNLOAD_PATH=/downloads -# Path where DebriDav's WebDAV will be mounted inside other containers (e.g. Sonarr/Radarr) +# Where DebriDav's WebDAV server will be mounted inside the other containers ( Radarr, Sonarr etc). +# The Media Root of the arrs must be set under this directory +# Downloads will be visible to the other containers in /data/downloads with this configuration DEBRIDAV_MOUNT_PATH_CONTAINERS=/mnt/remote/debridav -# Host path where rclone mounts DebriDav WebDAV +# Where DebriDavs WebDAV server will be mounted on the host FS DEBRIDAV_MOUNT_PATH_HOST_FS=/mnt/remote/debridav # -------------- DebriDav Web Interface -------------- # Port on the host to expose DebriDav’s web interface (internal port is always 8080) -DEBRIDAV_PORT=8889 +DEBRIDAV_PORT=8888 # -------------- Debrid Providers Configuration -------------- @@ -30,7 +33,7 @@ DEBRIDAV_DEBRID_CLIENTS=premiumize PREMIUMIZE_API_KEY=your_premiumize_api_key # Leave these blank if not using for now -REAL_DEBRID_API_KEY= +REALDEBRID_API_KEY= EASYNEWS_USERNAME= EASYNEWS_PASSWORD= TORBOX_API_KEY= @@ -54,7 +57,7 @@ RADARR_API_KEY=your_radarr_api_key # -------------- Database Configuration -------------- # Postgres DB connection for DebriDav metadata -DEBRIDAV_DB_HOST=postgres-debridav +DEBRIDAV_DB_HOST=debridav_postgres DEBRIDAV_DB_PORT=5432 DEBRIDAV_DB_DATABASE_NAME=debridav DEBRIDAV_DB_USERNAME=debridav diff --git a/apps/debridav/compose.yaml b/apps/debridav/compose.yaml index 0d3145d..db62373 100644 --- a/apps/debridav/compose.yaml +++ b/apps/debridav/compose.yaml @@ -1,6 +1,6 @@ services: debridav: - image: ghcr.io/skjaere/debridav:v0 + image: ghcr.io/skjaere/debridav:latest container_name: debridav restart: unless-stopped user: "${PUID}:${PGID}" @@ -13,7 +13,6 @@ services: - PGID=${PGID} - UMASK=002 - TZ=${TZ} - - DEBRIDAV_ROOTPATH=${DEBRIDAV_ROOT_PATH} - DEBRIDAV_DOWNLOADPATH=${DEBRIDAV_DOWNLOAD_PATH} - DEBRIDAV_MOUNTPATH=${DEBRIDAV_MOUNT_PATH_CONTAINERS} @@ -49,12 +48,15 @@ services: start_period: 2s retries: 1000 depends_on: - postgres-debridav: + debridav_postgres: condition: service_healthy + profiles: + - debridav + - all rclone: image: rclone/rclone:latest - container_name: rclone-debridav + container_name: rclone restart: unless-stopped environment: - TZ=${TZ} @@ -62,7 +64,7 @@ services: - PGID=${PGID} volumes: - ${DEBRIDAV_MOUNT_PATH_HOST_FS}:${DEBRIDAV_MOUNT_PATH_CONTAINERS}:rshared - - /opt/docker/data/debridav/rclone.conf:/config/rclone/rclone.conf + - ./rclone.conf:/config/rclone/rclone.conf - /dev/fuse:/dev/fuse cap_add: - SYS_ADMIN @@ -83,10 +85,13 @@ services: --low-level-retries=1 --dir-cache-time=1s -vv + profiles: + - debridav + - all - postgres-debridav: + debridav_postgres: image: postgres:latest - container_name: postgres-debridav + container_name: debridav_postgres restart: unless-stopped environment: - POSTGRES_USER=debridav @@ -100,3 +105,6 @@ services: test: [ "CMD-SHELL", "pg_isready -d debridav" ] interval: 5s retries: 10 + profiles: + - debridav + - all diff --git a/data/debridav/rclone.conf b/apps/debridav/rclone.conf similarity index 57% rename from data/debridav/rclone.conf rename to apps/debridav/rclone.conf index 88da8d0..39eabe3 100644 --- a/data/debridav/rclone.conf +++ b/apps/debridav/rclone.conf @@ -1,5 +1,5 @@ [debridav] type = webdav -url = http://debridav:8080/webdav/premiumize +url = http://debridav:8080/ vendor = other pacer_min_sleep = 0 diff --git a/apps/decypharr/compose.yaml b/apps/decypharr/compose.yaml index f87e3a4..12e3c4e 100644 --- a/apps/decypharr/compose.yaml +++ b/apps/decypharr/compose.yaml @@ -11,8 +11,12 @@ services: - PGID=${PGID} - UMASK=002 volumes: - - /mnt/:/mnt:rslave - - ${DOCKER_DATA_DIR}/decypharr/:/app # config.json must be in this directory + - /mnt:/mnt:rslave + - ./config.json:/app/config.json + - ${DOCKER_DATA_DIR}/decypharr/repair.json:/app/repair.json + - ${DOCKER_DATA_DIR}/decypharr/torrents.json:/app/torrents.json + - ${DOCKER_DATA_DIR}/decypharr/logs:/app/logs + - ${DOCKER_DATA_DIR}/decypharr/cache:/app/cache labels: - "traefik.enable=true" - "traefik.http.routers.decypharr.rule=Host(`${DECYPHARR_HOSTNAME?}`)" @@ -42,7 +46,7 @@ services: RCLONE_VFS_CACHE_MAX_AGE: "72h" volumes: - /mnt/remote/realdebrid:/data:rshared - - ${DOCKER_DATA_DIR}/decypharr/rclone.conf:/config/rclone/rclone.conf + - ./rclone.conf:/config/rclone/rclone.conf - /mnt:/mnt - ${DOCKER_DATA_DIR}/decypharr/cache:/cache cap_add: diff --git a/data/decypharr/config.json b/apps/decypharr/config.json similarity index 100% rename from data/decypharr/config.json rename to apps/decypharr/config.json diff --git a/data/decypharr/rclone.conf b/apps/decypharr/rclone.conf similarity index 100% rename from data/decypharr/rclone.conf rename to apps/decypharr/rclone.conf diff --git a/apps/honey/compose.yaml b/apps/honey/compose.yaml index a523b0c..0a01e61 100644 --- a/apps/honey/compose.yaml +++ b/apps/honey/compose.yaml @@ -5,8 +5,8 @@ services: restart: unless-stopped user: $PUID:$PGID volumes: - - ${DOCKER_DATA_DIR}/honey:/app/dist/config - - ${DOCKER_DATA_DIR}/honey/img:/app/dist/img/custom + - ./config.json:/app/dist/config/config.json + - ${DOCKER_DATA_DIR}/honey:/app/dist/img/custom # place any images in this folder, and use custom/image_name.jpg in the config.json expose: - 4173 labels: diff --git a/data/honey/config.json b/apps/honey/config.json similarity index 100% rename from data/honey/config.json rename to apps/honey/config.json diff --git a/apps/kometa/compose.yaml b/apps/kometa/compose.yaml index 58ac30b..9c6e4ca 100644 --- a/apps/kometa/compose.yaml +++ b/apps/kometa/compose.yaml @@ -8,7 +8,7 @@ services: - TZ=${TZ:-Etc/UTC} - KOMETA_RUN=True volumes: - - ${DOCKER_DATA_DIR}/kometa:/config + - ./config:/config profiles: - kometa - all @@ -24,7 +24,7 @@ services: - KOMETA_TIME=00:00,02:00,04:00,06:00,08:00,10:00,12:00,14:00,16:00,18:00,20:00,22:00 - KOMETA_RUN=False volumes: - - ${DOCKER_DATA_DIR}/kometa:/config + - ./config:/config profiles: - kometa - all diff --git a/data/kometa/config.yml b/apps/kometa/config/config.yml similarity index 100% rename from data/kometa/config.yml rename to apps/kometa/config/config.yml diff --git a/apps/plausible/compose.yaml b/apps/plausible/compose.yaml index b5acd8d..230d6c9 100644 --- a/apps/plausible/compose.yaml +++ b/apps/plausible/compose.yaml @@ -41,9 +41,9 @@ services: volumes: - ${DOCKER_DATA_DIR}/plausible/clickhouse/db:/var/lib/clickhouse - ${DOCKER_DATA_DIR}/plausible/clickhouse/logs:/var/log/clickhouse-server - - ${DOCKER_DATA_DIR}/plausible/clickhouse/logs.xml:/etc/clickhouse-server/config.d/logs.xml:ro - - ${DOCKER_DATA_DIR}/plausible/clickhouse/ipv4-only.xml:/etc/clickhouse-server/config.d/ipv4-only.xml:ro - - ${DOCKER_DATA_DIR}/plausible/clickhouse/low-resources.xml:/etc/clickhouse-server/config.d/low-resources.xml:ro + - ./logs.xml:/etc/clickhouse-server/config.d/logs.xml:ro + - ./ipv4-only.xml:/etc/clickhouse-server/config.d/ipv4-only.xml:ro + - ./low-resources.xml:/etc/clickhouse-server/config.d/low-resources.xml:ro ulimits: nofile: soft: 262144 diff --git a/data/plausible/clickhouse/ip4-only.xml b/apps/plausible/ip4-only.xml similarity index 100% rename from data/plausible/clickhouse/ip4-only.xml rename to apps/plausible/ip4-only.xml diff --git a/data/plausible/clickhouse/logs.xml b/apps/plausible/logs.xml similarity index 100% rename from data/plausible/clickhouse/logs.xml rename to apps/plausible/logs.xml diff --git a/data/plausible/clickhouse/low-resources.xml b/apps/plausible/low-resources.xml similarity index 100% rename from data/plausible/clickhouse/low-resources.xml rename to apps/plausible/low-resources.xml diff --git a/apps/prowlarr/compose.yaml b/apps/prowlarr/compose.yaml index fd32667..bdfb2df 100644 --- a/apps/prowlarr/compose.yaml +++ b/apps/prowlarr/compose.yaml @@ -11,6 +11,7 @@ services: - 9696 volumes: - ${DOCKER_DATA_DIR}/prowlarr:/config + - ./definitions:/config/Definitions/Custom restart: unless-stopped labels: - "traefik.enable=true" diff --git a/data/prowlarr/Definitions/Custom/52btCustom.yml b/apps/prowlarr/definitions/52btCustom.yml similarity index 100% rename from data/prowlarr/Definitions/Custom/52btCustom.yml rename to apps/prowlarr/definitions/52btCustom.yml diff --git a/data/prowlarr/Definitions/Custom/debridio.yml b/apps/prowlarr/definitions/debridio.yml similarity index 100% rename from data/prowlarr/Definitions/Custom/debridio.yml rename to apps/prowlarr/definitions/debridio.yml diff --git a/data/prowlarr/Definitions/Custom/torbox.yml b/apps/prowlarr/definitions/torbox.yml similarity index 100% rename from data/prowlarr/Definitions/Custom/torbox.yml rename to apps/prowlarr/definitions/torbox.yml diff --git a/apps/recyclarr/compose.yaml b/apps/recyclarr/compose.yaml index 9251140..8dea5ca 100644 --- a/apps/recyclarr/compose.yaml +++ b/apps/recyclarr/compose.yaml @@ -7,7 +7,14 @@ services: environment: - TZ=${TZ:-UTC} volumes: - - ${DOCKER_DATA_DIR}/recyclarr:/config + # - ${DOCKER_DATA_DIR}/recyclarr:/config + - ${DOCKER_DATA_DIR}/recyclarr/cache:/config/cache + - ${DOCKER_DATA_DIR}/recyclarr/logs:/config/logs + - ${DOCKER_DATA_DIR}/recyclarr/repositories:/config/repositories + - ${DOCKER_DATA_DIR}/recyclarr/configs:/config/configs + - ${DOCKER_DATA_DIR}/recyclarr/includes:/config/includes + - ./recyclarr.yml:/config/recyclarr.yml + - ./secrets.yml:/config/secrets.yml depends_on: - sonarr - sonarr4k diff --git a/data/recyclarr/recyclarr.yml b/apps/recyclarr/recyclarr.yml similarity index 100% rename from data/recyclarr/recyclarr.yml rename to apps/recyclarr/recyclarr.yml diff --git a/data/recyclarr/secrets.yml b/apps/recyclarr/secrets.yml similarity index 100% rename from data/recyclarr/secrets.yml rename to apps/recyclarr/secrets.yml diff --git a/apps/stremthru/.env b/apps/stremthru/.env index dc4fcce..fac8082 100644 --- a/apps/stremthru/.env +++ b/apps/stremthru/.env @@ -131,7 +131,7 @@ STREMTHRU_INTEGRATION_TRAKT_CLIENT_SECRET= # DATABASE CONFIGURATION # ================================ STREMTHRU_DATABASE_URI=sqlite://./data/stremthru.db -STREMTHRU_REDIS_URI=redis://stremthru_redis:6379 +# STREMTHRU_REDIS_URI=redis://stremthru_redis:6379 diff --git a/apps/tweakio/compose.yaml b/apps/tweakio/compose.yaml index ef131fa..0cc92e6 100644 --- a/apps/tweakio/compose.yaml +++ b/apps/tweakio/compose.yaml @@ -9,7 +9,7 @@ services: network_mode: service:warp user: $PUID:$PGID volumes: - - ${DOCKER_DATA_DIR}/tweakio/config.yaml:/app/config.yaml + - ./config.yaml:/app/config.yaml profiles: - all - debrid_media_server diff --git a/data/tweakio/config.yaml b/apps/tweakio/config.yaml similarity index 100% rename from data/tweakio/config.yaml rename to apps/tweakio/config.yaml diff --git a/apps/zurg/compose.yaml b/apps/zurg/compose.yaml index aa3a4ac..d2079f6 100644 --- a/apps/zurg/compose.yaml +++ b/apps/zurg/compose.yaml @@ -6,7 +6,7 @@ services: healthcheck: test: curl -f localhost:9999/dav/version.txt || exit 1 volumes: - - ${DOCKER_DATA_DIR}/zurg/config-${ZURG_CONFIG_VERSION:-v0.9}.yml:/app/config.yml + - ./config-${ZURG_CONFIG_VERSION:-v0.9}.yml:/app/config.yml - ${DOCKER_DATA_DIR}/zurg/data:/app/data - ${DOCKER_DATA_DIR}/zurg/logs:/app/logs labels: @@ -30,7 +30,7 @@ services: PGID: ${PGID} volumes: - /mnt/remote/realdebrid:/data:rshared - - ${DOCKER_DATA_DIR}/zurg/rclone.conf:/config/rclone/rclone.conf + - ./rclone.conf:/config/rclone/rclone.conf - /mnt:/mnt cap_add: - SYS_ADMIN diff --git a/data/zurg/config-v0.10.yml b/apps/zurg/config-v0.10.yml similarity index 100% rename from data/zurg/config-v0.10.yml rename to apps/zurg/config-v0.10.yml diff --git a/data/zurg/config-v0.9.yml b/apps/zurg/config-v0.9.yml similarity index 100% rename from data/zurg/config-v0.9.yml rename to apps/zurg/config-v0.9.yml diff --git a/data/zurg/rclone.conf b/apps/zurg/rclone.conf similarity index 100% rename from data/zurg/rclone.conf rename to apps/zurg/rclone.conf diff --git a/compose.yaml b/compose.yaml index a19516c..ebe4f08 100644 --- a/compose.yaml +++ b/compose.yaml @@ -8,11 +8,11 @@ include: - apps/autosync/compose.yaml - apps/bazarr/compose.yaml - apps/beszel/compose.yaml + - apps/borgmatic/compose.yaml - apps/byparr/compose.yaml - apps/cloudflare-ddns/compose.yaml - apps/comet/compose.yaml - apps/dash/compose.yaml - - apps/debridav/compose.yaml - apps/decypharr/compose.yaml - apps/dockge/compose.yaml - apps/dozzle/compose.yaml @@ -72,7 +72,8 @@ include: # To use both, update Zurg's rclone service name and its container name to rclone_zurg # You will also need to change Zurg's rclone's `- apps//mnt/remote/realdebrid:/data:rshared` to `- apps//mnt/remote/zurg:/data:rshared` # - apps/zurg/compose.yaml - + # same as above for using debridav, Uncomment debridav and comment out decypharr and zurg + # - apps/debridav/compose.yaml networks: default: name: ${DOCKER_NETWORK:-aio_default} diff --git a/data/borgmatic/config.yaml b/data/borgmatic/config.yaml new file mode 100644 index 0000000..5d4194e --- /dev/null +++ b/data/borgmatic/config.yaml @@ -0,0 +1,19 @@ +source_directories: + - /mnt/source # πŸ” Source directory inside container (binds to /opt/docker on host) + +repositories: + - path: ${BORG_REPO_URL} # πŸ“¦ Remote repo path from .env + label: borgbase # 🏷️ Friendly name + storage_quota: 10G # ℹ️ Display-only, helps track usage + +one_file_system: true # 🚫 Don't cross into other mounts (e.g., /proc) + +exclude_patterns: + - /mnt/source/data/stremthru/imdb # ❌ Temp cache + - /mnt/source/data/stremthru/hashlists # ❌ Torrent hashes + - /mnt/source/data/stremio-server # ❌ Optional exclusion + +compression: lz4 # ⚑ Fast + efficient compression +archive_name_format: 'backup-{now:%Y-%m-%d_%H-%M-%S}' # 🧾 Timestamped archive name + +keep_weekly: 2 # βœ… Keep 2 most recent weekly archives diff --git a/data/prowlarr/Definitions/Custom/zilean.yml b/data/prowlarr/Definitions/Custom/zilean.yml deleted file mode 100644 index 8130ce3..0000000 --- a/data/prowlarr/Definitions/Custom/zilean.yml +++ /dev/null @@ -1,98 +0,0 @@ -id: zilean -name: Zilean -description: "A custom indexer for Zilean the unofficial DMM indexer using it's Torznab Endpoint" -language: en-US -type: public -encoding: UTF-8 -followredirect: false -testlinktorrent: false -requestDelay: 2 -links: - # Torznab Endpoint is used for better performance - - http://zilean:8181 - - https://zilean.elfhosted.com - -caps: - categories: - Movies: Movies - TV: TV - modes: - search: [q] - movie-search: [q, imdbid] - tv-search: [q, season, ep] - allowrawsearch: false - -settings: [] - -search: - paths: - - path: /dmm/filtered - method: get - response: - type: json - - inputs: - $raw: "{{ if .Query.IMDBID }}ImdbId={{ .Query.IMDBID }}{{ else }}Query={{ .Keywords }}{{ end }}" - Season: "{{ if .Query.Season }}{{ .Query.Season }}{{ else }}{{ end }}" - Episode: "{{ if .Query.Ep }}{{ .Query.Ep }}{{ else }}{{ end }}" - - keywordsfilters: - - name: re_replace - args: ["\\bS\\d+(?:E\\d+)?\\b", ""] # Remove season and episode info - - name: re_replace - args: ["\\b(19|20)\\d{2}\\b", ""] # Remove year info - - name: re_replace - args: ["[\\[\\]()]", ""] # Remove brackets - - name: re_replace - args: ["^$", "limitless"] - - rows: - selector: $ - missingAttributeEqualsNoResults: true - - fields: - title: - selector: raw_title - year: - selector: year - category: - selector: category - filters: - - name: replace - args: ["tvSeries", "TV"] - - name: replace - args: ["movie", "Movies"] - infohash: - selector: info_hash - size: - selector: size - quality: - selector: resolution - filters: - - name: replace - args: ["4k", "2160p"] - codec: - selector: codec - episode: - selector: episodes - season: - selector: seasons - language: - selector: languages - seeders: - text: "30" - leechers: - text: "10" - date: - text: "Apr. 18th '11" - filters: - - name: re_replace - args: ["st|nd|rd|th", ""] - - name: replace - args: ["'", ""] - - name: dateparse - args: "MMM. d yy" - downloadvolumefactor: - text: "1" - uploadvolumefactor: - text: "1" \ No newline at end of file