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):
- 配置POST请求到
http://your_vps_ip:8000/execute
- Body格式:
{"text": "下载盗梦空间电影"}
- 配置POST请求到
-
安全增强:
- 添加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"
关键注意事项
- 模型选择:若DeepSeek官方模型无法本地部署,可替换为Llama 3或Phi-3等高效模型。
- 网络安全:使用VPN替代公网暴露更安全,或配置fail2ban防止暴力破解。
- 输入过滤:严格校验用户输入,防止命令注入攻击。
- 资源监控:通过
docker stats
监控容器资源使用,避免NAS过载。
此方案平衡了功能实现与安全性,通过多层防护确保家庭网络环境的安全。实际部署时需根据具体NAS性能调整模型参数和并发设置。
本文作者:BaldButStrong
本文链接:https://www.cnblogs.com/supersimple/p/18710116
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步