1. 为什么要在 WSL2 里从源码装 OpenClawOpenClaw 是一个可自托管的 AI Agent 网关能对接多种模型通道把对话、工具调用、会话管理统一到一个本地服务里。它适合想在自己机器上跑 Agent、又不想把数据交给第三方托管的人。Windows 用户最顺手的路径就是 WSL2既有 Linux 的 systemd 和包管理又能和 Windows 的文件系统、浏览器打通。但源码安装这条路坑不少。我第一次装的时候卡在 Node 版本过低报Unexpected reserved word await后来又遇到Failed to connect to bus再后来 UI 构建产物路径对不上Gateway 一直提示资源缺失。这些问题单独搜都能找到零散答案但拼起来能跑通一条完整链路的中文资料不多。这篇就按我实际踩过的顺序从 WSL2 开启 systemd 开始到 Node.js 22 环境、pnpm 依赖、源码构建、systemd 用户服务托管、开机自启最后把 API endpoint 改到 TaoToken 统一 Key 通道完成模型调用联调。每一步都给可复制的命令和预期输出你照着敲就行。需要先明确一点OpenClaw 依赖 systemd 用户服务来做进程托管和开机自启。WSL2 默认不带 systemd所以第一步必须先把这块打开否则后面openclaw gateway start会一直提示服务禁用。这也是很多人装到一半卡住的根因。另外源码安装对 Node 版本有硬要求官方推荐 Node 22 LTS。系统自带的 Node 往往是 v12 或 v16直接跑会报语法错误。所以我会用 nvm 管理版本避免污染系统环境。2. TaoToken 前置准备统一 Key 通道与模型接入OpenClaw 本身是网关它需要一个上游模型通道来真正完成推理。TaoToken 提供统一的 API endpoint 和 Key 管理把不同模型的调用收敛到一个入口省得你在 OpenClaw 里为每个模型单独配 base URL 和密钥。对自托管 Agent 来说这种统一通道在切换模型、做联调时特别省事。你需要先拿到两样东西一个 API Key以及确认要用的 Model ID。Key 在控制台的 API Keys 页面创建创建后只显示一次记得当场复制保存。Model ID 则看你打算用哪个模型比如对话类、代码类各有对应的标识填错会直接报模型不存在。TaoToken 的接入地址是https://taotoken.net/api这是 OpenAI 兼容风格的 endpoint。OpenClaw 在配置上游时把 Base URL 指向它再填上 Key 和 Model ID 就能跑通。这里要注意Base URL 末尾不要多加/v1之类的路径具体以 OpenClaw 配置项要求为准填错会返回 404。创建 Key 的入口在控制台文档里有完整的接入说明。如果你还没决定用哪个模型可以先去模型对话页面试一下确认通道可用再回来配 OpenClaw。这样能把「通道问题」和「OpenClaw 配置问题」分开排查省很多时间。我建议把 Key 存到环境变量里而不是硬编码进配置文件。OpenClaw 支持从环境变量读取这样配置文件可以进 gitKey 不会泄露。下面配置 systemd 服务时我会用Environment把 Key 注入进去。3. 可复制配置从 WSL2 systemd 到 OpenClaw 服务托管3.1 开启 WSL2 的 systemd 支持先确认你的 WSL2 发行版是 Ubuntu 22.04 或更新。然后在 WSL2 里创建/etc/wsl.confsudo tee /etc/wsl.conf EOF [boot] systemdtrue EOF cat /etc/wsl.conf改完后必须重启 WSL2 才生效。在 Windows PowerShell 里执行wsl --shutdown然后重新打开 WSL2 终端验证 systemd 是否作为 PID 1ps -p 1 -o comm # 预期输出: systemd systemctl --user status如果systemctl --user status报Failed to connect to bus说明 D-Bus 用户会话没起来先记下第 5 节有专门排查。3.2 安装 Node.js 22 与 pnpm用 nvm 管理 Node 版本避免和系统 Node 冲突curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash source ~/.bashrc nvm install 22 nvm use 22 nvm alias default 22 node -v # 应显示 v22.x.x npm install -g pnpm pnpm -v如果pnpm link --global报ERR_PNPM_NO_GLOBAL_BIN_DIR执行pnpm setup后source ~/.bashrc或者手动设置export PNPM_HOME$HOME/.local/share/pnpm export PATH$PNPM_HOME:$PATH3.3 克隆源码并构建mkdir -p ~/06_openclaw cd ~/06_openclaw git clone https://github.com/openclaw/openclaw.git cd openclaw pnpm install cd ui pnpm install cd .. pnpm ui:build这里有个关键坑pnpm ui:build的输出在dist/control-ui/但 Gateway 查找 UI 资源的路径是packages/ui/dist/。所以要手动对齐mkdir -p packages/ui/dist cp -r dist/control-ui/* packages/ui/dist/ ls packages/ui/dist/index.html然后构建 CLIpnpm build chmod x openclaw.mjs pnpm link --global which openclaw openclaw --version3.4 配置 systemd 用户服务实现开机自启先创建服务目录和 unit 文件。把 Key 通过Environment注入避免写进配置文件mkdir -p ~/.config/systemd/user cat ~/.config/systemd/user/openclaw-gateway.service EOF [Unit] DescriptionOpenClaw Gateway Afternetwork.target [Service] Typesimple WorkingDirectory%h/06_openclaw/openclaw EnvironmentNODE_ENVproduction EnvironmentTAOTOKEN_API_KEY你的Key EnvironmentTAOTOKEN_BASE_URLhttps://taotoken.net/api ExecStart%h/.nvm/versions/node/v22.22.1/bin/node %h/06_openclaw/openclaw/openclaw.mjs gateway run Restarton-failure RestartSec5 [Install] WantedBydefault.target EOF注意ExecStart里的 node 路径要换成你实际的 nvm 路径用which node确认。然后重载并启动systemctl --user daemon-reload systemctl --user enable openclaw-gateway.service systemctl --user start openclaw-gateway.service systemctl --user status openclaw-gateway.service要让用户服务在未登录时也保持运行需要开启 lingeringsudo loginctl enable-linger $USER3.5 把 API endpoint 指向 TaoTokenOpenClaw 的模型通道配置在它的配置文件里。找到配置目录通常在~/.config/openclaw/或项目内config/把上游 endpoint 改成 TaoToken{ providers: { taotoken: { baseUrl: https://taotoken.net/api, apiKeyEnv: TAOTOKEN_API_KEY, model: 你的ModelID } }, defaultProvider: taotoken }三件套要齐全Base URL 填https://taotoken.net/apiKey 走环境变量TAOTOKEN_API_KEYModel ID 填你在 TaoToken 控制台确认的模型标识。改完重启服务systemctl --user restart openclaw-gateway.service4. 验证请求与成功结果服务起来后先看状态openclaw status预期输出类似Gateway │ local · ws://127.0.0.1:18789 · reachable再跑健康检查openclaw doctor openclaw gateway probedoctor会逐项检查配置、依赖、通道连通性。如果通道配错这里会直接报出来比等到对话时报错好定位。打开 Web UI 验证openclaw dashboard它会自动带令牌打开浏览器地址是http://127.0.0.1:18789/。如果没自动打开用openclaw dashboard --no-open拿 URL 手动访问。进去后发一条测试消息如果模型正常返回说明 TaoToken 通道和 OpenClaw 已经打通。看实时日志确认请求走向openclaw logs gateway --follow日志里能看到请求打到taotoken.net/api以及返回的模型响应。如果这里报 401说明 Key 没注入成功报模型不存在说明 Model ID 填错。最后验证开机自启重启 WSL2wsl --shutdown后重开不手动启动任何东西直接openclaw status如果 Gateway 已经 reachable说明 systemd 用户服务和 lingering 都生效了。5. 本篇常见错误排查报错一SyntaxError: Unexpected reserved word await这是 Node 版本过低系统默认 Node 可能是 v12。检查which node和node -v如果指向/usr/bin/node说明没走 nvm。执行nvm use 22并把 nvm 的 bin 目录加到 PATH 前面export PATH/home/$USER/.nvm/versions/node/v22.22.1/bin:$PATH报错二Failed to connect to bus: No such file or directoryWSL2 里 D-Bus 用户会话没起来。设置环境变量并创建运行时目录export XDG_RUNTIME_DIR/run/user/$(id -u) export DBUS_SESSION_BUS_ADDRESSunix:path/run/user/$(id -u)/bus sudo mkdir -p /run/user/$(id -u) sudo chown $(id -un):$(id -gn) /run/user/$(id -u) systemctl --user status永久修复写进~/.bashrccat ~/.bashrc EOF USER_ID$(id -u) export XDG_RUNTIME_DIR/run/user/$USER_ID export DBUS_SESSION_BUS_ADDRESSunix:path/run/user/$USER_ID/bus EOF source ~/.bashrc报错三Control UI assets missing或packages/ui/dist/index.html不存在构建产物路径不对。pnpm ui:build输出到dist/control-ui/Gateway 找的是packages/ui/dist/。按 3.3 节复制过去或者建软链接mkdir -p dist ln -sf ../packages/ui/dist dist/control-ui报错四Gateway service disabledopenclaw gateway start依赖 systemd 服务。如果用户服务不可用先用前台openclaw gateway run跑起来验证功能再回头修 systemd。修好后用systemctl --user start openclaw-gateway.service。报错五ERR_PNPM_NO_GLOBAL_BIN_DIRpnpm 全局 bin 目录没设。执行pnpm setup source ~/.bashrc或手动export PNPM_HOME$HOME/.local/share/pnpm并加进 PATH。报错六软链接dangling symlink入口文件搞错了。OpenClaw 的 bin 是openclaw.mjs不是dist/cli.js。用cat package.json | grep -A3 bin确认然后ln -sf ~/06_openclaw/openclaw/openclaw.mjs ~/.local/share/pnpm/openclaw chmod x ~/06_openclaw/openclaw/openclaw.mjs报错七401 或模型不存在401 是 Key 没注入检查 systemd unit 里的EnvironmentTAOTOKEN_API_KEY是否填对改完daemon-reload再重启。模型不存在是 Model ID 填错回 TaoToken 控制台确认标识。Base URL 必须是https://taotoken.net/api多写路径会 404。6. 后续联调与 Key 管理建议服务跑通后日常维护主要看日志和状态。openclaw logs gateway --follow能实时看到请求和报错openclaw doctor适合改完配置后快速自检。systemd 用户服务的好处是崩溃自动重启Restarton-failure已经配好不用额外写守护脚本。Key 管理上建议在 TaoToken 控制台按用途建不同的 Key比如一个给 OpenClaw 网关用一个给本地脚本测试用。这样某个 Key 泄露或要轮换时不影响其他服务。轮换时只改 systemd unit 里的环境变量daemon-reload加restart即可不用动 OpenClaw 本身。如果你后面要接更多模型或做多 Agent 编排统一通道的价值会更明显所有上游都走 TaoTokenOpenClaw 侧只维护一份 endpoint 和 Key切换模型只改 Model ID。想深入的话可以看接入文档了解参数细节或者去模型对话页面先验证通道再回来配网关。长期跑编码类 Agent 的话Coding Plan 在成本和额度上会更合适适合把 OpenClaw 当常驻服务用。