From f8952fb79eced19320311a4a55de2e663212a296 Mon Sep 17 00:00:00 2001 From: Firefly <77047823+Yuri-NagaSaki@users.noreply.github.com> Date: Wed, 28 Jan 2026 14:54:53 +0800 Subject: [PATCH] Add qbitwebui (#675) * Add qBittorrent Web UI template * Fix healthcheck bug --- blueprints/qbitwebui/docker-compose.yml | 39 ++++++++++++++++++++++++ blueprints/qbitwebui/qbitwebui.png | Bin 0 -> 440710 bytes blueprints/qbitwebui/template.toml | 16 ++++++++++ meta.json | 18 +++++++++++ 4 files changed, 73 insertions(+) create mode 100644 blueprints/qbitwebui/docker-compose.yml create mode 100644 blueprints/qbitwebui/qbitwebui.png create mode 100644 blueprints/qbitwebui/template.toml diff --git a/blueprints/qbitwebui/docker-compose.yml b/blueprints/qbitwebui/docker-compose.yml new file mode 100644 index 00000000..3e805c3c --- /dev/null +++ b/blueprints/qbitwebui/docker-compose.yml @@ -0,0 +1,39 @@ +version: "3.8" + +services: + qbitwebui: + image: ghcr.io/maciejonos/qbitwebui:latest + restart: unless-stopped + environment: + # Required: Encryption key for storing credentials (min 32 chars) + - ENCRYPTION_KEY=${ENCRYPTION_KEY} + # Optional: Server port (default: 3000) + - PORT=${PORT:-3000} + # Optional: Database location (default: ./data/qbitwebui.db) + - DATABASE_PATH=${DATABASE_PATH:-/data/qbitwebui.db} + # Optional: Salt file location (default: ./data/.salt) + - SALT_PATH=${SALT_PATH:-/data/.salt} + # Optional: Allow self-signed certificates for qBittorrent instances (default: false) + # - ALLOW_SELF_SIGNED_CERTS=${ALLOW_SELF_SIGNED_CERTS:-false} + # Optional: Disable authentication/login (single-user mode) (default: false) + # - DISABLE_AUTH=${DISABLE_AUTH:-false} + # Optional: Disable new registrations, creates default admin account (default: false) + # - DISABLE_REGISTRATION=${DISABLE_REGISTRATION:-false} + # Optional: Enable file browser by setting downloads path + # - DOWNLOADS_PATH=/downloads + volumes: + - qbitwebui_data:/data + # Optional: Mount downloads directory for file browser feature + # Read-only mount (browse & download only): + # - /path/to/your/downloads:/downloads:ro + # Or read-write mount (enables delete/move/copy/rename): + # - /path/to/your/downloads:/downloads + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 10s + +volumes: + qbitwebui_data: diff --git a/blueprints/qbitwebui/qbitwebui.png b/blueprints/qbitwebui/qbitwebui.png new file mode 100644 index 0000000000000000000000000000000000000000..48052dffba50a4dc2b560669abaff278d28af9d4 GIT binary patch literal 440710 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