Loading... ```bash #!/bin/bash # ================= 配置区域 ================= # 你希望以哪个用户身份运行?(建议填你的普通用户名,如 bosaidon) # 如果填 root,下载的文件权限会很麻烦。 read -p "请输入你要运行 qBittorrent 的用户名 (例如 bosaidon): " TARGET_USER # 检查用户是否存在 if ! id "$TARGET_USER" &>/dev/null; then echo "❌ 错误:用户 $TARGET_USER 不存在!请先创建该用户或检查拼写。" exit 1 fi # 基础路径设置 BASE_DIR="/home/$TARGET_USER/qb_data" SSL_DIR="$BASE_DIR/config/ssl" CONF_FILE="$BASE_DIR/config/qBittorrent/qBittorrent.conf" # Cloudflare 兼容端口 WEB_PORT_EXTERNAL=8443 # BT 传输端口 (避开 6881) BT_PORT=52000 # =========================================== # 1. 检查 Root 权限 if [ "$EUID" -ne 0 ]; then echo "❌ 请使用 sudo 或 root 身份运行此脚本!" exit 1 fi echo "=== qBittorrent 终极安装脚本 (Cloudflare/HTTPS/权限优化版) ===" echo "目标用户: $TARGET_USER" echo "安装位置: $BASE_DIR" # 2. 安装 Docker (如果不存在) if ! command -v docker &> /dev/null; then echo "🛠️ 正在安装 Docker..." apt-get update apt-get install -y docker.io docker-compose systemctl enable --now docker else echo "✅ Docker 已安装。" fi # 3. 停止并清理旧容器 (防止冲突) echo "🧹 清理旧容器..." if docker ps -a | grep -q "qbittorrent"; then docker stop qbittorrent 2>/dev/null docker rm qbittorrent 2>/dev/null fi # 4. 创建目录结构 echo "📂 创建目录..." mkdir -p "$BASE_DIR/config/qBittorrent" mkdir -p "$BASE_DIR/downloads" mkdir -p "$SSL_DIR" # 5. 交互式录入证书 echo "" echo "🔐 === 证书配置 (Cloudflare) ===" echo "请【粘贴】你的证书内容 (通常以 -----BEGIN CERTIFICATE----- 开头):" echo "粘贴完成后,按回车,然后按 Ctrl+D 结束录入。" cat > "$SSL_DIR/server.crt" echo "" echo "请【粘贴】你的私钥内容 (通常以 -----BEGIN PRIVATE KEY----- 开头):" echo "粘贴完成后,按回车,然后按 Ctrl+D 结束录入。" cat > "$SSL_DIR/server.key" # 检查证书是否为空 if [ ! -s "$SSL_DIR/server.crt" ] || [ ! -s "$SSL_DIR/server.key" ]; then echo "❌ 证书录入失败(文件为空),请重新运行脚本。" exit 1 fi # 6. 生成 qBittorrent 配置文件 # 这里直接预写入配置,解决 401 错误和 HTTPS 设置 echo "⚙️ 生成配置文件 (修复 401 错误 & 启用 HTTPS)..." # 定义容器内的证书路径 CERT_INTERNAL="/config/ssl/server.crt" KEY_INTERNAL="/config/ssl/server.key" cat <<EOF > "$CONF_FILE" [LegalNotice] Accepted=true [Preferences] Connection\PortRangeMin=$BT_PORT Session\Port=$BT_PORT WebUI\CSRFProtection=false WebUI\HostHeaderValidation=false WebUI\HTTPS\CertificatePath=$CERT_INTERNAL WebUI\HTTPS\Enabled=true WebUI\HTTPS\KeyPath=$KEY_INTERNAL WebUI\Port=8080 EOF # 7. 获取用户 UID/GID TargetPUID=$(id -u "$TARGET_USER") TargetPGID=$(id -g "$TARGET_USER") # 8. 生成 Docker Compose 文件 echo "🐳 生成 Docker Compose 文件..." cat <<EOF > "$BASE_DIR/docker-compose.yml" version: "2.1" services: qbittorrent: image: lscr.io/linuxserver/qbittorrent:latest container_name: qbittorrent network_mode: "host" environment: - PUID=1000 - PGID=1000 - TZ=Asia/Shanghai - WEBUI_PORT=8443 volumes: - /home/bosaidon/qb_data/config:/config - /home/bosaidon/qb_data/downloads:/downloads ports: - 8443:8080 # HTTPS 映射 - 52000:52000 # TCP - 52000:52000/udp # UDP restart: unless-stopped EOF # 9. 修复权限 # 将所有文件归属权交给目标用户,这样你以后下载文件、修改配置都不会没权限 echo "owns 正在移交文件所有权给 $TARGET_USER ..." chown -R "$TARGET_USER:$TARGET_USER" "$BASE_DIR" # 10. 启动容器 echo "🚀 启动容器..." cd "$BASE_DIR" docker-compose up -d # 11. 抓取初始密码 echo "⏳ 正在等待程序初始化 (约 10 秒)..." sleep 10 TEMP_PWD=$(docker logs qbittorrent 2>&1 | grep "Temporary password" | awk -F': ' '{print $2}' | tr -d ' ') echo "====================================================" echo "✅ 安装完成!" echo "====================================================" echo "访问地址: https://你的域名:$WEB_PORT_EXTERNAL" echo " (或者 https://IP:$WEB_PORT_EXTERNAL)" echo "----------------------------------------------------" if [ -n "$TEMP_PWD" ]; then echo "🔑 初始密码: $TEMP_PWD" echo " 用户名为: admin" else echo "⚠️ 未能自动抓取密码。" echo " 如果你是全新安装,请运行: docker logs qbittorrent 查看。" echo " 如果你是保留旧数据重装,密码是你之前的密码。" fi echo "----------------------------------------------------" echo "📂 下载文件位置: $BASE_DIR/downloads" echo "👤 运行身份: $TARGET_USER" echo " (你可以使用该用户通过 SFTP 直接管理下载的文件)" ``` ### 赋权 ```bash chmod +x install_qbit.sh ./install_qbit.sh ``` 最后修改:2025 年 12 月 15 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏