飞牛nas使用fnos-qb-proxy以直接调用系统下载套件(非Docker)

杂类·教程经验·NAS · 今天 · 2 人浏览

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-amd64
  • docker-compose.yml

    services:
    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.sock
  • Dockerfile.txt

    FROM 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-proxy

    sudo 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
Theme Jasmine by Kent Liao
beian
皖公网安备34122202000364号