yanhy的学习记录匣 - NAS https://yanhy.top/index.php/category/NAS/ 飞牛nas使用fnos-qb-proxy以直接调用系统下载套件(非Docker) https://yanhy.top/index.php/archives/457/ 2025-11-19T17:35:00+08:00 0、原项目地址https://github.com/xxxuuu/fnos-qb-proxy项目原介绍What is it?fnOS 中自带了一个下载器(基于 qBittorrent 和 Aria2),但默认关闭了 WebUI,且采用动态密码。这使得我们无法在外部连接 fnOS 中的 qBittorrent(e.g. 接入 MoviePilot 或 NasTools 等)该项目是一个简单的代理,能绕过这些限制,提供在外部访问 fnOS 的 qBittorrent 的能力同时不影响 fnOS 自身的下载器运行1、为什么不使用docker原docker方式如果按项目作者所介绍使用docker,正常方式如下:先准备好相关文件:yanhy2000@fnnas:~$ ls /vol1/1000/ssd/docker/docker-compose/fnos-qb-proxy docker-compose.yml Dockerfile.txt fnos-qb-proxy_linux-amd64docker-compose.ymlservices: fnos-qbit-proxy: build: context: . dockerfile: Dockerfile.txt container_name: fnOS-qBit-Proxy pid: "host" network_mode: "bridge" environment: - PASSWORD=fnosnb ports: - "7111:8086" volumes: - /home/yanhy2000/qbt.sock:/app/qbt.sockDockerfile.txtFROM alpine:latest ENV LANG=C.UTF-8 \ UDS="/app/qbt.sock" \ PORT=8086 \ PASSWORD="fnosnb" WORKDIR /app COPY fnos-qb-proxy_linux-amd64 /usr/local/bin/fnos-qb-proxy RUN chmod +x /usr/local/bin/fnos-qb-proxy && \ echo "https://mirrors.tuna.tsinghua.edu.cn/alpine/latest-stable/main" > /etc/apk/repositories && \ echo "https://mirrors.tuna.tsinghua.edu.cn/alpine/latest-stable/community" >> /etc/apk/repositories && \ apk add --no-cache bash CMD ["sh", "-c", "fnos-qb-proxy --uds $UDS --password $PASSWORD --port $PORT"]使用系统的容器管理器导入docker-compose并启动,此时一般情况下都可以正常运行,在浏览器打开ip:7111则可以进入qBittorrent页面。为什么不使用docker当系统更新重启后,哪怕将docker启动设置在dlcenter.service之后,也大概率因为qBittorrent服务未完全启动导致容器反复启动失败,只有等待服务启动后,重新构建compose启动才能恢复,不能实现完全自动。Docker容器启动时,如果映射的Socket文件不存在,Docker可能会自动将其创建一个为目录而非文件,导致后续挂载错误。且容器的重启策略有时不如Systemd的依赖检查灵活,容易在系统启动初期因资源未就绪而进入死循环或报错停止。不使用docker的自启动解决方案确保/home/用户名/qbt.sock是一个文件,而不是文件夹将fnos-qb-proxy_linux-amd64下载到本地,并移动至/usr/bin/fnos-qb-proxysudo cp fnos-qb-proxy_linux-amd64 /usr/bin/fnos-qb-proxy sudo chmod +x /usr/bin/fnos-qb-proxy创建systemd服务配置文件sudo nano /etc/systemd/system/fnos-qb-proxy.service填充以下脚本(将用户名改成你自己的),并保存[Unit] Description=fnos qb proxy service #在下载服务启动后启动 After=network.target dlcenter.service #跟随dlcenter服务运行 Requires=dlcenter.service [Service] Type=simple User=root #脚本逻辑部分 #隔2秒检查一次qbt.sock文件是否存在且必须是Socket文件(防止被识别为文件夹,如果之前使用过docker可能会残留这个问题) ExecStartPre=/bin/bash -c 'until [ -S "/home/用户名/qbt.sock" ]; do echo "Waiting for qbt.sock..."; sleep 2; done' #自定义密码与端口 ExecStart=/usr/bin/fnos-qb-proxy --uds "/home/用户名/qbt.sock" --password fnosnb --port 7111 #如出错5s自动重启服务 Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target重载服务,运行服务sudo systemctl daemon-reload sudo systemctl enable --now fnos-qb-proxy查看日志,看看是否运行成功sudo journalctl -u fnos-qb-proxy -f如果出现类似于下文的日志则认为是运行成功Nov 19 17:07:43 fnnas bash[1965]: Waiting for qbt.sock... Nov 19 17:07:45 fnnas systemd[1]: Started fnos-qb-proxy.service - fnos qb proxy service. Nov 19 17:07:45 fnnas fnqb-proxy[5675]: proxy running on port 7111