webui展示

功能

监控netcup服务器是否限速。

如果限速,自动删除qb下载器里种子后关闭qb下载器,vt任务无法将种子添加进入该被限速机器的qb。

解除限速,自动开启qb下载器。

白名单:该服务器的qb下载器不受自动控制,只监控限速情况。

限速状态发生变化时发送通知,支持telegram机器人和IYUU两种通知方式。

支持同时添加多个scp账户,支持一个scp账号下多台服务器控制,但每台服务器只支持一个qb下载器。

部署

  1. ssh连接机器

  2. 创建项目文件夹nc-traffic-monitor mkdir nc-traffic-monitor

  3. 移动到项目文件夹cd nc-traffic-monitor

  4. nc-traffic-monitor该文件夹下创建data文件夹 mkdir data

  5. nc-traffic-monitor该文件夹下创建config.json vi config.json

    输入i进入文本编辑模式

    复制粘贴自己的配置文件(建议提前丢给AI或者到任意一个json验证网站验证格式问题)

    按键Esc退出编辑模式

    输入:wq保存配置文件

  6. nc-traffic-monitor该文件夹下创建docker-compose.yml文件 vi docker-compose.yml

    输入i进入文本编辑模式

    复制粘贴compose文件内容

    按键Esc退出编辑模式

    输入:wq保存文件

    执行docker compose up -d

配置文件解析

"monitoring": {
        "update_interval": 300,  //nc限速情况查询频率,以秒为单位
        "retry_interval": 60,    //查询失败重试间隔时间,以秒为单位
        "log_level": "INFO",     //日志级别,INFO DEBUG
        "auto_control": true     //是否启用自动开启和关闭下载器,不需要自动管理可改为false
        }
"accounts": [
        {
            "name": "账户名称1",             //随便填写,可以看作账户的别名
            "api_credentials": {
                "loginname": "你的scp登录名",    //scp账号登录名
                "password": "你的scp密码"        //scp账号密码
            },
            "servers": [                        //scp账号下面的具体服务器信息
                {
                    "ip": "服务器IP地址",
                    "ssh_port": 22,
                    "ssh_username": "root",
                    "ssh_password": "root密码",
                    //qb的类型,两个选项:"systemd"和"docker" 
                    //选项systemd代表qb以系统服务运行大概率脚本安装,选项docker代表qb容器部署
                    "control_type": "systemd",             
                    // ssh命令行执行 systemctl list-units --all | grep qbittorrent 找到qb对应服务名称形如[email protected]
                    // ssh命令行执行 docker ps -a 查看qb对应docker名称 
                    "control_target": "服务名称,如 [email protected]",  
                    "qb_url": "http://服务器IP:端口",
                    "qb_username": "qBittorrent登录用户名",
                    "qb_password": "qBittorrent登录密码",
                    // docker类型qb需要映射实际的文件路径,systemd类型无需映射,内部留空形如"path_mapping": {}。冒号前面为docker内部路径,冒号后面为文件实际绝对路径
                    "path_mapping": {
                        "/downloads": "/root/downloads"
                    },
                    "excluded_categories": ["保留的分类1", "保留的分类2"]  //没有需要保留的分类留空 形如"excluded_categories": []
                },
                {
                    "ip": "另一台服务器IP",
                    "ssh_port": 22,
                    "ssh_username": "root",
                    "ssh_password": "root密码",
                    "control_type": "docker",
                    "control_target": "容器名称,如 qb4747",
                    "qb_url": "http://服务器IP:端口",
                    "qb_username": "qBittorrent登录用户名",
                    "qb_password": "qBittorrent登录密码",
                    "path_mapping": {},
                    "excluded_categories": ["保留的分类1", "保留的分类2"]
                }
            ]
        },
"notifications": {
        "telegram": {
            "enabled": true,   //是否启用,不启用改为false
            "bot_token": "你的Telegram Bot Token",
            "chat_id": "你的Telegram Chat ID"
        },
        "iyuu": {
            "enabled": true,   //是否启用,不启用改为false
            "token": "你的IYUU Token"
        }
    },
"web": {
        "username": "admin", //web界面的账号
        "password": "password"  //web界面的密码
    }
"proxy": {

        "enabled": false,   //关于限速通知,是否开启网络代理,支持http代理和SOCKS代理
        "proxy_address": "http://192.168.31.204:7899",  //代理地址
        "proxy_username": "",   //代理账号,没有留空
        "proxy_password": ""    //代理密码,没有留空
        }

使用

tg机器人可以通过菜单交互查询所有服务器状态、添加白名单和删除白名单

webui 通过点击具体服务器白名单位置添加白名单和删除白名单

config.json模板如下:

{
    "monitoring": {
        "update_interval": 300,
        "retry_interval": 60,
        "log_level": "INFO",
        "auto_control": true
    },
    "accounts": [
        {
            "name": "账户名称1",
            "api_credentials": {
                "loginname": "你的scp登录名",
                "password": "你的scp密码"
            },
            "servers": [
                {
                    "ip": "服务器IP地址",
                    "ssh_port": 22,
                    "ssh_username": "root",
                    "ssh_password": "root密码",
                    "control_type": "systemd",
                    "control_target": "服务名称,如 [email protected]",
                    "qb_url": "http://服务器IP:端口",
                    "qb_username": "qBittorrent登录用户名",
                    "qb_password": "qBittorrent登录密码",
                    "path_mapping": {},
                    "excluded_categories": ["保留的分类1", "保留的分类2"]
                },
                {
                    "ip": "另一台服务器IP",
                    "ssh_port": 22,
                    "ssh_username": "root",
                    "ssh_password": "root密码",
                    "control_type": "docker",
                    "control_target": "容器名称,如 qb4747",
                    "qb_url": "http://服务器IP:端口",
                    "qb_username": "qBittorrent登录用户名",
                    "qb_password": "qBittorrent登录密码",
                    "path_mapping": {
                        "/downloads": "/root/downloads"
                    },
                    "excluded_categories": ["保留的分类1", "保留的分类2"]
                }
            ]
        },
        {
            "name": "账户名称2",
            "api_credentials": {
                "loginname": "另一个账户的登录名",
                "password": "另一个账户的密码"
            },
            "servers": [
                {
                    "ip": "第三台服务器IP",
                    "ssh_port": 22,
                    "ssh_username": "root",
                    "ssh_password": "root密码",
                    "control_type": "docker",
                    "control_target": "qb4747",
                    "qb_url": "http://服务器IP:端口",
                    "qb_username": "qBittorrent登录用户名",
                    "qb_password": "qBittorrent登录密码",
                    "path_mapping": {
                        "/downloads": "/root/downloads"
                    },
                    "excluded_categories": ["保留的分类1", "保留的分类2"]
                }
            ]
        }
    ],
    "notifications": {
        "telegram": {
            "enabled": true,
            "bot_token": "你的Telegram Bot Token",
            "chat_id": "你的Telegram Chat ID"
        },
        "iyuu": {
            "enabled": true,
            "token": "你的IYUU Token"
        }
    },
    "web": {
        "username": "admin",
        "password": "password"
    },
    "proxy": {
        "enabled": false,
        "proxy_address": "http://192.168.31.204:7899",
        "proxy_username": "",
        "proxy_password": ""
        }
}

compose文件如下:

services:
  nc-traffic-monitor:
    image: guyuanwind/nc-traffic-monitor:latest
    container_name: nc-traffic-monitor
    restart: unless-stopped
    
    # 端口映射
    ports:
      - "4949:4949"                           # Web界面端口
    
    # 环境变量
    environment:
      - TZ=Asia/Shanghai
      - PYTHONUNBUFFERED=1
    
    # 挂载配置文件、数据目录
    volumes:
      - ./config.json:/app/config.json:ro     # 只读挂载配置文件
      - ./data:/app/data                      # 数据目录(状态文件和日志)
      - /etc/localtime:/etc/localtime:ro      # 挂载主机时区文件
    
    # 网络模式
    networks:
      - nc-monitor-network

networks:
  nc-monitor-network:
    driver: bridge

更新记录

1.0.1

基本的监控功能和qb管理功能

2.0.1

配置文件添加网络代理和路径映射尽量保证文件删除干净

"proxy": {
        "enabled": false,
        "proxy_address": "http://192.168.31.204:7899",
        "proxy_username": "",
        "proxy_password": ""
        }
                    "path_mapping": {
                        "/downloads": "/root/downloads"
                    },

如果有bug建议先更新镜像重新启动或者可以留言反馈

docker compose down

docker compose pull

docker compose up -d