首页/新闻资讯/正文详情

用 Docker Compose 在群晖/飞牛 NAS 上部署 Cursor 文档 AI 大模型:TaoToken 统一 Key 接入 OpenAI API 的配置方案

发布时间:2026/9/24 17:30:47 来源:云帆数科 栏目:资讯中心
用 Docker Compose 在群晖/飞牛 NAS 上部署 Cursor 文档 AI 大模型:TaoToken 统一 Key 接入 OpenAI API 的配置方案
1. 为什么要在 NAS 上折腾 Cursor 文档 AI 大模型很多用群晖、飞牛 NAS 的朋友手里其实有一台 7×24 小时开机的“小服务器”但平时只拿来存照片、跑下载、做备份算力闲置得厉害。与此同时写代码时又离不开 AI 补全和对话Cursor 编辑器内置的 AI 确实好用可订阅费用对个人开发者来说不算便宜。于是就有了一个思路把 Cursor 官网文档页面里那个“询问 AI”的能力通过 Docker Compose 部署到 NAS 上转成标准的 OpenAI API 接口这样任何支持 OpenAI 格式的工具都能连过来用。这个方案的核心价值在于三点第一NAS 常年在线部署一次就能长期提供服务不用每次开电脑第二对外暴露的是标准 OpenAI APICherry Studio、Kilo Code、Continue 这类工具都能直接接入学习成本几乎为零第三通过 TaoToken 统一 Key 和 API 通道来管理调用入口把模型访问收敛到一个可控的网关后续换模型、加配额、看用量都方便。适合谁有群晖或飞牛 NAS、会一点 Docker、想低成本体验多模型对话的开发者。下面我把整套 docker-compose.yml、config.toml 骨架、环境变量和 curl 验证步骤完整写出来你可以直接复制跟做。2. TaoToken 前置准备统一 Key 与 API 通道在动手写 Compose 之前先把“入口”理清楚。这个项目本身是一个 OpenAI 兼容的服务端它需要一个上游模型通道来真正完成推理。我试过直接把各种 Key 散落在不同工具里时间一长根本记不清哪个工具用了哪个 Key所以更推荐用 TaoToken 做统一入口所有工具都指向同一个 API 地址Key 也只维护一份。你需要先拿到两样东西一个是 API Key一个是接入地址。Key 在控制台的 API Keys 页面创建地址统一用https://taotoken.net/api。注意这个地址是 API 根路径实际调用时拼上/v1/chat/completions就是完整的 OpenAI 兼容端点。如果你后面要长期跑编码类 Agent可以顺带了解下 Coding Plan它更适合高频、长会话的场景只是偶尔对话验证模型用模型对话页面就够。注意Key 只创建一次就妥善保存页面关闭后通常不再完整显示。不要把它写进会提交到 Git 的配置文件里用环境变量或.env文件隔离。这一步做完你手里应该有TAOTOKEN_API_KEY你的密钥和TAOTOKEN_BASE_URLhttps://taotoken.net/api。接下来所有配置都围绕这两个值展开。3. 可复制的 docker-compose.yml 与 config.toml 骨架群晖和飞牛 NAS 都自带 Docker群晖叫 Container ManagerCompose 的写法基本一致。先在 NAS 上建一个目录比如/volume1/docker/cursor-ai把下面两个文件放进去。3.1 docker-compose.ymlservices: cursor-ai: image: ghcr.io/jhhgiyv/cursorweb2api:latest container_name: cursor-ai restart: unless-stopped network_mode: bridge ports: - 8000:8000 env_file: - .env environment: - TZAsia/Shanghai - API_KEY${LOCAL_API_KEY} - FP${BROWSER_FP} - MODELSanthropic/claude-sonnet-4.5,google/gemini-2.5-flash,openai/gpt-5-nano - TIMEOUT60 - MAX_RETRIES2 - ENABLE_FUNCTION_CALLINGfalse - TRUNCATION_CONTINUEfalse - UPSTREAM_BASE_URL${TAOTOKEN_BASE_URL} - UPSTREAM_API_KEY${TAOTOKEN_API_KEY}这里的关键点API_KEY是你本地服务的鉴权密钥随便生成一串随机值别用默认的aaaUPSTREAM_BASE_URL和UPSTREAM_API_KEY指向 TaoToken让服务把请求转发到统一通道。MODELS用逗号分隔按你实际需要的模型填。3.2 .env 文件LOCAL_API_KEYsk-local-换成你的随机串 BROWSER_FP你的浏览器指纹base64 TAOTOKEN_BASE_URLhttps://taotoken.net/api TAOTOKEN_API_KEY你的TaoToken密钥3.3 config.toml 骨架有些工具比如部分 CLI 客户端习惯用 TOML 配置这里给一份骨架方便你对接[provider] name taotoken base_url https://taotoken.net/api/v1 api_key 你的TaoToken密钥 [model] default anthropic/claude-sonnet-4.5 fallback google/gemini-2.5-flash [request] timeout 60 max_retries 2 stream truebase_url记得带上/v1这是 OpenAI 兼容接口的惯例。default和fallback按你MODELS里列出的标识填。3.4 浏览器指纹怎么拿这个项目需要一个浏览器指纹作为环境变量。在浏览器控制台执行下面这段把输出的 base64 字符串填到.env的BROWSER_FPfunction getBrowserFingerprint() { const canvas document.createElement(canvas); const gl canvas.getContext(webgl) || canvas.getContext(experimental-webgl); let vendor , renderer ; if (gl) { const info gl.getExtension(WEBGL_debug_renderer_info); if (info) { vendor gl.getParameter(info.UNMASKED_VENDOR_WEBGL) || ; renderer gl.getParameter(info.UNMASKED_RENDERER_WEBGL) || ; } } const fp { UNMASKED_VENDOR_WEBGL: vendor, UNMASKED_RENDERER_WEBGL: renderer, userAgent: navigator.userAgent }; return btoa(JSON.stringify(fp)); } console.log(getBrowserFingerprint());拿到后粘贴进.env注意不要有多余换行。4. 启动服务并用 curl 验证 OpenAI API 调用文件准备好后在 NAS 的 SSH 里进入目录执行cd /volume1/docker/cursor-ai docker compose up -d docker compose logs -f cursor-ai看到服务监听 8000 端口、没有报错就说明起来了。接着用 curl 验证这一步是判断“到底通没通”的关键curl http://127.0.0.1:8000/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer sk-local-换成你的随机串 \ -d { model: anthropic/claude-sonnet-4.5, messages: [{role: user, content: 你好请用一句话介绍你自己}], stream: false }如果返回 JSON 里带choices和message.content说明整条链路通了本地服务 → TaoToken 统一通道 → 模型返回。想测流式就把stream改成true会看到逐块返回的数据。局域网内其他设备把127.0.0.1换成 NAS 的 IP 即可比如http://192.168.1.10:8000/v1/chat/completions。在 Cherry Studio 或 Kilo Code 里接入时基础 URL 填http://NAS的IP:8000/v1Key 填你本地的LOCAL_API_KEY模型名填MODELS里的标识。这样 NAS 就成了你家里的 AI 网关手机、平板、笔记本都能连。5. 本篇常见错排查部署过程里最容易卡在几个地方我按出现频率列一下。容器起来但 curl 超时先docker compose logs看有没有上游连接错误。多半是UPSTREAM_BASE_URL写错注意不要漏掉/api也不要多加/v1转发逻辑里会拼。另外确认 NAS 能正常访问外网。返回 401 或鉴权失败检查两处 Key。本地请求头里的 Bearer 必须是LOCAL_API_KEY上游的TAOTOKEN_API_KEY要填对。两者别搞混一个是进门钥匙一个是出门通行证。模型名报 not foundMODELS里的标识必须和请求体里的model完全一致大小写、斜杠都不能差。改完MODELS要docker compose up -d重建容器才生效。指纹相关报错BROWSER_FP必须是合法 base64粘贴时别带引号或空格。如果换了浏览器或系统更新指纹可能失效重新生成一次即可。端口冲突群晖上 8000 可能被别的套件占用把ports左边改成18000:8000访问时用 18000。提示排障时优先看日志再逐段验证。先确认本地服务活着再确认上游通道通最后才怀疑模型名。这个顺序能省很多时间。6. 长期使用与接入建议跑通之后建议把 NAS 上的这个服务当成基础设施来维护。第一给容器配好restart: unless-stoppedNAS 重启后自动拉起第二.env文件权限收紧别让其他账户读到 Key第三定期docker compose pull更新镜像模型列表和兼容性会随项目迭代变化。如果你后面要把它接进编码工作流比如让 Agent 长时间跑任务建议走 Coding Plan 那条线配额和稳定性更适合高频场景只是日常问答和验证用模型对话就够了。所有接入细节和参数说明官方文档里写得更全遇到拿不准的配置先去接入文档核对一遍。把 Key 和地址统一到 TaoToken 之后你会发现换工具、加设备都只是改一个 base_url 的事NAS 这台“闲置算力”才算真正用起来了。

相关推荐

一天一个开源项目(第205篇):PenguinHarness - 让 AI 来构建 AI
一天一个开源项目(第205篇):PenguinHarness - 让 AI 来构建 AI

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 17:30:47

Buildroot 下如何查看 RK3588 板子的总内存,并分析 Reserved Memory 与 CMA
Buildroot 下如何查看 RK3588 板子的总内存,并分析 Reserved Memory 与 CMA

在 RK3588 Buildroot 系统中,我们经常会遇到一个问题:板卡明明标称 16 GB RAM,为什么执行 free -h 后却只显示 15 GiB?这些“少掉”的内存去了哪里?本文以一块实际的 16 GB RK3588 板卡为例,通过 /proc/me… · 2026/9/24 17:30:47

无人机已经拿到UWB坐标,为什么还不能直接自主飞行?
无人机已经拿到UWB坐标,为什么还不能直接自主飞行?

无人机已经拿到UWB坐标,为什么还不能直接自主飞行?有客户问了一个很具体的问题:他想用无人机跟随一辆遥控车,UWB模块已经装好了,标签装在地面车上,基站装在无人机上,坐标数据和距离数据都已经读… · 2026/9/24 17:30:47

Windows API 程序
Windows API 程序

一、实现目标 本次练习使用 C 和 Windows API 编写一个简单的桌面窗口程序,了解 Windows 图形界面程序的基本结构,以及窗口创建、消息处理、文字绘制和音频播放的实现方法。 程序主要实现以下功能: 创建标题为“我的第一个Win窗口”的窗口… · 2026/9/24 18:44:16

最完整的Jackett Docker Compose编排指南:从部署到进阶优化
最完整的Jackett Docker Compose编排指南:从部署到进阶优化

最完整的Jackett Docker Compose编排指南:从部署到进阶优化 你是否还在为多个BT tracker(种子追踪器)的API配置而烦恼?是否希望通过一个统一的接口管理所有下载源?Jackett作为一款强大的代理服务器,能够将… · 2026/9/24 18:44:10

MATLAB高斯过程回归:置信区间计算与可视化详解
MATLAB高斯过程回归:置信区间计算与可视化详解

我最初接触MATLAB里的高斯过程回归时,网上能找到的资料大多是零碎的demo,真正能讲清楚“为什么这么写”“置信区间那条带子到底怎么来的”的并不多。结果就是很多人用fitrgp跑通了一版预测曲线,可一旦要解释模型在各区域的可靠程度、要判断拟… · 2026/9/24 18:44:03

Dockerfile镜像分层机制与高效构建实战
Dockerfile镜像分层机制与高效构建实战

1. 从一份构建脚本说起:Dockerfile到底在解决什么问题 第一次接触容器化的时候,不少人会问我一个问题:“我明明已经写好了一个代码仓库,为什么还要再折腾一个Dockerfile?”这个问题的答案,得从“环境一致性… · 2026/9/24 18:44:03

个人微信API二次开发:如何实现微信消息自动收发?
个人微信API二次开发:如何实现微信消息自动收发?

业务系统要给客户发通知、也要听客户回什么,一查开放平台就明白:个人微信会话没有给你用的官方收发 API。个人微信API二次开发走的是另一条路——账号扫码登录成执行节点,发信用 HTTP,收走 Webhook,两边都进你自己的服… · 2026/9/24 18:44:03

Windows下用MSYS2+MinGW64编译FFmpeg并集成x264/x265完整指南
Windows下用MSYS2+MinGW64编译FFmpeg并集成x264/x265完整指南

1. 为什么需要自己编译 FFmpeg:三个绕不开的理由很多人在 Windows 下用到 FFmpeg,第一反应是去官网下载编译好的 exe 包,解压丢进 PATH 就完事了。这个路子应付日常转码确实够用,但一旦你开始做这几件事,现成包就顶不住… · 2026/9/24 18:44:03

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码