refactor: store config files with composes

This commit is contained in:
Viren070
2025-06-25 20:00:53 +01:00
parent f07e8926eb
commit e17949e4bb
45 changed files with 150 additions and 143 deletions
+6 -3
View File
@@ -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
+1 -1
View File
@@ -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 ------------
+1 -1
View File
@@ -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
+3 -3
View File
@@ -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.
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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:
+33
View File
@@ -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)
+26
View File
@@ -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
+13 -10
View File
@@ -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 DebriDavs 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
+15 -7
View File
@@ -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
@@ -1,5 +1,5 @@
[debridav]
type = webdav
url = http://debridav:8080/webdav/premiumize
url = http://debridav:8080/
vendor = other
pacer_min_sleep = 0
+7 -3
View File
@@ -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:
+2 -2
View File
@@ -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:
+2 -2
View File
@@ -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
+3 -3
View File
@@ -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
+1
View File
@@ -11,6 +11,7 @@ services:
- 9696
volumes:
- ${DOCKER_DATA_DIR}/prowlarr:/config
- ./definitions:/config/Definitions/Custom
restart: unless-stopped
labels:
- "traefik.enable=true"
+8 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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
+3 -2
View File
@@ -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}
+19
View File
@@ -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
@@ -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"