尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
家庭服务器首选:Mac mini 跑 OpenClaw + 私有云 + 导航页,把 endpoint 改到 TaoToken
1. Mac mini 家庭服务器跑 OpenClaw 时模型通道怎么统一把 Mac mini 放在电视柜旁边当家庭服务器这件事我折腾了挺久。它功耗低、噪音小、macOS 又是 Unix 底子跑 Docker 容器几乎不用额外适配。但真正让我卡住的不是 OpenClaw 本身能不能起来而是它默认那套模型调用通道——要么指向本地 llama 权重要么指向某个需要额外网络条件的地址在家里这种多设备、多服务共存的网络里维护成本很高。OpenClaw 是一个开源的 AI 对话服务你可以把它理解成「自己家里的一台 ChatGPT 前端 后端」它对外暴露 HTTP 接口内部负责会话管理、上下文拼接、模型路由。适合谁适合想把 AI 对话能力私有化、又不想每台设备都装客户端的人。Mac mini 上跑它手机、平板、笔记本都能通过局域网访问同一个入口。问题出在模型这一层。OpenClaw 的配置文件里有一个AI_MODEL_PATH和AI_MODEL_TYPE默认走本地推理。本地推理在 Mac mini 上不是不能跑但 M 系列芯片跑 7B 以上的模型内存和散热压力都不小而且每次换模型都要重新拉权重。更现实的做法是把 OpenClaw 的模型 endpoint 指向一个统一的 API 网关让模型调用这件事从「本地资源问题」变成「网络配置问题」。这就是把 endpoint 改到 TaoToken 的动机。TaoToken 提供统一的模型调用入口OpenClaw 只需要把 base URL 和 Key 填对剩下的模型切换、额度管理都在网关侧完成。Mac mini 本身只负责跑服务、存数据、做反向代理不承担推理负载。这样一来家庭服务器上同时跑 OpenClaw、Nextcloud 私有云、Homarr 导航页资源占用就变得可控。我试过在 Mac mini 上直接跑本地模型风扇转起来之后客厅能听到明显噪音后来改成网关调用整机负载降了一大截。下面这套配置就是围绕「endpoint 统一到 TaoToken」这个核心来展开的OpenClaw 的容器编排、私有云、导航页都会给到可复制的片段。2. TaoToken 前置准备与 Mac mini 环境搭建在动 OpenClaw 的配置之前先把 Mac mini 的基础环境和 TaoToken 的接入信息准备好。这一步不做扎实后面容器起来了也会在模型调用上反复报错。2.1 Mac mini 系统与 Docker 准备Mac mini 建议用 macOS 13 以上Docker Desktop 对 Apple Silicon 的支持已经比较稳定。先装 Homebrew再装 Docker# 安装 Homebrew /bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh) # 把 Homebrew 加进 PATH echo eval $(/opt/homebrew/bin/brew shellenv) ~/.zprofile eval $(/opt/homebrew/bin/brew shellenv) # 安装 Docker Desktop brew install --cask docker # 启动 Docker open /Applications/Docker.app # 验证 docker --version docker compose versionDocker Desktop 第一次启动会要权限按提示给就行。验证通过后创建一个统一的工作目录后面所有服务都放在这个目录下方便备份和迁移mkdir -p ~/home-server/{openclaw,nextcloud,homarr,portainer,nginx} mkdir -p ~/home-server/data/{openclaw,nextcloud,homarr,portainer,nginx} cd ~/home-server # 创建共享网络所有容器都接进来 docker network create home-server-net这个home-server-net很关键。OpenClaw、Nextcloud、Homarr 之间要通过容器名互相访问比如 Nginx 反代到http://openclaw:8080就必须在同一个自定义网络里。默认的 bridge 网络不支持容器名 DNS 解析所以这一步不能省。2.2 TaoToken 接入信息获取TaoToken 的接入需要三样东西Base URL、API Key、Model ID。Base URL 用https://taotoken.net/api这是 API 调用的根地址注意不要带 UTM 参数那是给网页访问用的。API Key 在控制台里创建创建后只显示一次记得先复制到安全的地方。控制台地址在这里https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentconsoleAPI Key 管理页面https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi-keysModel ID 取决于你想用哪个模型在模型列表里能看到。OpenClaw 的配置里会有一个AI_MODEL字段填的就是这个 ID。如果你不确定选哪个可以先在模型对话页面试一下https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentchat拿到这三样之后先别急着写进 OpenClaw用 curl 验证一下通道是否通curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer 你的API_KEY \ -H Content-Type: application/json \ -d { model: 你的Model_ID, messages: [{role: user, content: ping}] }如果返回里有choices字段说明通道没问题。如果返回 401检查 Key 有没有复制完整如果返回local proxy failed那是本机网络层的问题不是 TaoToken 侧的问题后面排障章节会细说。2.3 OpenClaw 的 endpoint 配置思路OpenClaw 的模型配置集中在.env文件里。原版模板里是AI_MODEL_PATH和AI_MODEL_TYPE我们要做的是把这两项替换成网关调用所需的AI_BASE_URL、AI_API_KEY、AI_MODEL。不同版本的 OpenClaw 字段名可能略有差异但核心逻辑一致告诉它「不要找本地权重去这个 URL 拿结果」。这里有个容易踩的坑OpenClaw 的容器里读的是/app/.env而我们在宿主机上编辑的是~/home-server/openclaw/.env通过 volume 挂载进去。挂载路径写错的话容器里读到的还是默认配置endpoint 根本没改。所以下面 docker-compose 里的 volume 映射要仔细核对。3. 可复制的 OpenClaw TaoToken 配置片段这一节给的是可以直接复制粘贴的配置。路径和原文保持一致你按自己的目录结构调整。3.1 OpenClaw 的 docker-compose.ymlversion: 3 services: openclaw: image: openclaw/openclaw:latest container_name: openclaw restart: always ports: - 8080:8080 volumes: - ~/home-server/data/openclaw:/data - ~/home-server/openclaw/.env:/app/.env environment: - DB_HOSTpostgres - REDIS_HOSTredis depends_on: - postgres - redis networks: - home-server-net postgres: image: postgres:14 container_name: openclaw-postgres restart: always volumes: - ~/home-server/data/openclaw/postgres:/var/lib/postgresql/data environment: - POSTGRES_DBopenclaw - POSTGRES_USERopenclaw - POSTGRES_PASSWORDopenclaw123 networks: - home-server-net redis: image: redis:7-alpine container_name: openclaw-redis restart: always volumes: - ~/home-server/data/openclaw/redis:/data networks: - home-server-net networks: home-server-net: external: true注意networks用的是external: true因为网络已经在 2.1 里手动创建过了。如果你让 compose 自己创建容器名解析可能对不上。3.2 .env 里的 endpoint 改写这是整篇文章最核心的一段。把原来的本地模型配置替换成 TaoToken 网关配置# OpenClaw 基础配置 OPENCLAW_PORT8080 OPENCLAW_HOST0.0.0.0 # 数据库配置 DB_HOSTpostgres DB_PORT5432 DB_NAMEopenclaw DB_USERopenclaw DB_PASSWORDopenclaw123 # Redis 配置 REDIS_HOSTredis REDIS_PORT6379 REDIS_PASSWORD # 数据存储 DATA_PATH/data # 模型调用通道指向 TaoToken AI_BASE_URLhttps://taotoken.net/api AI_API_KEYsk-你的TaoToken密钥 AI_MODEL你的Model_ID AI_API_TYPEopenai # 日志 LOG_LEVELinfo LOG_PATH/var/log/openclaw三个字段的含义AI_BASE_URL是网关根地址OpenClaw 会在后面拼/v1/chat/completionsAI_API_KEY是鉴权头AI_MODEL是模型 ID。AI_API_TYPEopenai表示用 OpenAI 兼容协议TaoToken 的接口是兼容的所以这个值不用改。如果你用的是 Claude Code 或者 Codex 这类工具配置逻辑类似但字段名不同。Claude Code 的配置在~/.claude/settings.jsonCodex 在~/.codex/auth.json核心都是 Base URL Key Model ID 三件套。OpenClaw 这里用的是.env别搞混。3.3 启动与配置校验cd ~/home-server/openclaw docker compose up -d docker compose ps docker compose logs -f openclaw日志里如果出现AI provider initialized: https://taotoken.net/api说明 endpoint 已经读进去了。如果还是显示local model path那就是.env没挂载成功回去检查 volume 路径。4. 验证请求与私有云、导航页的访问效果配置写完不算完得实际发一个请求确认模型通道真的通了。4.1 通过 OpenClaw 接口验证OpenClaw 起来之后它自己的 API 会暴露在 8080 端口。先看健康检查curl -s http://localhost:8080/api/health返回{status:ok}就说明服务本身没问题。然后发一条对话请求走 OpenClaw 内部逻辑最终打到 TaoTokencurl -X POST http://localhost:8080/api/chat \ -H Content-Type: application/json \ -d { message: 用一句话说明家庭服务器的作用, session_id: test-001 }如果返回内容里包含模型生成的文本说明 OpenClaw → TaoToken → 模型 这条链路是通的。这一步能过后面私有云和导航页就只是常规的容器编排问题了。4.2 Nextcloud 私有云部署Nextcloud 的 compose 文件version: 3 services: nextcloud: image: nextcloud:latest container_name: nextcloud restart: always ports: - 8081:80 volumes: - ~/home-server/data/nextcloud:/var/www/html environment: - MYSQL_HOSTnextcloud-db - MYSQL_DATABASEnextcloud - MYSQL_USERnextcloud - MYSQL_PASSWORDnextcloud123 depends_on: - nextcloud-db networks: - home-server-net nextcloud-db: image: mariadb:latest container_name: nextcloud-db restart: always volumes: - ~/home-server/data/nextcloud/db:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORDroot123 - MYSQL_DATABASEnextcloud - MYSQL_USERnextcloud - MYSQL_PASSWORDnextcloud123 networks: - home-server-net networks: home-server-net: external: true启动后访问http://localhost:8081创建管理员账户数据库填nextcloud-db用户nextcloud密码nextcloud123。装完之后局域网内其他设备用http://Mac mini的IP:8081就能访问私有云。4.3 Homarr 导航页部署version: 3 services: homarr: image: ghcr.io/homarr-labs/homarr:latest container_name: homarr restart: always ports: - 8082:7575 volumes: - ~/home-server/data/homarr/configs:/app/data/configs - ~/home-server/data/homarr/icons:/app/public/icons environment: - TZAsia/Shanghai networks: - home-server-net networks: home-server-net: external: true访问http://localhost:8082创建管理员后把 OpenClawhttp://Mac的IP:8080、Nextcloudhttp://Mac的IP:8081加进去。这样家里任何设备打开导航页就能一键跳到各个服务。4.4 Nginx 反向代理统一入口如果不想记端口可以用 Nginx 做域名反代。核心配置片段server { listen 80; server_name openclaw.local; location / { proxy_pass http://openclaw:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } server { listen 80; server_name nextcloud.local; location / { proxy_pass http://nextcloud:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }然后在路由器或 Mac mini 的/etc/hosts里加解析sudo vim /etc/hosts # 添加 192.168.1.100 openclaw.local 192.168.1.100 nextcloud.local 192.168.1.100 homarr.local把192.168.1.100换成你 Mac mini 的实际局域网 IP。这样在浏览器里输入openclaw.local就能直接访问不用记端口。5. 本篇常见报错排查配置过程中最容易卡在几个固定位置这里按真实报错来对照。5.1 401 Unauthorized{error:{message:Invalid API key,type:invalid_request_error}}这个报错说明 TaoToken 侧没认出来你的 Key。检查三件事Key 有没有复制完整前后不能有空格、.env里AI_API_KEY有没有写错字段名、容器有没有重新加载配置。改完.env后必须docker compose down docker compose up -d光restart不会重新读挂载文件。5.2 local proxy failedError: local proxy failed: dial tcp 127.0.0.1:7890: connect: connection refused这个报错不是 TaoToken 的问题是容器里残留了本机代理配置。OpenClaw 镜像里如果带了HTTP_PROXY环境变量或者宿主机 Docker 配置了代理容器会尝试走一个不存在的本地端口。解决办法是在 compose 里显式清掉environment: - HTTP_PROXY - HTTPS_PROXY - NO_PROXYtaotoken.net,localhost,127.0.0.1注意NO_PROXY里要把taotoken.net加进去确保 API 请求不走代理。5.3 reading choices 字段为空KeyError: choices这个报错通常出现在 OpenClaw 解析响应的时候。原因可能是AI_BASE_URL写成了https://taotoken.net/api/v1而 OpenClaw 自己又拼了一次/v1/chat/completions变成/api/v1/v1/chat/completions路径错了。正确写法是AI_BASE_URLhttps://taotoken.net/api不要带/v1。5.4 OAuth 相关报错如果你用的是 Claude Code 或 Codex 这类带 OAuth 的工具可能会看到OAuth token expired, please re-authenticate这类工具不走 API Key走的是 OAuth 流程。如果你要把它们也接到 TaoToken需要看对应工具的文档配置方式不一样。OpenClaw 用的是 API Key 模式不涉及 OAuth所以本篇不展开。Claude Code 的接入文档在这里https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc5.5 容器名解析失败nginx: host not found in upstream openclaw这是网络没接对。检查所有 compose 文件里的networks是不是都写了home-server-net并且external: true。如果某个服务漏了它就不在同一个 DNS 域里Nginx 找不到openclaw这个主机名。5.6 端口冲突Error starting userland proxy: listen tcp 0.0.0.0:8080: bind: address already in useMac mini 上如果之前跑过别的服务占了 8080换一个端口就行。改 compose 里的ports映射比如18080:8080然后访问http://localhost:18080。注意容器内部端口不用改只改宿主机映射。6. 长期运行与 Coding Plan 的衔接家庭服务器跑起来之后真正考验的是长期稳定性。Mac mini 的散热比笔记本好但连续跑容器几个月还是要注意几件事。第一是磁盘。Nextcloud 存照片、OpenClaw 存会话记录数据目录会慢慢涨。建议每周看一眼df -h超过 80% 就清理一下 Docker 的悬空镜像docker system prune -f第二是日志。OpenClaw 的日志默认写到容器里时间长了会占空间。可以在 compose 里加日志轮转logging: driver: json-file options: max-size: 10m max-file: 3第三是模型通道的额度。如果你把 OpenClaw 开放给家里人用调用量会上去。TaoToken 的控制台里能看到用量建议设一个提醒。如果后面要跑更重的编码任务或者 Agent 流程可以看一下 Coding Plan它针对长期编码场景做了额度优化https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding-plan我自己是把 OpenClaw 当家庭 AI 入口日常问答走它写代码的时候单独用 Claude Code 接同一个网关。两边的 Key 可以分开管理互不影响。Mac mini 这边只要保证 Docker 和网络稳定剩下的就是偶尔docker compose pull更新一下镜像。最后给一个实用技巧把~/home-server整个目录用 Time Machine 或者 rsync 定期备份到外接硬盘。配置文件和数据库都在里面哪天 Mac mini 系统出问题恢复起来就是复制目录 docker compose up -d的事。导航页里可以加一个「服务状态」卡片指向 Portainer 的http://Mac的IP:9000一眼看到所有容器是不是绿的。
RELATED

相关推荐

FastAPI + litellm 统一代理大模型 API:优雅实现成本监控与 Fallback 策略|TaoToken 统一 Key 通道实践

FastAPI + litellm 统一代理大模型 API:优雅实现成本监控与 Fallback 策略|TaoToken 统一 Key 通道实践

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

📅 2026/10/8 22:10:50
3分钟看懂MCP协议:TaoToken如何让AI的“万能插头”真正通电

3分钟看懂MCP协议:TaoToken如何让AI的“万能插头”真正通电

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

📅 2026/10/8 22:05:48
AtomCode Token 消耗与成本控制实测:CodingPlan 免费额度够不够用,TaoToken 统一 Key 通道怎么配

AtomCode Token 消耗与成本控制实测:CodingPlan 免费额度够不够用,TaoToken 统一 Key 通道怎么配

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

📅 2026/10/8 22:05:48
MORE NEWS

更多资讯

📰

Claude Code 里的 MCP / Skills / Hooks / Commands:把 settings 改到 TaoToken 的完整配置清单

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

📰

502个中文AI工具清单:分类逻辑、筛选决策树与工程化维护实践

1. 从"502"这个数字说起:一个中文AI工具清单为什么值得单独做第一次看到"502个中文用户可用的AI工具"这个说法,我的反应是:这个数字大概率不是拍脑袋来的。做过工具导航站或者资源清单的人都知道,凑到几十个容…

📰

后端转AI必会:如何用数据证明大模型系统有效?评估体系全解

1. 这是面试,不是在考八股文后端转 AI,这两年我见过太多简历:项目里写着“基于大模型开发了知识库问答系统”“用 LangChain 搭了 Agent 工作流”“微调了 Llama 模型提升准确率”。问细节还能聊几句,但面试官只要追问一句——“你…

📰

模块化用法

一、模块化的基本概念模块化就是把一整份代码按职责拆成若干独立文件,每个文件只负责一件事,对外通过固定接口暴露能力,其它文件按需把能力取过来用。它要解决的是三个很具体的问题:避免重复:同一段逻辑如果写两遍&…

📰

DeepBot Web服务端部署教程:Docker构建、JWT认证与WebSocket架构实战

DeepBot Web服务端部署教程:Docker构建、JWT认证与WebSocket架构实战 【免费下载链接】deepbot DeepBot is a system-level AI assistant built for both personal productivity and enterprise workflows — one-click setup, seamless experience, and native Fei…

📰

前端面试题:让 AI 生成组件,怎么保证不重复造轮子?

一、核心回答 核心就是让 AI 生成前先查,能复用就别新建;如果确实要新建,生成后把它纳入组件库,再人工确认一次。 这句话就够作为第一层答案。二、为什么“让 AI 先查组件”还不够? 因为真正的问题不是: 有…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬