From 0a8871dbfb0a6fb8dd17d43dd839f66125c20823 Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Sat, 24 May 2025 14:42:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(localApps):=20=E6=B7=BB=E5=8A=A0=20qBittor?= =?UTF-8?q?rent-ee=20=E5=BA=94=E7=94=A8=E9=85=8D=E7=BD=AE-=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=20qBittorrent-ee=20=E5=BA=94=E7=94=A8=E7=9A=84=20data?= =?UTF-8?q?.yml=20=E5=92=8C=20docker-compose.yml=20=E6=96=87=E4=BB=B6=20-?= =?UTF-8?q?=20=E6=B7=BB=E5=8A=A0=E5=BA=94=E7=94=A8=E6=8F=8F=E8=BF=B0?= =?UTF-8?q?=E3=80=81=E9=85=8D=E7=BD=AE=E9=A1=B9=E3=80=81=E7=AB=AF=E5=8F=A3?= =?UTF-8?q?=E6=98=A0=E5=B0=84=E7=AD=89=E4=BF=A1=E6=81=AF=20-=20=E5=8C=85?= =?UTF-8?q?=E5=90=AB=20x86-64=E3=80=81arm64=E3=80=81armhf=20=E5=A4=9A?= =?UTF-8?q?=E6=9E=B6=E6=9E=84=E6=94=AF=E6=8C=81=20-=20=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=AD=E8=AE=BE=E7=BD=AE=E4=BA=86=E6=8E=A8?= =?UTF-8?q?=E8=8D=90=E7=9A=84=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F=E5=92=8C?= =?UTF-8?q?=E6=9D=83=E9=99=90=E7=AE=A1=E7=90=86=20-=20=E9=99=84=E5=B8=A6?= =?UTF-8?q?=E8=AF=A6=E7=BB=86=E7=9A=84=E4=BD=BF=E7=94=A8=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=E5=92=8C=E7=A4=BA=E4=BE=8B=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- qBittorrent-ee/5.1.0.10/data.yml | 20 ++ qBittorrent-ee/5.1.0.10/docker-compose.yml | 26 +++ qBittorrent-ee/README.md | 242 +++++++++++++++++++++ qBittorrent-ee/data.yml | 19 ++ qBittorrent-ee/latest/data.yml | 20 ++ qBittorrent-ee/latest/docker-compose.yml | 26 +++ qBittorrent-ee/logo.png | Bin 0 -> 5426 bytes 7 files changed, 353 insertions(+) create mode 100644 qBittorrent-ee/5.1.0.10/data.yml create mode 100644 qBittorrent-ee/5.1.0.10/docker-compose.yml create mode 100644 qBittorrent-ee/README.md create mode 100644 qBittorrent-ee/data.yml create mode 100644 qBittorrent-ee/latest/data.yml create mode 100644 qBittorrent-ee/latest/docker-compose.yml create mode 100644 qBittorrent-ee/logo.png diff --git a/qBittorrent-ee/5.1.0.10/data.yml b/qBittorrent-ee/5.1.0.10/data.yml new file mode 100644 index 000000000..aed19682c --- /dev/null +++ b/qBittorrent-ee/5.1.0.10/data.yml @@ -0,0 +1,20 @@ +additionalProperties: + formFields: + - default: 40118 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: WebUI Port + labelZh: 网页端口 + required: true + rule: paramPort + type: number + + - default: 40119 + edit: true + envKey: PANEL_APP_PORT_PEER + labelEn: Peer Port + labelZh: BT端口 + required: true + rule: paramPort + type: number + diff --git a/qBittorrent-ee/5.1.0.10/docker-compose.yml b/qBittorrent-ee/5.1.0.10/docker-compose.yml new file mode 100644 index 000000000..64a11c28e --- /dev/null +++ b/qBittorrent-ee/5.1.0.10/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true + +services: + qbittorrent: + container_name: ${CONTAINER_NAME} + environment: + - PUID=1000 + - PGID=1000 + - TZ=Asia/Shanghai + - WEBUIPORT=${PANEL_APP_PORT_HTTP} + - ENABLE_DOWNLOADS_PERM_FIX=true + image: superng6/qbittorrentee:5.1.0.10 + labels: + createdBy: "Apps" + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_PEER}:6881 + - ${PANEL_APP_PORT_PEER}:6881/udp + - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + restart: always + volumes: + - ./data/config:/config + - ./data/downloads:/downloads diff --git a/qBittorrent-ee/README.md b/qBittorrent-ee/README.md new file mode 100644 index 000000000..ba39042e8 --- /dev/null +++ b/qBittorrent-ee/README.md @@ -0,0 +1,242 @@ +## 支持群晖、威联通等x64、arm64、arm32平台nas + +博客:https://sleele.com/2020/01/09/docker-qbittorrent增强版,反迅雷吸血 +GitHub:https://github.com/SuperNG6/Docker-qBittorrent-Enhanced-Edition + +[https://hub.docker.com/r/superng6/qbittorrentee](https://hub.docker.com/r/superng6/qbittorrentee) + +### 感谢以下项目: + +[https://github.com/qbittorrent/qBittorrent](https://github.com/qbittorrent/qBittorrent) +[https://github.com/c0re100/qBittorrent-Enhanced-Edition](https://github.com/c0re100/qBittorrent-Enhanced-Edition) +[https://github.com/ngosang/trackerslist]( https://github.com/ngosang/trackerslist) + +### 其他项目 Docker qBittorrent 中国优化版 + +https://github.com/SuperNG6/docker-qbittorrent +https://hub.docker.com/r/superng6/qbittorrent + +# 本镜像的一些优点 + +- 全平台架构`x86-64`、`arm64`、`armhf` +- 静态编译qbittorrentee +- 做了usermapping,使用你自己的账户权限来运行,这点对于群辉来说尤其重要 +- 纯qBittorrent-Enhanced-Edition,没有包含多于的服务 +- 默认上海时区 Asia/Shanghai +- qBittorrent-Enhanced-Edition屏蔽吸血客户端 +- 内置优化过的conf文件,减少手工设置 +- 默认中文 +- 内置400条tracker方便在连接GitHub出错时使用 +- 自动向所有tracker服务器汇报,加快下载速度,提升连接数 +- 提供了自定义用户名密码功能 + +# Architecture + +### qBittorrent Enhanced Edition latest + +| Architecture | Tag | +|--------------|--------| +| x86-64 | latest | +| arm64 | latest | +| armhf | latest | + +# Changelogs + +## 2025/03/11 + + 1、更新 base image,增加curl + 2、新增 ENABLE_DOWNLOADS_PERM_FIX变量(默认`ENABLE_DOWNLOADS_PERM_FIX=true`): + 当`=true`时,则对`/downloads`文件夹进行权限修复; + 当`=false`时,则不对`/downloads`文件夹进行权限修复; + +## 2025/02/18 + + 1、更新 base image + 2、回退 s6-overlay V2,V3太复杂了 + 3、默认对/config /downloads 执行chown权限设置,避免部分小白遇到读写问题 + +## 2024/09/10 + + 1、更新 base image + 2、更新 s6-overlay V3 @ssfdust + 3、增加 healtcheck script @ssfdust + + 新增环境变量 @ssfdust + WEB_PASSWORD=veryscrect web密码环境变量 + WEB_PASSWORD_FILE=/path/to/secrets web密码文件环境变量 + WEB_PBKDF2_PASSWORD=@Bytes(...) web密码密文环境变量 + WEB_PBKDF2_PASSWORD_FILE=/path/to/secrets web密码密文文件环境变量 + + 4、感谢 @ssfdust PR + +## 2021/04/15 + + 1、增加了大量历史版本,详情请见 docker hub tags + https://hub.docker.com/r/superng6/qbittorrentee/tags?page=1&ordering=last_updated + +## 2021/02/07 + + 1、qBittorrent Enhanced Edition update to v4.3.3.10 + +## 2020/11/30 + + 1、自动同步更新最新版本qBittorrent Enhanced Edition + +## 2020/11/06 + + 1、qBittorrent Enhanced Edition update to v4.3.0.10 + 2、x86-64、arm64、armhf由自编译转为官方静态编译版 + 3、减小镜像体积 + +## 2020/09/08 + + 1、qBittorrent Enhanced Edition update to v4.2.5.16 + +## 2020/09/07 + + 1、qBittorrent Enhanced Edition update to v4.2.5.15 + 2、libtorrent update to 1.2.10-0f0afec8c (Fix #127) + 3、Optional Button for re-enable Torrent IP Filter (Tools>Enable Torrent IP Filter). + +## 2020/08/21 + + 1、更新LIBTORRENT v1.2.8,QBITTORRENT v4.2.5.13 + 2、更新base image + 3、没别的更新了,已经很完善了 + +## 2020/01/13 + + 1、构建全平台架构镜像`x86-64`、`arm64`、`armhf` + 2、设置磁盘缓存,默认参数`x86-64:512M`、`arm64:128M`、`armhf:64M` + +## 2020/01/12 + + 1、默认缓存设置参数为 x86-64:512M、arm64:64M,提升下载性能 + 2、除了自动更新tracker外,内置400多条tracker,默认启用,以便于在GitHub连接有问题时使用 + +## 2020/01/06 + + 1、修改conf,优化参数,减少手动设置 + 2、自动下载并更新tracker list + 3、默认中文 + 4、基于qBittorrent-Enhanced-Edition 4.1.9.15 最新版的SSL有问题 + +# 内外网访问 + +webui端口不一致的情况下,请手动关闭如下选项(默认配置已关闭,如未关闭请手动关闭) +https://cdn.jsdelivr.net/gh/SuperNG6/pic@master/uPic/2021-02-02/CIwC4l.png +该操作等价于修改配置文件中的如下选项 + +```` +WebUI\CSRFProtection=false +WebUI\ClickjackingProtection=false +WebUI\HostHeaderValidation=false +```` + +## 关于群晖 + +群晖用户请使用你当前的用户SSH进系统,输入 ``id 你的用户id`` 获取到你的UID和GID并输入进去 + +![rNyFsw](https://cdn.jsdelivr.net/gh/SuperNG6/pic@master/uPic/rNyFsw.jpg) + +### 权限管理设置 + +对你的``docker配置文件夹的根目录``进行如图操作,``你的下载文件夹的根目录``进行相似操作,去掉``管理``这个权限,只给``写入``, +``读取``权限 +![HEmuK1](https://cdn.jsdelivr.net/gh/SuperNG6/pic@master/uPic/HEmuK1.jpg) + +### docker命令行设置: + +1. 创建qbittorrent容器 + +```` +docker create \ + --name=qbittorrentee \ + -e WEBUIPORT=8080 \ + -e PUID=1026 \ + -e PGID=100 \ + -e TZ=Asia/Shanghai \ + -e ENABLE_DOWNLOADS_PERM_FIX=true \ + -p 6881:6881 \ + -p 6881:6881/udp \ + -p 8080:8080 \ + -v /配置文件位置:/config \ + -v /下载位置:/downloads \ + --restart unless-stopped \ + superng6/qbittorrentee:latest +```` + +### docker-compose + +```` +version: "3" +services: + qbittorrentee: + image: superng6/qbittorrentee + container_name: qbittorrentee + environment: + - PUID=1026 + - PGID=100 + - TZ=Asia/Shanghai + - WEBUIPORT=8080 + - ENABLE_DOWNLOADS_PERM_FIX=true + volumes: + - ./qbittorrentee/config:/config + - ./qbittorrentee/downloads:/downloads + ports: + - 6881:6881 + - 6881:6881/udp + - 8080:8080 + restart: unless-stopped +```` + +### 变量: + +| 参数 | 说明 | +|-------------------------------------|:-----------------------------------------------------------------------------------------| +| `--name=qbittorrentee` | 容器名 | +| `-p 8080:8080` | web访问端口 [IP:8080](IP:8080);(默认用户名:admin;默认密码为随机生成,首次启动容器请查看日志);此端口需与容器端口和环境变量保持一致,否则无法访问 | +| `-p 6881:6881` | BT下载监听端口 | +| `-p 6881:6881/udp` | BT下载DHT监听端口 +| `-v /配置文件位置:/config` | qBittorrent配置文件位置 | +| `-v /下载位置:/downloads` | qBittorrent下载位置 | +| `-e WEBUIPORT=8080` | web访问端口环境变量 | +| `-e ENABLE_DOWNLOADS_PERM_FIX=true` | /downloads文件夹权限修复 | +| `-e TZ=Asia/Shanghai` | 系统时区设置,默认为Asia/Shanghai | + +### 群晖docker设置: + +1. 卷 + +| 参数 | 说明 | +|---------------------|:------------------| +| `本地文件夹1:/downloads` | qBittorrent下载位置 | +| `本地文件夹2:/config` | qBittorrent配置文件位置 | + +2. 端口 + +| 参数 | 说明 | +|------------------|:-----------------------------------------------------------------------------------| +| `本地端口1:6881` | BT下载监听端口 | +| `本地端口2:6881/udp` | BT下载DHT监听端口 | +| `本地端口3:8080` | web访问端口 [IP:8080](IP:8080);(默认用户名:admin;默认密码:adminadmin);此端口需与容器端口和环境变量保持一致,否则无法访问 | + +3. 环境变量: + +| 参数 | 说明 | +|-------------------------------------|:-------------------------------| +| `TZ=Asia/Shanghai` | 系统时区设置,默认为Asia/Shanghai | +| `WEBUIPORT=8080` | web访问端口环境变量 | +| `-e ENABLE_DOWNLOADS_PERM_FIX=true` | /downloads文件夹权限修复,默认开启,false关闭 | + +### 搜索: + +#### 开启:视图-搜索引擎: + +##### 说明: + +1. 自带 [http://plugins.qbittorrent.org/](http://plugins.qbittorrent.org/) 部分搜索插件 +2. 全新安装默认只开启官方自带部分和一个中文搜索插件。其它可到 视图-搜索引擎-界面右侧搜索-搜索插件-启动栏(双击)开启 +3. 一些搜索插件网站需过墙才能用 +4. jackett搜索插件需配置jackett.json(位置config/qBittorrent/data/nova3/engines) + ,插件需配合jackett服务的api_key。可自行搭建docker版jackett(例如linuxserver/jackett)。 diff --git a/qBittorrent-ee/data.yml b/qBittorrent-ee/data.yml new file mode 100644 index 000000000..42fa48492 --- /dev/null +++ b/qBittorrent-ee/data.yml @@ -0,0 +1,19 @@ +name: qBittorrent-ee +tags: + - 工具 +title: qBittorrent增强版,防吸血 +description: qBittorrent enhanced version, anti-blood*ing +additionalProperties: + key: qBittorrent-ee + name: qBittorrent-ee + tags: + - Tool + shortDescZh: qBittorrent增强版,防吸血 + shortDescEn: qBittorrent enhanced version, anti-blood*ing + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://github.com/SuperNG6/Docker-qBittorrent-Enhanced-Edition + github: https://github.com/SuperNG6/Docker-qBittorrent-Enhanced-Edition + document: https://github.com/SuperNG6/Docker-qBittorrent-Enhanced-Edition diff --git a/qBittorrent-ee/latest/data.yml b/qBittorrent-ee/latest/data.yml new file mode 100644 index 000000000..aed19682c --- /dev/null +++ b/qBittorrent-ee/latest/data.yml @@ -0,0 +1,20 @@ +additionalProperties: + formFields: + - default: 40118 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: WebUI Port + labelZh: 网页端口 + required: true + rule: paramPort + type: number + + - default: 40119 + edit: true + envKey: PANEL_APP_PORT_PEER + labelEn: Peer Port + labelZh: BT端口 + required: true + rule: paramPort + type: number + diff --git a/qBittorrent-ee/latest/docker-compose.yml b/qBittorrent-ee/latest/docker-compose.yml new file mode 100644 index 000000000..83ee5c05d --- /dev/null +++ b/qBittorrent-ee/latest/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true + +services: + qbittorrent: + container_name: ${CONTAINER_NAME} + environment: + - PUID=1000 + - PGID=1000 + - TZ=Asia/Shanghai + - WEBUIPORT=${PANEL_APP_PORT_HTTP} + - ENABLE_DOWNLOADS_PERM_FIX=true + image: superng6/qbittorrentee:latest + labels: + createdBy: "Apps" + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_PEER}:6881 + - ${PANEL_APP_PORT_PEER}:6881/udp + - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + restart: always + volumes: + - ./data/config:/config + - ./data/downloads:/downloads diff --git a/qBittorrent-ee/logo.png b/qBittorrent-ee/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8d9d88edd3e78fb87a4f6e2b6a8fccb31225a19c GIT binary patch literal 5426 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