From 3386c2c2f44f6674667f5a685ec033e560798fe0 Mon Sep 17 00:00:00 2001 From: Nikhil Byadwal <32981566+darkbeast13@users.noreply.github.com> Date: Sun, 6 Jul 2025 00:09:13 +0530 Subject: [PATCH] feat: added borgmatic and minor fixes for debridav and aiostreams (#33) --- apps/aiostreams/.env | 2 +- apps/borgmatic/.env | 33 +++++++++++++++++++++++++++++++++ apps/borgmatic/compose.yaml | 26 ++++++++++++++++++++++++++ apps/debridav/.env | 21 ++++++++++++--------- apps/debridav/compose.yaml | 2 +- compose.yaml | 1 + data/borgmatic/config.yaml | 19 +++++++++++++++++++ 7 files changed, 93 insertions(+), 11 deletions(-) create mode 100644 apps/borgmatic/.env create mode 100644 apps/borgmatic/compose.yaml create mode 100644 data/borgmatic/config.yaml 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/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 44ec935..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= diff --git a/apps/debridav/compose.yaml b/apps/debridav/compose.yaml index 108475a..afe7c49 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}" diff --git a/compose.yaml b/compose.yaml index 940043f..ebe4f08 100644 --- a/compose.yaml +++ b/compose.yaml @@ -8,6 +8,7 @@ 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 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