banner
约 5,100 字
17 分钟

飞牛 NAS 部署 AI 闲鱼监控机器人完整教程

2026年3月8日

摘要

本文介绍闲鱼监控工具 ai-goofish-monitor 的优化部署方案。该工具支持多关键词监控与AI智能筛选,默认适配七牛云 OpenAI 兼容接口及 Gemini-2.5-Pro 模型。核心新增 AI 参数一键配置功能,通过 Docker 脚本简化了飞牛 NAS 部署流程,用户仅需输入 API Key 即可快速启动,实现 24 小时无人值守的商品监控与实时推送。

本文基于原部署教程优化,核心新增 AI 模型参数一键配置功能,默认适配七牛云 OpenAI 兼容接口与 Gemini-2.5-Pro 模型,无需后续手动在 Web 界面补充 AI 配置,进一步简化部署流程。

1. 项目介绍

ai-goofish-monitor 是一套闲鱼二手平台自动化监控工具,支持:

  • 多关键词实时监控

  • AI 智能筛选(支持图文多模态,默认适配 Gemini-2.5-Pro)

  • 多渠道推送(Bark、企业微信、ntfy.sh 等)

  • Web 可视化管理界面

通过 Docker 一键部署,可在飞牛 NAS 上 24 小时运行,自动发现符合条件的商品并实时通知。工具默认集成七牛云 OpenAI 兼容接口,配置时仅需输入七牛云 API Key 即可启用 AI 筛选功能(未注册七牛云账号可先通过七牛云注册链接完成注册)。

blog image
blog image

2. 准备工作

1. 安装 Docker

  • 进入飞牛 NAS 后台 → 应用商店 → 搜索 Docker → 安装

  • 安装完成后,在「服务」中确认 Docker 服务已启动

2. 下载源码与部署脚本

提供两种获取方式,任选其一(网盘含全套文件,无需手动整理脚本):

方式 1:从 GitHub 下载

方式 2:从夸克网盘获取(含源码+优化脚本)

已将「ai-goofish-monitor」全套文件(源码压缩包+优化后的一键部署脚本)上传至夸克网盘:

  • 打开「夸克APP」,复制下方内容或链接获取:
    提取码直达:/~d60d38WAT9~:/
    网盘链接:https://pan.quark.cn/s/c7711ad32186

  • 将网盘中的文件下载后,上传到 NAS 部署目录(例如 /vol1/1000/docker/ai-goofish

3. 优化版一键部署脚本(支持 AI 参数一键配置)

若从 GitHub 下载,需将下方脚本保存为 deploy.sh 并上传到与 ZIP 文件相同的目录;若从网盘获取,网盘中已包含该优化脚本,可直接使用。

核心优化点

  • 新增 AI 模型参数配置步骤(OPENAI_API_KEY、OPENAI_BASE_URL、OPENAI_MODEL_NAME)

  • 默认 AI 接口:七牛云 OpenAI 兼容接口(https://openai.qiniu.com/v1

  • 默认 AI 模型:gemini-2.5-pro(需与七牛云支持的模型匹配)

  • 七牛云平台获取 API Key(未注册可通过七牛云注册链接注册)

纯文本
#!/bin/bash
set +H  # 关闭 history 扩展,防止 ! 号报错

# 颜色定义(增强可读性)
RED="\033[0;31m"
GREEN="\033[0;32m"
YELLOW="\033[1;33m"
BLUE="\033[0;34m"
NC="\033[0m"  # 重置颜色

# 全局变量(统一配置)
PROJECT_NAME="ai-goofish-monitor"
DEFAULT_PORT="8000"
DEFAULT_USER="admin"
DEFAULT_PWD="admin123"
# AI 核心配置(默认七牛云接口+Gemini模型)
DEFAULT_OPENAI_BASE_URL="https://openai.qiniu.com/v1"  # 七牛云 OpenAI 兼容接口
DEFAULT_OPENAI_MODEL_NAME="gemini-2.5-pro"
COMPOSE_CMD=""  # 存储最终使用的 compose 命令(docker compose 或 docker-compose)


# 1. 检查并切换 root 用户(确保权限足够)
check_root() {
    if [ "$(id -u)" -ne 0 ]; then
        echo -e "\n${YELLOW}⚠️ 当前用户不是 root,部分操作(如安装依赖)可能失败${NC}"
        read -p "是否切换到 root 用户继续?(y/n,默认y): " switch_root
        switch_root=${switch_root:-y}  # 默认为y,减少用户输入
        
        if [ "$switch_root" = "y" ]; then
            echo -e "${BLUE}🔑 正在切换到 root 用户...${NC}"
            # 传递所有参数给 root 权限下的脚本
            exec sudo su -c "$0 $*"
        else
            echo -e "${YELLOW}⚠️ 警告:非 root 权限可能导致部署失败,后续问题请优先检查权限${NC}"
            sleep 2
        fi
    fi
}


# 2. 检查基础依赖(unzip、docker)
check_basic_deps() {
    echo -e "\n${BLUE}=== 开始检查基础依赖 ===${NC}"
    
    # 检查 unzip(解压源码用)
    if ! command -v unzip &> /dev/null; then
        echo -e "${RED}❌ 未找到 unzip 工具${NC}"
        read -p "是否自动安装 unzip?(y/n,默认y): " install_unzip
        install_unzip=${install_unzip:-y}
        
        if [ "$install_unzip" = "y" ]; then
            echo -e "${YELLOW}📦 正在安装 unzip...${NC}"
            apt-get update > /dev/null 2>&1  # 静默更新源
            apt-get install -y unzip > /dev/null 2>&1
            if command -v unzip &> /dev/null; then
                echo -e "${GREEN}✅ unzip 安装成功${NC}"
            else
                echo -e "${RED}❌ unzip 安装失败,请手动执行:sudo apt-get install -y unzip${NC}"
                exit 1
            fi
        else
            echo -e "${RED}❌ 缺少 unzip 无法解压源码,部署终止${NC}"
            exit 1
        fi
    else
        echo -e "${GREEN}✅ 已找到 unzip${NC}"
    fi

    # 检查 Docker(核心依赖,必须提前安装)
    if ! command -v docker &> /dev/null; then
        echo -e "${RED}❌ 未找到 Docker!请先在 NAS 应用商店安装 Docker 并启动服务${NC}"
        echo -e "${BLUE}💡 提示:飞牛 NAS 安装路径:应用商店 → 搜索 Docker → 安装并启动${NC}"
        exit 1
    else
        echo -e "${GREEN}✅ 已找到 Docker${NC}"
        # 检查 Docker 服务是否运行
        if ! systemctl is-active --quiet docker; then
            echo -e "${YELLOW}⚠️ Docker 服务未启动,正在尝试启动...${NC}"
            systemctl start docker
            sleep 3
            if systemctl is-active --quiet docker; then
                echo -e "${GREEN}✅ Docker 服务启动成功${NC}"
            else
                echo -e "${RED}❌ Docker 服务启动失败,请手动在 NAS 后台启动${NC}"
                exit 1
            fi
        fi
    fi
}


# 3. 检测并安装 Docker Compose(核心优化:适配新旧版)
check_docker_compose() {
    echo -e "\n${BLUE}=== 开始检测 Docker Compose ===${NC}"
    
    # 步骤1:先检测新版 Docker Compose(插件形式:docker compose)
    if docker compose version &> /dev/null; then
        COMPOSE_CMD="docker compose"
        echo -e "${GREEN}✅ 检测到新版 Docker Compose(插件形式),使用命令:$COMPOSE_CMD${NC}"
        return  # 检测到则直接返回,无需后续检查
    fi

    # 步骤2:再检测旧版 Docker Compose(独立工具:docker-compose)
    if command -v docker-compose &> /dev/null; then
        COMPOSE_CMD="docker-compose"
        echo -e "${GREEN}✅ 检测到旧版 Docker Compose(独立工具),使用命令:$COMPOSE_CMD${NC}"
        return
    fi

    # 步骤3:若均未检测到,提供安装选项
    echo -e "${RED}❌ 未找到 Docker Compose(无论是新版插件还是旧版工具)${NC}"
    echo -e "${BLUE}📌 请选择安装方式(根据你的 Docker 版本):${NC}"
    echo -e "   1. 新版插件(推荐,适用于 Docker 20.10+,命令:docker compose)"
    echo -e "   2. 旧版工具(适用于 Docker 20.10 以下,命令:docker-compose)"
    read -p "输入安装方式编号(1/2,默认1): " install_choice
    install_choice=${install_choice:-1}

    # 根据选择安装对应的 Compose
    if [ "$install_choice" = "1" ]; then
        echo -e "${YELLOW}📦 正在安装新版 Docker Compose 插件...${NC}"
        apt-get update > /dev/null 2>&1
        apt-get install -y docker-compose-plugin > /dev/null 2>&1
        # 验证安装
        if docker compose version &> /dev/null; then
            COMPOSE_CMD="docker compose"
            echo -e "${GREEN}✅ 新版 Docker Compose 插件安装成功${NC}"
        else
            echo -e "${RED}❌ 安装失败,请手动执行:sudo apt-get install -y docker-compose-plugin${NC}"
            exit 1
        fi
    else
        echo -e "${YELLOW}📦 正在安装旧版 Docker Compose 工具...${NC}"
        apt-get update > /dev/null 2>&1
        apt-get install -y docker-compose > /dev/null 2>&1
        # 验证安装
        if command -v docker-compose &> /dev/null; then
            COMPOSE_CMD="docker-compose"
            echo -e "${GREEN}✅ 旧版 Docker Compose 工具安装成功${NC}"
        else
            echo -e "${RED}❌ 安装失败,请手动执行:sudo apt-get install -y docker-compose${NC}"
            exit 1
        fi
    fi
}


# 4. 解压源码并进入目录
unzip_source() {
    echo -e "\n${BLUE}=== 开始处理源码文件 ===${NC}"
    
    # 查找当前目录下的 ZIP 源码包(仅取第一个)
    ZIP_FILE=$(find . -maxdepth 1 -type f -iname "*.zip" | head -n 1)
    if [ -z "$ZIP_FILE" ]; then
        echo -e "${RED}❌ 未在当前目录找到 ZIP 源码包${NC}"
        echo -e "${BLUE}💡 提示:请将 ai-goofish-monitor 的 ZIP 包与脚本放在同一目录${NC}"
        exit 1
    fi
    echo -e "${GREEN}✅ 找到源码包:$ZIP_FILE${NC}"

    # 解压(-o 覆盖现有文件,-q 静默解压)
    echo -e "${YELLOW}📦 正在解压源码包...${NC}"
    unzip -o -q "$ZIP_FILE"
    if [ $? -ne 0 ]; then
        echo -e "${RED}❌ 源码包解压失败(可能是文件损坏)${NC}"
        exit 1
    fi

    # 查找解压后的源码目录(匹配 ai-goofish-monitor-* 格式)
    SRC_DIR=$(find . -maxdepth 1 -type d -iname "$PROJECT_NAME-*" | head -n 1)
    if [ -z "$SRC_DIR" ]; then
        echo -e "${RED}❌ 未找到解压后的源码目录${NC}"
        exit 1
    fi
    echo -e "${GREEN}✅ 找到源码目录:$SRC_DIR${NC}"

    # 进入源码目录(后续操作均在此目录执行)
    cd "$SRC_DIR" || {
        echo -e "${RED}❌ 无法进入源码目录:$SRC_DIR${NC}"
        exit 1
    }
    echo -e "${BLUE}📂 已进入源码目录:$(pwd)${NC}"
}


# 5. 配置环境变量(.env 文件,含 AI 参数)
config_env() {
    echo -e "\n${BLUE}=== 开始配置环境变量 ===${NC}"
    
    # 复制示例配置文件(若不存在则创建)
    if [ -f ".env.example" ]; then
        cp -n .env.example .env  # -n 避免覆盖已存在的 .env
        echo -e "${GREEN}✅ 已生成 .env 配置文件(基于 .env.example)${NC}"
    else
        echo -e "${YELLOW}⚠️ 未找到 .env.example,将创建空的 .env 文件${NC}"
        touch .env
    fi

    # 配置 Web 登录账号密码
    read -p "是否修改 Web 管理界面的账号密码?(y/n,默认n): " modify_auth
    modify_auth=${modify_auth:-n}
    if [ "$modify_auth" = "y" ]; then
        read -p "输入新用户名(默认:$DEFAULT_USER): " new_user
        read -p "输入新密码(默认:$DEFAULT_PWD): " new_pwd
        # 替换 .env 中的账号密码(若无则追加)
        new_user=${new_user:-$DEFAULT_USER}
        new_pwd=${new_pwd:-$DEFAULT_PWD}
        sed -i "/^WEB_USERNAME=/d" .env  # 删除原有配置
        sed -i "/^WEB_PASSWORD=/d" .env
        echo "WEB_USERNAME=$new_user" >> .env
        echo "WEB_PASSWORD=$new_pwd" >> .env
        echo -e "${GREEN}✅ 账号密码已更新:用户名=$new_user,密码=$new_pwd${NC}"
    else
        echo -e "${YELLOW}ℹ️ 保持默认账号密码:用户名=$DEFAULT_USER,密码=$DEFAULT_PWD(建议首次登录后修改)${NC}"
    fi

    # 配置 AI 相关环境变量(默认使用七牛云接口)
    echo -e "\n${BLUE}=== 开始配置 AI 模型参数(支持多模态) ===${NC}"
    echo -e "${YELLOW}💡 提示:默认使用七牛云 OpenAI 兼容接口(支持 Gemini 等模型),未注册可先通过[七牛云注册链接](https://s.qiniu.com/Z7V73a)完成注册${NC}"
    read -p "是否配置 AI 模型参数?(y/n,默认y): " config_ai
    config_ai=${config_ai:-y}  # 默认为y,确保AI功能可正常使用
    
    if [ "$config_ai" = "y" ]; then
        # 1. 配置 OPENAI_API_KEY(必填,需七牛云平台的 API Key)
        while true; do
            read -p "输入 AI 模型 API Key(七牛云平台获取,未注册可先通过链接注册:https://s.qiniu.com/Z7V73a): " ai_api_key
            if [ -n "$ai_api_key" ]; then
                break  # 输入非空则退出循环
            else
                echo -e "${RED}❌ API Key 不能为空,请重新输入${NC}"
            fi
        done

        # 2. 配置 OPENAI_BASE_URL(默认七牛云地址,可自定义兼容接口)
        read -p "输入 AI 模型 API 接口地址(默认:$DEFAULT_OPENAI_BASE_URL): " ai_base_url
        ai_base_url=${ai_base_url:-$DEFAULT_OPENAI_BASE_URL}  # 为空则使用七牛云默认地址

        # 3. 配置 OPENAI_MODEL_NAME(默认 gemini-2.5-pro,需与七牛云支持的模型匹配)
        read -p "输入 AI 模型名称(七牛云支持的多模态模型,默认:$DEFAULT_OPENAI_MODEL_NAME): " ai_model_name
        ai_model_name=${ai_model_name:-$DEFAULT_OPENAI_MODEL_NAME}  # 为空则使用默认模型

        # 将 AI 参数写入 .env 文件(先删后加,避免重复)
        sed -i "/^OPENAI_API_KEY=/d" .env
        sed -i "/^OPENAI_BASE_URL=/d" .env
        sed -i "/^OPENAI_MODEL_NAME=/d" .env
        echo "OPENAI_API_KEY=$ai_api_key" >> .env
        echo "OPENAI_BASE_URL=$ai_base_url" >> .env
        echo "OPENAI_MODEL_NAME=$ai_model_name" >> .env

        echo -e "\n${GREEN}✅ AI 模型参数配置完成:${NC}"
        echo -e "   - API Key:$ai_api_key(已脱敏存储)"
        echo -e "   - API 地址:$ai_base_url(七牛云兼容接口)"
        echo -e "   - 模型名称:$ai_model_name"
    else
        echo -e "${YELLOW}ℹ️ 未配置 AI 模型参数,后续需手动在 Web 界面「系统设置」→「AI 设置」中补充(七牛云 API Key 需从[七牛云注册链接](https://s.qiniu.com/Z7V73a)注册后获取)${NC}"
    fi
}


# 6. 配置端口(避免冲突)
config_port() {
    echo -e "\n${BLUE}=== 开始配置服务端口 ===${NC}"
    
    # 询问是否修改端口
    read -p "是否修改 Web 服务端口(默认:$DEFAULT_PORT)?(y/n,默认n): " change_port
    change_port=${change_port:-n}
    if [ "$change_port" = "y" ]; then
        # 循环验证端口有效性(1-65535,且为数字)
        while true; do
            read -p "输入新端口(1-65535): " new_port
            if [[ "$new_port" =~ ^[0-9]+$ && "$new_port" -ge 1 && "$new_port" -le 65535 ]]; then
                DEFAULT_PORT="$new_port"
                break
            else
                echo -e "${RED}❌ 无效端口!请输入 1-65535 之间的数字${NC}"
            fi
        done
        echo -e "${GREEN}✅ 端口已设置为:$DEFAULT_PORT${NC}"
    else
        echo -e "${YELLOW}ℹ️ 保持默认端口:$DEFAULT_PORT(若端口冲突请重新运行脚本修改)${NC}"
    fi

    # 查找 docker-compose 文件(支持 yml/yaml 后缀)
    COMPOSE_FILE=$(find . -maxdepth 1 -type f \( -iname "docker-compose.yml" -o -iname "docker-compose.yaml" \) | head -n 1)
    if [ -z "$COMPOSE_FILE" ]; then
        echo -e "${RED}❌ 未找到 docker-compose.yml/yaml 文件${NC}"
        exit 1
    fi
    echo -e "${GREEN}✅ 找到 Compose 配置文件:$COMPOSE_FILE${NC}"

    # 修改端口映射(替换 8000:8000 为 新端口:8000,保留备份 .bak)
    echo -e "${YELLOW}🔧 正在修改端口映射...${NC}"
    sed -i.bak "s/- \"8000:8000\"/- \"$DEFAULT_PORT:8000\"/" "$COMPOSE_FILE"
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}✅ 端口映射已更新:$DEFAULT_PORT:8000${NC}"
        rm -f "${COMPOSE_FILE}.bak"  # 删除备份文件(避免冗余)
    else
        echo -e "${RED}❌ 端口修改失败,请手动编辑 $COMPOSE_FILE 中的端口映射${NC}"
        exit 1
    fi
}


# 7. 启动服务并输出结果
start_service() {
    echo -e "\n${BLUE}=== 开始启动服务 ===${NC}"
    
    # 启动 Docker 容器(-d 后台运行)
    echo -e "${YELLOW}🚀 正在启动 $PROJECT_NAME 服务...(可能需要 1-2 分钟)${NC}"
    $COMPOSE_CMD -f "$COMPOSE_FILE" up -d
    if [ $? -ne 0 ]; then
        echo -e "${RED}❌ 服务启动失败!请执行以下命令查看错误日志:${NC}"
        echo -e "   cd $(pwd) && $COMPOSE_CMD -f $COMPOSE_FILE logs -f"
        exit 1
    fi

    # 获取关键信息(NAS IP、登录账号、AI 配置)
    NAS_IP=$(hostname -I | awk '{print $1}')  # 取第一个网卡的 IP
    WEB_USER=$(grep ^WEB_USERNAME= .env | cut -d= -f2)
    WEB_PASS=$(grep ^WEB_PASSWORD= .env | cut -d= -f2)
    AI_MODEL=$(grep ^OPENAI_MODEL_NAME= .env | cut -d= -f2)
    AI_BASE_URL=$(grep ^OPENAI_BASE_URL= .env | cut -d= -f2)

    # 输出最终结果(高亮关键信息)
    echo -e "\n${GREEN}=======================================${NC}"
    echo -e "${GREEN}✅ $PROJECT_NAME 部署完成!${NC}"
    echo -e "${GREEN}=======================================${NC}"
    echo -e "${BLUE}🌐 Web 管理界面:${NC} http://$NAS_IP:$DEFAULT_PORT"
    echo -e "${BLUE}👤 登录用户名:${NC} $WEB_USER"
    echo -e "${BLUE}🔑 登录密码:${NC} $WEB_PASS"
    echo -e "${BLUE}🤖 AI 配置:${NC} 模型=$AI_MODEL,接口=$AI_BASE_URL(API Key 从七牛云获取,未注册可通过[七牛云注册链接](https://s.qiniu.com/Z7V73a)注册)"
    echo -e "${YELLOW}💡 后续操作提示:${NC}"
    echo -e "   1. 访问 Web 界面后,先完成「闲鱼登录配置」(需扫码)"
    echo -e "   2. 若 AI 功能异常,检查七牛云 API Key 有效性及模型兼容性(未注册七牛云可先通过链接注册)"
    echo -e "   3. 创建监控任务时,用自然语言描述需求(如:95新索尼A7M4,预算1万-1.3万)"
    echo -e "${GREEN}=======================================${NC}"
}


# 主流程:按顺序执行所有步骤
main() {
    echo -e "${YELLOW}=== 欢迎使用 $PROJECT_NAME 一键部署脚本 ===${NC}"
    check_root "$@"          # 1. 权限检查
    check_basic_deps         # 2. 基础依赖(unzip、docker)
    check_docker_compose     # 3. Compose 检测与安装(核心优化)
    unzip_source             # 4. 解压源码
    config_env               # 5. 配置账号密码 + AI 参数
    config_port              # 6. 配置端口
    start_service            # 7. 启动服务
}

# 启动主流程
main "$@"

4. 执行部署

1. 进入部署目录

通过 SSH 工具(如 PuTTY、FinalShell)连接飞牛 NAS,进入脚本所在的部署目录(例如):

纯文本
cd /vol1/1000/docker/ai-goofish

2. 赋予脚本执行权限

纯文本
chmod +x deploy.sh

3. 运行部署脚本

纯文本
./deploy.sh

4. 按提示完成配置

脚本运行后,将按以下顺序引导配置,全程无需手动编辑文件:

  1. 权限检查:询问是否切换到 root 用户(建议选“y”,避免权限问题)。

  2. 依赖检查:自动检测并安装 unzip、Docker Compose(若缺失)。

  3. 源码处理:自动解压 ZIP 包并进入源码目录。

  4. Web 账号配置:询问是否修改默认账号密码(默认 admin/admin123,建议修改)。

  5. AI 参数配置

    • 提示默认使用七牛云接口,未注册七牛云可先通过七牛云注册链接完成注册。

    • 需输入从七牛云获取的 API Key(必填)。

    • API 接口地址默认 https://openai.qiniu.com/v1,直接回车保留默认。

    • 模型名称默认 gemini-2.5-pro,直接回车保留默认(需确保七牛云支持该模型)。

  6. 端口配置:询问是否修改 Web 服务端口(默认 8000,若冲突可更换)。

5. 等待部署完成

脚本自动启动 Docker 容器,约 1-2 分钟后,终端将输出 Web 界面访问地址、登录账号及 AI 配置信息,例如:

纯文本
=======================================
✅ ai-goofish-monitor 部署完成!
=======================================
🌐 Web 管理界面:http://192.168.1.100:8000
👤 登录用户名:admin
🔑 登录密码:admin123
🤖 AI 配置:模型=gemini-2.5-pro,接口=https://openai.qiniu.com/v1(API Key 从七牛云获取,未注册可通过[七牛云注册链接](https://s.qiniu.com/Z7V73a)注册)
=======================================

5. 访问与配置

1. 登录 Web 管理界面

  • 打开浏览器,输入终端输出的访问地址(如 http://192.168.1.100:8000)。

  • 输入配置的用户名和密码登录(默认 admin/admin123)。

2. 配置闲鱼登录(关键步骤)

  • 点击右上角「登录闲鱼账号」。

  • 按提示安装浏览器插件 Xianyu Login State Extractor

  • 打开闲鱼官网(https://2.taobao.com),用手机闲鱼 APP 扫码登录。

  • 登录后点击插件图标,提取登录信息并复制,粘贴到 Web 界面保存。

3. 验证 AI 配置(可选)

若在部署脚本中已配置 AI 参数,可进入「系统设置」→「AI 设置」,确认 API Key、接口地址、模型名称与脚本配置一致(API Key 需从七牛云获取,未注册可通过七牛云注册链接注册),点击「测试 AI 配置」验证连通性。

4. 创建监控任务

  • 点击「任务管理」→「创建新任务」。

  • 用自然语言描述需求(例如“95新索尼A7M4,预算1万-1.3万,快门数<5000”)。

  • 补充关键词、价格范围等参数(AI 会自动生成筛选标准),点击「创建」。

  • 回到任务列表,点击「启动」,工具开始 24 小时监控。

6. 常见问题排查

1. 端口冲突

  • 现象:部署后无法访问 Web 界面,或脚本提示“端口已被占用”。

  • 解决:重新运行脚本,在「端口配置」步骤修改为未占用的端口(如 8001),并在飞牛 NAS 防火墙设置中开放新端口。

2. AI 配置失败

  • 现象:测试 AI 配置时提示“连接失败”或“API Key 无效”。

  • 解决:

    • 检查是否已注册七牛云账号(未注册可通过七牛云注册链接完成注册)。

    • 确认七牛云 API Key 正确(需从七牛云控制台「AI 服务」→「OpenAI 兼容接口」中获取)。

    • 确认模型名称与七牛云支持的型号一致(可在七牛云官网查询支持的多模态模型列表)。

    • 检查 NAS 网络是否能访问七牛云接口(可通过 ping openai.qiniu.com 测试连通性)。

3. 容器启动失败

  • 现象:脚本提示“服务启动失败”,或执行 docker ps 看不到 ai-goofish-monitor 容器。

  • 解决:进入源码目录,执行以下命令查看错误日志:

    纯文本
    cd /vol1/1000/docker/ai-goofish/ai-goofish-monitor-xxx  # 替换为实际源码目录
    docker compose logs -f

    根据日志提示修复问题(如依赖缺失、配置文件错误)。

4. 权限不足

  • 现象:执行脚本时提示“Permission denied”,或解压/启动容器失败。

  • 解决:

    • 运行脚本时选择切换到 root 用户,或在命令前加 sudo(如 sudo ./deploy.sh)。

    • 飞牛 NAS 切换 root 用户命令:sudo -i,输入当前用户密码后再执行脚本。

5. 更新项目

  • 步骤:从 GitHub 或夸克网盘获取最新源码包和部署脚本,上传到原部署目录,重复「执行部署」步骤(脚本会自动覆盖旧配置,保留 .env 文件中的账号和 AI 参数)。

7. 总结

通过优化后的部署脚本,可在飞牛 NAS 上快速搭建 AI 闲鱼监控工具,核心优势包括:

  • 一键配置:无需手动编辑 .env 文件,脚本引导完成 Web 账号、AI 参数、端口的全部配置。

  • 默认适配:预置七牛云 OpenAI 兼容接口与 Gemini-2.5-Pro 模型,减少用户选型成本,未注册七牛云可通过七牛云注册链接快速注册。

  • 无人值守:部署后自动 24 小时运行,新商品符合条件时通过 Bark/企业微信实时通知,抢占“捡漏”先机。

若从夸克网盘获取文件,可跳过“手动保存脚本”步骤,直接上传全套文件执行部署,进一步简化操作。

END
© 2026 执手听风. All Rights Reserved. / RSS / Sitemap
Powered by Tanstack Start & Flare Stack Blog