☰
家庭服务器首选:Mac mini 跑 OpenClaw + 私有云 + 导航页,把 endpoint 改到 TaoToken
2026/10/8 22:10:37 网站建设 项目流程

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 version

Docker 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_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=console

API Key 管理页面:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=api-keys

Model ID 取决于你想用哪个模型,在模型列表里能看到。OpenClaw 的配置里会有一个AI_MODEL字段,填的就是这个 ID。如果你不确定选哪个,可以先在模型对话页面试一下:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=chat

拿到这三样之后,先别急着写进 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.yml

version: '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_HOST=postgres - REDIS_HOST=redis 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_DB=openclaw - POSTGRES_USER=openclaw - POSTGRES_PASSWORD=openclaw123 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_PORT=8080 OPENCLAW_HOST=0.0.0.0 # 数据库配置 DB_HOST=postgres DB_PORT=5432 DB_NAME=openclaw DB_USER=openclaw DB_PASSWORD=openclaw123 # Redis 配置 REDIS_HOST=redis REDIS_PORT=6379 REDIS_PASSWORD= # 数据存储 DATA_PATH=/data # ===== 模型调用通道:指向 TaoToken ===== AI_BASE_URL=https://taotoken.net/api AI_API_KEY=sk-你的TaoToken密钥 AI_MODEL=你的Model_ID AI_API_TYPE=openai # 日志 LOG_LEVEL=info LOG_PATH=/var/log/openclaw

三个字段的含义:AI_BASE_URL是网关根地址,OpenClaw 会在后面拼/v1/chat/completions;AI_API_KEY是鉴权头;AI_MODEL是模型 ID。AI_API_TYPE=openai表示用 OpenAI 兼容协议,TaoToken 的接口是兼容的,所以这个值不用改。

如果你用的是 Claude Code 或者 Codex 这类工具,配置逻辑类似,但字段名不同。Claude Code 的配置在~/.claude/settings.json,Codex 在~/.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 内部逻辑,最终打到 TaoToken:

curl -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_HOST=nextcloud-db - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_PASSWORD=nextcloud123 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_PASSWORD=root123 - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_PASSWORD=nextcloud123 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: - TZ=Asia/Shanghai networks: - home-server-net networks: home-server-net: external: true

访问http://localhost:8082,创建管理员后,把 OpenClaw(http://Mac的IP:8080)、Nextcloud(http://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 failed

Error: 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_PROXY=taotoken.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_URL=https://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_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=doc

5.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 use

Mac 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_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=coding-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,一眼看到所有容器是不是绿的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询