
1. 为什么要在 NAS 上折腾 Octopus 这件事手里同时用着三四个大模型的人大概率都经历过这种场景写代码的时候想调 DeepSeek写文案的时候想切到智谱做翻译的时候又想试试另一个模型结果浏览器里开了五六个标签页每个平台一套 API Key每次切换都要重新复制粘贴时间全耗在找入口上了。更麻烦的是有些模型是通过 API 调用的有些是本地部署的管理起来完全是两套逻辑用久了连自己哪个 Key 对应哪个平台都记不清。Octopus 这个项目解决的正是这个痛点——它把各种大模型的 API 接口统一收拢到一个管理面板里你只需要在 Octopus 里配置好各个渠道的 Key之后所有调用都走 Octopus 这一个入口。而把它部署在 NAS 上好处就更明显了NAS 通常 7×24 小时开机功耗低放在家里或者办公室角落里默默跑着你在任何设备上都能通过局域网访问这个统一入口不用依赖某台电脑一直开着。这篇文章适合三类人看一是手里有 NAS、想把它利用起来跑点实用服务的玩家二是同时使用多个大模型 API、被切换和管理问题困扰的重度用户三是对容器化部署有一定了解、想找一个稳定可靠的 API 聚合方案的技术爱好者。我会从为什么选 NAS 部署讲起把 Docker 部署的完整流程、渠道配置的核心逻辑、实际使用中的坑和技巧都拆开说清楚尽量让没有太多运维经验的人也能跟着做下来。需要先说明一点Octopus 本身是一个开源的 LLM API 管理与分发系统它的核心能力是渠道管理和令牌分发。所谓渠道就是你接入的各个大模型服务商所谓令牌就是 Octopus 自己生成的、给你的各种客户端使用的访问凭证。理解了这两个概念后面的配置就顺了。2. 部署前的环境盘点和方案取舍2.1 NAS 选型与 Docker 环境确认不是所有 NAS 都能顺畅跑 Octopus这里有几个硬性条件需要先确认。首先是 Docker 支持群晖、威联通、绿联、飞牛这些主流 NAS 系统现在基本都支持 Docker 或者容器管理器但部分入门级型号的 CPU 架构是 ARM 的拉镜像的时候要注意选对架构版本。x86 架构的 NAS比如常见的 J4105、N3865U 这类兼容性最好社区里大部分教程也都是基于 x86 写的。其次是内存Octopus 本身是个 Go 语言写的轻量服务运行起来占用并不大512MB 到 1GB 内存就够跑。但如果你打算在同一个 NAS 上再跑本地大模型推理那内存和显存就是另一回事了本文主要讲的是 API 聚合管理不涉及本地推理部署所以对硬件的要求其实很低。存储方面Octopus 需要一个持久化目录来存放数据库文件默认是 SQLite这个目录建议挂载到 NAS 的存储卷上而不是放在容器内部。原因很简单容器重建的时候内部数据会丢挂载到外部卷上才能保证配置和令牌不丢失。我一般会在 NAS 上建一个专门的目录比如/volume1/docker/octopus/data把数据库文件放这里。提示部署前先在 NAS 的套件中心或者应用商店里确认 Docker 服务已经安装并启动。群晖用户注意Container Manager 就是新版 Docker 套件操作逻辑和旧版 Docker 套件略有不同但核心概念一致。2.2 为什么用 Docker 而不是直接装有人可能会问Octopus 有没有直接安装的版本为什么非要走 Docker。这里说下我的判断Docker 部署的最大好处是环境隔离和迁移方便。NAS 系统本身往往比较封闭直接在上面装二进制程序容易遇到依赖库版本冲突的问题而 Docker 把运行环境打包好了你不需要关心 NAS 上装了什么版本的库。另外如果哪天你想把 Octopus 从这台 NAS 迁到另一台设备上只需要把数据目录拷过去重新跑一个容器就行配置完全不用重来。还有一个实际考虑是版本管理。Octopus 更新比较频繁用 Docker 的话拉新镜像、重建容器就是升级的全部操作回滚也简单指定旧版本标签重新拉就行。直接装的话升级过程可能涉及替换文件、改配置麻烦得多。2.3 网络与端口规划Octopus 默认监听 3000 端口这个端口在 NAS 上大概率不会被占用但保险起见还是先确认一下。如果你打算让局域网外的设备也能访问那就需要考虑端口映射或者反向代理的问题。不过这里要提醒一句不要把 Octopus 的管理面板直接暴露在公网上因为它里面存着你所有渠道的 API Key一旦泄露后果很严重。如果确实需要外网访问建议通过 NAS 自带的内网穿透方案或者自己搭一套带认证的反向代理。局域网内使用的话直接用NAS的IP:3000访问就行不需要额外配置。我自己的用法是只在局域网内访问出门在外如果需要用就先连回家里网络再说安全第一。3. Docker 部署 Octopus 的完整操作链路3.1 镜像拉取与目录准备第一步是在 NAS 上建好数据目录。以群晖为例打开 File Station在 docker 共享文件夹下新建一个 octopus 文件夹再在里面建一个 data 子文件夹。最终路径类似/volume1/docker/octopus/data。这个路径后面挂载的时候要用到记下来。然后是拉镜像。打开 Container Manager或者 Docker 套件在注册表里搜索octopus找到对应的镜像。这里要注意搜索结果里可能有多个同名或者相似的项目认准官方仓库的那个。如果 NAS 的图形界面拉取速度慢或者失败可以改用 SSH 命令行拉取docker pull bestrui/octopus:latest镜像拉下来之后就可以创建容器了。图形界面操作的话点映像找到刚拉下来的镜像点运行进入配置向导。3.2 容器参数配置的关键细节配置容器的时候有几个地方容易出错我逐个说。端口映射本地端口填 3000容器端口也填 3000。如果你 NAS 上 3000 已经被别的服务占了本地端口可以改成别的比如 3001但容器端口不要动。存储卷映射把刚才建的/volume1/docker/octopus/data挂载到容器内的/app/data。这个路径是 Octopus 默认存放数据库的位置挂载对了数据才能持久化。环境变量Octopus 支持通过环境变量配置一些参数比如数据库类型、监听地址等。最常用的一个是TZ设置时区填Asia/Shanghai这样日志时间才是对的。其他环境变量如果不需要改默认值可以不填。重启策略建议设置成除非手动停止否则始终重启这样 NAS 重启或者 Docker 服务重启之后Octopus 会自动跑起来不用你手动去点。配置完启动容器等几秒钟然后在浏览器里访问http://NAS的IP:3000如果能看到登录界面说明部署成功了。3.3 首次登录与初始化设置Octopus 首次启动会有一个默认的管理员账号具体用户名和密码在项目的说明文档里有写通常是root配一个默认密码。登录之后第一件事就是改密码这个不用多解释。登录进去之后界面左侧是功能菜单主要用到的是渠道和令牌两块。渠道是你接入的上游大模型服务令牌是你发给下游客户端用的凭证。整个使用流程就是先配渠道再建令牌然后客户端拿着令牌来调 OctopusOctopus 根据令牌的权限把请求转发到对应的渠道。初始化的时候还有一件事值得做在设置里检查一下系统的基础配置比如是否开启了请求日志、日志保留多久、有没有配置限流策略。这些默认值一般够用但如果你打算多人共用限流策略最好调一下避免某个人把额度跑满影响其他人。4. 渠道配置把各家大模型接进来的实操逻辑4.1 渠道类型的选择与 Key 的填写Octopus 支持多种渠道类型常见的有 OpenAI 兼容接口、智谱、DeepSeek、通义千问等等。配置渠道的时候核心要填的就三样渠道类型、Base URL、API Key。渠道类型决定了 Octopus 用哪种协议去跟上游通信。现在大部分国内大模型服务商都提供了 OpenAI 兼容接口所以如果你用的服务商在列表里找不到专属类型选OpenAI 兼容通常也能通。Base URL 就是服务商提供的 API 地址注意有些服务商的地址末尾带不带/v1是有区别的填错了会报 404。API Key 就是从服务商后台申请的那串字符复制的时候注意别带多余空格。这里有个经验每配一个渠道配完立刻点测试。Octopus 提供了渠道测试功能会发一个简单的请求验证配置是否正确。测试通过再继续配下一个不要一口气全配完再测不然出了问题不好定位是哪个渠道的毛病。4.2 模型列表与映射关系渠道配好之后还需要告诉 Octopus 这个渠道支持哪些模型。有些渠道类型会自动拉取模型列表有些需要手动填。手动填的时候模型名称要跟服务商文档里写的完全一致大小写都不能错。这里涉及一个很重要的概念叫模型映射。举个例子你有两个渠道都提供 DeepSeek 模型但一个渠道的模型名叫deepseek-chat另一个叫deepseek-v3。你希望客户端统一用deepseek这个名字来调用那就可以在 Octopus 里配置映射把客户端的deepseek请求映射到具体渠道的具体模型名上。这个功能在多渠道冗余的场景下特别有用——当一个渠道挂了Octopus 可以自动切换到另一个渠道而客户端完全无感知。模型映射的配置逻辑是在渠道的模型列表里左边填客户端看到的模型名右边填实际上游的模型名。如果两边一样就填相同的名字。我一般会把常用的几个模型都配上映射统一成一套好记的名字这样换客户端的时候不用重新记模型名。4.3 多渠道负载与优先级设置当你给同一个模型配了多个渠道时Octopus 支持设置渠道的优先级和权重。优先级高的渠道会被优先使用权重则决定了同一优先级下各个渠道被选中的概率。这个机制的实际价值在于容错。比如你同时接了智谱和 DeepSeek 两个渠道来提供某个模型可以把智谱设成高优先级DeepSeek 设成低优先级。平时请求都走智谱一旦智谱的接口出问题超时、报错、额度用完Octopus 会自动降级到 DeepSeek保证服务不中断。配置的时候要注意不是所有渠道类型都支持自动降级具体要看 Octopus 的版本和渠道实现。另外降级是有条件的如果错误是API Key 无效这种配置性问题降级到另一个渠道也没用因为问题不在渠道可用性上。所以配好之后最好模拟一下故障场景确认降级逻辑真的生效。5. 令牌管理与客户端接入的细节5.1 令牌的权限设计思路令牌是 Octopus 发给客户端的凭证客户端拿着令牌来调 OctopusOctopus 验证令牌有效后再把请求转发到对应的渠道。令牌可以设置额度限制、过期时间、可用模型范围。额度限制这个功能很实用。如果你把 Octopus 分享给朋友或者团队成员用可以给每个人建一个令牌设置每月额度上限这样就不会出现某个人把额度用超的情况。额度单位通常是按 token 数或者按次数算具体看 Octopus 的计费逻辑。可用模型范围是指这个令牌能调用哪些模型。比如你只想让某个客户端用 DeepSeek不想让它碰其他模型那就在令牌里只勾选 DeepSeek 相关的模型。这个功能在多租户场景下很有用能避免权限混乱。注意令牌创建之后完整内容只会显示一次一定要当场复制保存。如果忘了复制只能删掉重建没有别的办法找回。5.2 客户端配置的通用方法客户端接入 Octopus 的方式本质上就是把原本填服务商地址和 Key 的地方改成填 Octopus 的地址和令牌。以常见的 OpenAI 兼容客户端为例配置项一般是这样API Base URLhttp://NAS的IP:3000/v1API Key你在 Octopus 里创建的令牌Model你在 Octopus 里配置的模型名如果配了映射就填映射后的名字不同客户端的配置项名称可能略有差异但核心就这三个。有些客户端要求 Base URL 必须带/v1有些不带也能识别具体看客户端的实现。如果连不上先检查 URL 格式再检查令牌有没有复制错。5.3 多设备共用的实际体验把 Octopus 部署在 NAS 上之后最直观的变化是家里所有设备——台式机、笔记本、平板、手机——都可以用同一套配置接入大模型。我在台式机的代码编辑器里配了 Octopus 的地址在笔记本的聊天客户端里也配了同一个地址两边用的是不同的令牌方便分别统计用量但底层走的是同一套渠道配置。这样我只需要在 Octopus 里维护一份渠道信息所有设备自动同步不用每台设备都去配一遍 API Key。还有一个好处是用量统计。Octopus 会记录每个令牌的调用情况包括调用了哪些模型、消耗了多少 token、什么时候调的。这个数据对于控制成本很有帮助尤其是当你同时用着好几个付费 API 的时候能清楚看到钱花在哪里了。6. 实际运行中踩过的坑和应对经验6.1 容器重启后配置丢失的问题这个问题我遇到过两次原因都是存储卷没挂对。第一次是挂载路径写错了容器内的数据实际写到了容器内部重启之后自然就没了。第二次是挂载了目录但权限不对Octopus 没有写入权限数据库文件创建失败表现是容器能启动但登录不进去。排查方法很简单进容器内部看一下/app/data目录下有没有数据库文件。如果没有就是挂载或者权限的问题。权限问题在群晖上比较常见因为群晖的目录权限管理比较严格需要确保 Docker 容器有读写权限。解决办法是在 File Station 里把 octopus 目录的权限改成所有人可读写或者通过 SSH 用chmod命令改权限。6.2 渠道测试通过但实际调用报错这种情况通常是因为测试请求和实际请求用的模型不一样。Octopus 的渠道测试一般只发一个最简单的请求可能用的是默认模型而你实际调用的是另一个模型。如果那个模型在渠道里没配好或者上游服务商那边没开通就会报错。还有一种可能是请求参数不兼容。不同服务商对 OpenAI 接口的实现有细微差异比如某些参数上游不支持或者返回格式略有不同。遇到这种情况先看 Octopus 的日志日志里会记录完整的请求和响应能快速定位问题。6.3 并发请求下的稳定性观察NAS 的性能有限如果你的 Octopus 要服务多个客户端并发请求量大的时候可能会遇到响应变慢的情况。我实测下来J4105 这个级别的 NAS 跑 Octopus同时处理五六个请求没什么压力但如果是十几个并发响应时间会明显上升。如果确实有高并发需求可以考虑两个方向一是把 Octopus 迁到性能更强的设备上比如一台低功耗的小主机二是在 Octopus 前面加一层缓存对重复的请求直接返回缓存结果减少对上游的调用。不过对于个人或者小团队使用NAS 的性能通常够用不用太担心。6.4 日志查看与问题定位Octopus 的日志在容器里就能看图形界面的话在 Container Manager 里点容器选日志标签页。日志里会记录每个请求的渠道、模型、耗时、状态码排查问题的时候非常有用。我一般会关注两类日志一是状态码非 200 的请求说明有问题二是耗时特别长的请求可能是上游响应慢或者网络问题。如果日志里频繁出现某个渠道的错误那就要考虑把这个渠道降级或者暂时禁用避免影响整体可用性。7. 关于这套方案的一些个人体会用 NAS 跑 Octopus 这套方案我前后用了大半年中间经历过几次升级和配置调整整体感受是它把管理多个大模型 API这件事从体力活变成了配置活。以前每换一个客户端就要重新配一遍 Key现在只需要在 Octopus 里维护一份配置所有客户端自动受益。尤其是模型映射和渠道降级这两个功能在实际使用中帮我省了不少事。如果你也打算搭一套我的建议是先把最常用的两三个渠道配好跑通整个流程再逐步增加渠道和令牌。不要一上来就追求大而全配置越多出问题的概率越大先把核心链路跑稳再说。另外定期备份 Octopus 的数据目录这个习惯能帮你在出问题的时候快速恢复不用从头再来。最后提一句Octopus 的版本更新比较快升级之前最好看一下更新日志确认没有破坏性变更再动手。升级的时候先备份数据目录然后拉新镜像、重建容器整个过程几分钟就能搞定。