1. 为什么要在 ZimaBoard 上跑 OpenClaw 本地 AI 服务器ZimaBoard 这块单板机我用了大半年最大的感受就是它把「低功耗」和「x86 兼容性」这两件本来矛盾的事捏到了一起。待机 5 到 10W满载也就 15W 上下插着电跑一整年电费也就几十块风扇声音几乎听不见放在客厅电视柜里完全无感。而 OpenClaw 这类需要长期挂着的 AI 服务恰好最吃「稳定在线」和「随时能调 API」这两点两者凑一块儿非常合适。先说清楚 OpenClaw 是什么、能做什么、适合谁。OpenClaw 是一个可以自托管的 AI 服务框架你可以把它理解成一个「本地 AI 网关 会话管理 工具调用」的组合体它对外暴露统一的 HTTP API对内可以接各种模型通道还能管理会话上下文、记录调用日志、挂载工具插件。适合的人群很明确——想在家里或小团队内网跑一个 7×24 在线的 AI 服务、又不想买高功耗服务器、还希望所有请求走统一 Key 通道方便计费和切换模型的人。传统做法要么是拿一台旧笔记本当服务器功耗 30W 起步、风扇呼呼响要么是树莓派ARM 架构下很多 Docker 镜像要重新编译踩坑踩到怀疑人生。ZimaBoard 是 x86_64 架构Docker 镜像直接拉官方 amd64 版本就能跑省掉了大量兼容性折腾。我这台是 ZimaBoard 8324 核 N3450、8G 内存、32G eMMC跑 OpenClaw 加 Postgres 加 Redis 三个容器内存占用稳定在 3G 左右完全够用。这篇教程的目标是给你一条从硬件上电到服务可用的完整闭环装系统、装 Docker、写 Compose、配环境变量、把 OpenClaw 的模型端点改到 TaoToken 统一通道、验证连通性、排常见错误。全程命令可复制配置片段可直接用。你不需要有很深的 Linux 功底但得愿意敲命令。有一点先讲明白OpenClaw 本身不生产模型能力它是个调度层。真正干活的大模型要么本地跑ZimaBoard 这算力跑 7B 量化模型都吃力要么走云端 API。所以本文的重点之一就是教你把 OpenClaw 的出站请求指向 TaoToken 的统一 Key/API 通道这样你只维护一个 Key、一个 Base URL就能在多个模型之间切换不用每个模型单独申请账号、单独改配置。这对长期挂机的服务来说维护成本低太多了。2. TaoToken 前置准备统一 Key 与 API 通道在动 Docker 之前先把 TaoToken 这边的准备工作做完否则后面容器起来了没地方发请求等于白搭。TaoToken 在这里扮演的角色是「统一 API 通道」你拿到一个 Key配一个 Base URLOpenClaw 所有出站模型请求都往这个地址发由它路由到具体模型。好处是配置只写一份换模型只改一个 Model ID 字段。第一步注册并登录后进控制台。控制台地址是 https://taotoken.net/console 登录后左侧菜单能找到 API Keys 管理页直接访问 https://taotoken.net/api-keys 也行。在这里点「创建 Key」起个能认出来的名字比如zimaboard-openclaw方便以后区分是哪台机器在用。创建完立刻把 Key 复制走页面刷新后就看不全了这是很多人的第一个坑。第二步确认 Base URL。TaoToken 的 API 端点是https://taotoken.net/api注意这里不要加任何多余的路径后缀OpenClaw 或 OpenAI 兼容客户端会自己在后面拼/v1/chat/completions之类的路径。我见过有人手贱写成https://taotoken.net/api/v1结果请求变成/api/v1/v1/chat/completions直接 404。第三步确定你要用的 Model ID。TaoToken 支持多个模型具体可用列表在文档里查https://taotoken.net/doc 。选一个适合你场景的比如日常对话用轻量模型、代码任务用强一点的。把 Model ID 原样记下来一会儿要填进环境变量。如果你后面打算长期跑编码类或 Agent 类任务可以顺手了解一下 Coding Planhttps://taotoken.net/coding-plan 它针对高频编码场景做了额度优化比按量付费更划算。这个不是必须的但既然机器要 7×24 挂着提前规划好计费方式能省不少。准备工作清单就三样一个 Key、一个 Base URLhttps://taotoken.net/api、一个 Model ID。把这三样写进一个临时文本里下面配置环节直接粘贴。想先在网页上试试模型通不通可以去模型对话页 https://taotoken.net/chat 发一句话验证确认 Key 有效再往下走能省掉后面排查「到底是 Key 错还是配置错」的麻烦。3. 可复制配置Docker Compose 与环境变量清单这一节是全文的核心所有配置都给你写全路径和原文一致直接复制改 Key 就能用。先建工作目录sudo mkdir -p /opt/openclaw cd /opt/openclaw3.1 环境变量文件 .env在/opt/openclaw/.env里写下面内容。这个文件同时被 Compose 和 OpenClaw 容器读取是配置的唯一入口# OpenClaw 基础配置 OPENCLAW_PORT8080 OPENCLAW_HOST0.0.0.0 LOG_LEVELinfo LOG_PATH/var/log/openclaw # 数据库配置 DB_HOSTpostgres DB_PORT5432 DB_NAMEopenclaw DB_USERopenclaw DB_PASSWORDopenclaw123 # Redis 配置 REDIS_HOSTredis REDIS_PORT6379 REDIS_PASSWORD # TaoToken 统一 API 通道 OPENAI_API_BASEhttps://taotoken.net/api OPENAI_API_KEYsk-你的TaoTokenKey粘贴到这里 OPENCLAW_DEFAULT_MODEL你的ModelID这里最关键的三行是OPENAI_API_BASE、OPENAI_API_KEY、OPENCLAW_DEFAULT_MODEL。OpenClaw 走的是 OpenAI 兼容协议所以只要把 Base URL 指向 TaoToken 的/apiKey 填 TaoToken 的 Key模型填 TaoToken 支持的 Model ID出站请求就会全部走统一通道。注意 Base URL 结尾不要带斜杠也不要带/v1。3.2 docker-compose.yml在/opt/openclaw/docker-compose.yml写下面内容。三个服务openclaw 主服务、postgres 数据库、redis 缓存services: openclaw: image: openclaw/openclaw:latest container_name: openclaw restart: unless-stopped ports: - ${OPENCLAW_PORT}:8080 env_file: - .env environment: - OPENAI_API_BASE${OPENAI_API_BASE} - OPENAI_API_KEY${OPENAI_API_KEY} - OPENCLAW_DEFAULT_MODEL${OPENCLAW_DEFAULT_MODEL} volumes: - ./data:/app/data - ./logs:/var/log/openclaw depends_on: - postgres - redis mem_limit: 1g memswap_limit: 1g postgres: image: postgres:16-alpine container_name: openclaw-postgres restart: unless-stopped environment: - POSTGRES_DB${DB_NAME} - POSTGRES_USER${DB_USER} - POSTGRES_PASSWORD${DB_PASSWORD} volumes: - ./pgdata:/var/lib/postgresql/data mem_limit: 512m redis: image: redis:7-alpine container_name: openclaw-redis restart: unless-stopped command: redis-server --appendonly yes volumes: - ./redisdata:/data mem_limit: 256m几个要点解释一下。restart: unless-stopped保证容器异常退出后自动拉起这是 7×24 服务的基本盘。mem_limit给每个容器设了内存上限防止某个服务内存泄漏把整机拖垮——ZimaBoard 内存有限这个必须设。env_file把.env整个注入同时environment里又显式声明了三个 TaoToken 变量双保险避免某些镜像读不到 env_file 的情况。3.3 目录与权限cd /opt/openclaw mkdir -p data logs pgdata redisdata chmod 600 .env.env里有 Key权限收紧到 600只有 root 能读。这一步别省尤其是机器放在共享网络环境里的时候。3.4 启动cd /opt/openclaw docker compose up -d docker compose ps正常的话你会看到三个容器都是Up状态。第一次启动 postgres 初始化要十几秒openclaw 会等数据库就绪稍等片刻再验证。4. 验证请求从容器健康到模型连通容器起来不等于服务可用得逐层验证。我习惯从内到外查先看容器状态再看 OpenClaw 自身健康接口最后打通到 TaoToken 的模型请求。4.1 容器与健康检查docker compose ps curl -s http://localhost:8080/api/health健康接口正常返回类似{status:ok}的 JSON。如果这一步就失败先看日志docker compose logs -f openclaw4.2 验证 OpenClaw 到 TaoToken 的连通性这是最关键的一步。直接在 ZimaBoard 上用 curl 模拟 OpenClaw 的出站请求确认 Base URL 和 Key 没问题curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer sk-你的TaoTokenKey \ -d { model: 你的ModelID, messages: [{role: user, content: 只回复两个字通了}] }如果返回里choices[0].message.content是「通了」说明 Key、Base URL、Model ID 三件套全对。这一步单独验证的价值在于它绕开了 OpenClaw直接测通道一旦后面 OpenClaw 报错你就能确定问题在 OpenClaw 配置而不是 TaoToken 通道。4.3 通过 OpenClaw 发起对话通道验证通过后再走 OpenClaw 自己的接口curl -X POST http://localhost:8080/api/ai/chat \ -H Content-Type: application/json \ -d {message: 你好报一下你当前使用的模型}如果 OpenClaw 返回了模型回复说明整条链路打通客户端 → OpenClaw → TaoToken → 模型 → 原路返回。这时候打开浏览器访问http://ZimaBoard_IP:8080能看到 Web 界面并正常对话闭环就完成了。4.4 开机自启确认systemctl is-enabled docker docker inspect openclaw --format {{.HostConfig.RestartPolicy.Name}}第二条应该输出unless-stopped。这样断电重启后Docker 自启、容器自拉起服务自动恢复不需要你手动干预。5. 本篇常见错误排查这一节按真实报错来都是我或读者实际踩过的。401 Unauthorized / invalid api key。九成是 Key 复制时带了空格或换行或者.env里 Key 没加引号但含特殊字符。检查方法docker compose exec openclaw env | grep OPENAI_API_KEY看输出的 Key 和你控制台里的是否一字不差。另外确认 Key 没被删除或过期去 https://taotoken.net/api-keys 核对。local proxy failed / connection refused。这个报错通常出现在 OpenClaw 尝试连本地某个代理端口时。原因一般是OPENAI_API_BASE被写成了http://localhost:xxxx之类的本地地址或者环境里残留了HTTP_PROXY变量。检查docker compose exec openclaw env | grep -i proxy有残留就清掉Base URL 必须是https://taotoken.net/api。reading choices: unexpected end of JSON input。这个报错说明请求发出去了但返回体不是预期的 JSON常见于 Base URL 写错导致返回了 HTML 错误页。重点检查 Base URL 有没有多写/v1或结尾斜杠。正确写法就是https://taotoken.net/api路径拼接交给客户端。OAuth / authentication failed。如果你用的是某些需要 OAuth 流程的客户端比如 Claude Code 类工具报这个错说明它没走 API Key 模式。这类工具要改成 API Key 认证配置三件套Base URL 填https://taotoken.net/apiKey 填 TaoToken KeyModel ID 填对应模型。以 Codex 的auth.json为例结构大致是{ OPENAI_API_KEY: sk-你的TaoTokenKey, OPENAI_BASE_URL: https://taotoken.net/api }如果你用 CC Switch 或 Cline 的 MCP 配置同样记住三件套缺一不可Base URL、Key、Model ID。少任何一个都会报认证或模型找不到的错。容器反复重启。docker compose logs openclaw看退出原因。最常见是数据库没就绪openclaw 启动时连不上 postgres 就退出。解决办法是给 openclaw 加depends_on的健康检查或者手动docker compose restart openclaw等数据库起来后再拉一次。端口 8080 被占用。netstat -tlnp | grep 8080查占用进程改.env里的OPENCLAW_PORT换个端口然后docker compose up -d重建。磁盘写满。ZimaBoard eMMC 只有 32G日志和数据库涨起来很快。df -h看根分区定期docker system prune -f清理无用镜像日志目录挂到外部 SATA 盘更稳妥。6. 长期挂机与后续扩展服务跑起来只是开始7×24 挂机真正考验的是稳定性和可维护性。几个我实测下来有用的点。日志轮转必须配否则日志文件能把 eMMC 写满。在/etc/logrotate.d/openclaw写/opt/openclaw/logs/*.log { daily rotate 7 compress delaycompress missingok notifempty create 0644 root root }健康检查脚本挂 cron每 5 分钟跑一次检测 OpenClaw 健康接口和数据库连接异常就重启容器。这个脚本不用写太复杂核心就三行curl 健康接口、判断返回码、非 200 就docker compose restart。Swap 建议开 2G。ZimaBoard 8G 内存跑这三个容器够用但模型请求并发高时会有内存尖峰有 Swap 兜底不至于 OOM 杀进程sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo /swapfile none swap sw 0 0 | sudo tee -a /etc/fstab后续想扩展的话OpenClaw 的模型端点已经统一指向 TaoToken换模型只改.env里的OPENCLAW_DEFAULT_MODEL然后docker compose up -d重建即可不用动其他配置。想加新工具或插件在./data目录下按 OpenClaw 文档放配置就行。如果后面要接更多客户端比如手机端、其他机器上的 IDE它们统一填 TaoToken 的 Base URL 和 Key所有流量走一个通道计费和排查都集中在一处。需要查可用模型和最新接入方式文档在 https://taotoken.net/doc 要新建或管理 Key 去 https://taotoken.net/api-keys 想先在网页上验证模型效果模型对话页是 https://taotoken.net/chat 。长期跑编码或 Agent 任务的话Coding Plan 页面 https://taotoken.net/coding-plan 有额度方案按你的调用量选就行。