💡知行合一.🐬|

BaldButStrong

园龄:2年11个月粉丝:2关注:0

2025-02-11 17:01阅读: 12评论: 0推荐: 0

AI与NAS交互

在NAS上部署DeepSeek并通过手机客户端远程控制其执行任务,需遵循以下步骤。此方案结合了内网穿透、权限管理和自动化脚本,确保安全性与功能性:


1. 部署DeepSeek模型服务

  • 选择模型:使用轻量级开源模型(如DeepSeek-MoE-16B-chat的4-bit量化版),确保NAS硬件兼容。
  • Docker部署
    # 使用Ollama部署
    docker run -d -p 11434:11434 --name ollama -v /path/to/models:/root/.ollama ollama/ollama
    ollama pull deepseek-moe-16b-chat:4bit
  • 验证API:通过curl http://localhost:11434/api/generate -d '{"model":"deepseek-moe-16b-chat", "prompt":"Hello"}'测试响应。

2. 配置内网穿透(以frp为例)

  • 服务端配置(VPS)
    # frps.ini
    [common]
    bind_port = 7000
    authentication_method = token
    token = your_secure_token
  • 客户端配置(NAS)
    # frpc.ini
    [common]
    server_addr = your_vps_ip
    server_port = 7000
    token = your_secure_token
    [deepseek]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 11434
    remote_port = 11434
  • 启动命令
    docker run -d --network host -v /path/to/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc

3. 权限管理与安全配置

  • 专用用户
    sudo useradd -m deepseek
    sudo usermod -aG docker,nasusers deepseek
  • Sudo权限限制
    # /etc/sudoers.d/deepseek
    deepseek ALL=(root) NOPASSWD: /scripts/download_movie.sh

4. 任务执行脚本开发

  • 脚本示例 (/scripts/download_movie.sh)
    #!/bin/bash
    MOVIE_NAME="$1"
    # 调用nastools API添加下载
    curl -X POST "http://localhost:3000/api/download" -d "title=$MOVIE_NAME"
    # 等待下载完成(需自定义轮询逻辑)
    while [ ! -f "/downloads/$MOVIE_NAME.mkv" ]; do sleep 60; done
    # 执行刮削
    /opt/tinyMediaManager/tinyMediaManagerCMD.sh -update -scrape
    # 移动文件到Jellyfin
    mv "/downloads/$MOVIE_NAME.mkv" "/media/movies/"
  • 权限设置
    chmod +x /scripts/download_movie.sh
    sudo chown deepseek:deepseek /scripts/download_movie.sh

5. 中间层服务(Python示例)

  • 安装依赖
    pip install fastapi uvicorn requests
  • 服务代码 (app/main.py)
    from fastapi import FastAPI, HTTPException
    import requests
    import subprocess
    app = FastAPI()
    DEEPSEEK_API = "http://localhost:11434/api/generate"
    def parse_command(user_input):
    # 调用DeepSeek API,使用结构化提示词
    prompt = f"""用户指令:{user_input}
    请生成JSON格式命令,包含action和参数。可选action: download_movie。
    示例:{{"action": "download_movie", "title": "Inception"}}"""
    response = requests.post(DEEPSEEK_API, json={
    "model": "deepseek-moe-16b-chat",
    "prompt": prompt,
    "format": "json"
    })
    return response.json()["response"]
    @app.post("/execute")
    async def execute_command(input: dict):
    try:
    command = parse_command(input["text"])
    if command["action"] == "download_movie":
    subprocess.run(["sudo", "/scripts/download_movie.sh", command["title"]], check=True)
    return {"status": "success"}
    else:
    raise HTTPException(status_code=400, detail="Unsupported action")
    except Exception as e:
    raise HTTPException(status_code=500, detail=str(e))
  • 启动服务
    uvicorn main:app --host 0.0.0.0 --port 8000

6. 手机客户端集成

  • 使用HTTP客户端(如Tasker+HTTP Request)

    1. 配置POST请求到http://your_vps_ip:8000/execute
    2. Body格式:{"text": "下载盗梦空间电影"}
  • 安全增强

    • 添加API密钥验证
    • 使用HTTPS(通过frp的HTTPS代理或Caddy反向代理)

7. 监控与日志

  • 日志查看
    journalctl -u deepseek_service -f # 查看服务日志
    tail -f /var/log/frp/frpc.log # 内网穿透日志
  • 失败通知:在脚本中添加邮件/Telegram通知:
    curl -s -X POST "https://api.telegram.org/bot{BOT_TOKEN}/sendMessage" \
    -d "chat_id={CHAT_ID}&text=Download failed: $MOVIE_NAME"

关键注意事项

  1. 模型选择:若DeepSeek官方模型无法本地部署,可替换为Llama 3或Phi-3等高效模型。
  2. 网络安全:使用VPN替代公网暴露更安全,或配置fail2ban防止暴力破解。
  3. 输入过滤:严格校验用户输入,防止命令注入攻击。
  4. 资源监控:通过docker stats监控容器资源使用,避免NAS过载。

此方案平衡了功能实现与安全性,通过多层防护确保家庭网络环境的安全。实际部署时需根据具体NAS性能调整模型参数和并发设置。

本文作者:BaldButStrong

本文链接:https://www.cnblogs.com/supersimple/p/18710116

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   BaldButStrong  阅读(12)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起