拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Windows 下用 WSL2 部署 OpenClaw:实现开机静默自启与浏览器访问完整指南

前阵子在 Windows 11 上把 OpenClaw 完整部署到 WSL2 里之后又调好了静默自启和浏览器访问。现在每天打开电脑等半分钟左右浏览器输入http://localhost:8787就能直接进控制台全程一次终端都没打开过。这套环境我稳定跑了一个多月中间重启系统不下十次没有一次需要人工干预。今天把这套方案从头到尾拆一遍从 WSL2 环境准备、OpenClaw 脚本安装到 systemd 自启、Windows 浏览器访问、常见报错排查全部写清楚。如果你也是 Windows 主力机、想跑一个 Linux 侧的 Agent 服务而且希望开机后“啥也不用管”那这篇就是照着抄的作业。1. 部署前环境准备先把 WSL2 这块地基打牢1.1 为什么不用 Docker Desktop 或虚拟机偏偏选 WSL2很多人看到 Linux 服务第一反应是装 Docker Desktop。从表面看Docker Desktop 也有 WSL2 后端界面点一点就能起容器。但这里有个问题Docker Desktop 跑容器、OpenClaw 又要跑在容器里中间多一层抽象网络转发和端口映射排查起来非常痛苦。我刚开始也试过这个方案折腾两天最后发现日志都在页面就是连不上问题就出在 Windows、WSL2、Docker 三层网络的叠加上。WSL2 本身就是一个轻量虚拟机跑的是真实 Linux 内核service、systemd、端口监听这些行为和独立 Linux 服务器完全一致。直接把 OpenClaw 装进 WSL2比容器方案少一层出问题时好排查得多。对比一下三个方案的取舍WSL2 直接装最贴近“一台 Linux 服务器”的真实状态systemd 自启友好网络链路最短内存开销最小。推荐。Docker Desktop适合需要快速拉起和销毁环境的人但链路复杂自启和网络访问需要额外处理。VMware / VirtualBoxGUI 占用大、启动慢、快照管理麻烦而且不支持 systemd 的轻量集成场景不推荐作为日常自启服务载体。说白了WSL2 是 Windows 和 Linux 之间的“原配桥梁”能直接跑二进制、能被 Windows 侧计划任务调用还能被 VS Code 无缝接管调试。这个组合最适合长期跑一个常驻 Agent 服务。1.2 从零装好 WSL2 Ubuntu 22.04一次跑通先说系统要求Windows 10 21H2 及以上、或者 Windows 11。内存建议 8GB 起步跑 OpenClaw 加上中间件16GB 会比较舒服。安装前的第一道坎是 BIOS 虚拟化。任务管理器里切到“性能”选项卡看底部“虚拟化”那项是不是“已启用”。如果显示“已禁用”先重启进 BIOS/UEFI找到 Intel VT-x 或 AMD-V 相关的选项打开保存退出。这一步不做后面 WSL2 基本没法启动。系统层面新版 Windows 直接用一条命令装全家桶wsl --install默认会装 WSL2 和 Ubuntu。如果想指定发行版可以加参数wsl --install -d Ubuntu-22.04旧机器或者系统组件比较乱的情况下建议手动开两个 Windows 功能PowerShell 管理员模式执行dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart执行完重启再wsl --install -d Ubuntu-22.04。Ubuntu 首次启动会让你设置用户名和密码这个密码后续 sudo 要用别乱设完就忘了。装完先更新系统sudo apt update sudo apt upgrade -y如果你的网络环境下载比较慢可以把 apt 源换成国内常用镜像源修改/etc/apt/sources.list后重新 update 即可。这一步可做可不做但换了之后后面装依赖会明显快很多。装完确认 WSL 版本是 2而不是 1wsl -l -v输出里面 VERSION 列必须是 2。如果显示 1执行wsl --set-version Ubuntu-22.04 2这里要提一个很常见的坑wsl --install跑完之后系统默认的发行版可能不是你刚装的。用wsl --set-default Ubuntu-22.04把它设成默认避免后面计划任务里调用 WSL 时找错发行版。1.3 启用 systemd后台常驻服务的开关终于打开了WSL2 刚出来的时候有个很尴尬的问题默认 init 进程不是 systemd而是类似容器的轻量 init。这导致systemctl start xxx这种命令根本不可用很多 Linux 下的服务管理方式全部失效。当时大家只能靠 cron、rc.local 或者手动脚本去拉服务难受得一批。新版 WSL2 已经支持 systemd只需要在/etc/wsl.conf里打开开关[boot] systemdtrue然后回到 Windows执行wsl --shutdown注意这里不是关掉终端窗口而是彻底关停整个 WSL 虚拟机。可以在 PowerShell 里跑wsl --shutdown再重新进入 Ubuntu。验证 systemd 是否生效ps -p 1 -o comm输出systemd就说明成功了。这一步是整个“静默自启”方案的地基因为后面 OpenClaw 的常驻服务和崩溃重启都依赖 systemd。没有这步服务管理会麻烦很多排查问题时也会到处踩坑。2. OpenClaw 本体安装脚本化安装、目录规划与升级2.1 先搞清楚 OpenClaw 是什么、安装前要准备什么OpenClaw 是一个开源智能体运行平台核心能力是把大模型接入、工具调用、工作流编排和自动化执行整合到一起。你可以把它理解成一个“agent 管家”告诉它目标它会拆任务、调模型、调工具、把结果整理好。部署它本质上是部署一套带 Web 控制台的常驻服务。在开始安装之前先确认了两件事一是中间件。OpenClaw 运行需要一些外部依赖常见组合是消息队列加数据库我这边用的是 RabbitMQ 和 MongoDB具体以官方文档当前版本的依赖清单为准。个人使用场景下我建议把中间件放到 Docker Compose 里管理OpenClaw 本体则直接装进 WSL2。这样中间件出问题可以一键重建OpenClaw 本体又能直接享受 systemd 自启。二是端口规划。OpenClaw 的 Web 控制台有默认端口我这边是 8787。这个端口不一定和你的版本一致安装完启动日志里会明确打印记住这个端口后续访问和防火墙都围绕它展开。2.2 使用官方安装脚本指定 git 方式从 main 分支安装OpenClaw 提供了官方安装脚本支持几种不同的安装方式。这里我强烈建议用 git 方式直接从 GitHub 的 main 分支检出源码。为什么因为 release 包更新有滞后而 main 分支通常包含最新功能和紧急修复。Agent 平台这种迭代飞快的项目用 git 方式能让你及时跟上更新节奏升级也只是一次git pull的事。流程是这样先下载安装脚本到本地查看内容不要盲目执行管道安装看清楚脚本行为和依赖再跑curl -fsSL -o install_openclaw.sh 官方文档里的脚本地址 bash install_openclaw.sh --method git --branch main脚本会做几件事检查系统依赖、创建项目目录、从 main 分支检出源码、安装 Python/Node 相关依赖、生成默认配置。整个过程有网络请求耐心等。如果中途失败多半是网络拉源码断了重跑一次脚本即可它有幂等处理。安装完成后在终端执行openclaw --version能输出版本号就说明命令行工具装好了。然后用which openclaw记下它的绝对路径后面 systemd 配置要用。第一次启动前改一下配置文件。OpenClaw 的配置一般在~/.openclaw/config.yaml或项目目录下取决于安装脚本的约定。重点检查几个字段中间件连接地址、控制台监听地址、控制台端口。监听地址一定要设置成0.0.0.0否则从 Windows 侧访问时会连不上只监听127.0.0.1的话服务只在 WSL2 内部可见。2.3 目录规划与版本升级目录规划这件事越早做越好。我的建议是OpenClaw 本体放在~/openclaw配置文件、日志、数据库数据不要混在项目目录里。当时踩过一个教训升级时git pull拉下来新代码和本地的自定义配置冲突差一点把生产配置覆盖掉。后来学乖了把配置文件放到~/.openclaw/项目目录通过环境变量或启动参数指定配置路径export OPENCLAW_CONFIG/home/你的用户名/.openclaw/config.yaml这样每次升级只需要 pull 代码、更新依赖、重启服务配置和数据都是独立的。升级版本的操作也很简单cd ~/openclaw git pull origin main # 根据项目文档更新依赖比如 pip install -r requirements.txt 或 npm install sudo systemctl restart openclaw升级前记得备份配置和数据库。数据库如果是 MongoDB用mongodump导出一份备份几十 MB 的东西花不了一分钟但能避免很多意外。3. WSL2 静默自启开机后不用敲一行命令3.1 静默自启的完整链路拆解“静默自启”这四个字核心诉求是开机后不打开 WSL 终端、不手动敲命令OpenClaw 自己就在后台跑起来浏览器直接访问。要实现这个效果需要把两段链路接起来一段在 Windows 侧系统登录后触发一个计划任务执行一条 WSL 命令。 一段在 Linux 侧WSL2 里的 systemd 接管这条命令把 OpenClaw 作为系统服务拉起并保证它崩溃后自动重启。为什么不用 Windows 的开机启动文件夹放一个wsl -d Ubuntu的快捷方式因为那只会打开一个 WSL 窗口还要在里面想办法跑命令既不“静默”也不可靠。计划任务 systemd 的组合服务由 Linux 的进程管理器托管异常退出会自动拉起比开机启动文件夹稳得多。还有一点要确认WSL2 默认是“登录后启动”不是 Windows 服务那种系统级自启。对个人办公电脑来说登录后启动完全够用。如果你需要不登录也启动可以把计划任务设为“不管用户是否登录都要运行”但那样 WSL 的网络和用户环境会有额外坑不建议个人用户这么折腾。3.2 在 WSL2 里注册 systemd 服务在/etc/systemd/system/openclaw.service写入服务单元文件[Unit] DescriptionOpenClaw Server Afternetwork-online.target mongod.service rabbitmq-server.service Wantsnetwork-online.target [Service] User你的用户名 WorkingDirectory/home/你的用户名/openclaw ExecStart/usr/local/bin/openclaw serve Restarton-failure RestartSec5 EnvironmentOPENCLAW_CONFIG/home/你的用户名/.openclaw/config.yaml [Install] WantedBymulti-user.target解释几个关键字段Restarton-failure进程异常退出时自动重启RestartSec5表示等 5 秒再拉起来避免疯狂重启。User指定运行用户别用 root 跑 Web 服务权限太宽不是好事。ExecStart替换成你自己的openclaw绝对路径和启动子命令以官方文档和openclaw --help为准。After和Wants等网络和中间件就绪后再启动本体避免启动顺序不对导致连接失败。写完后执行sudo systemctl daemon-reload sudo systemctl enable openclaw sudo systemctl start openclawenable是注册开机自启的关键很多人漏了这一步导致 systemd 服务手动能起但重启后不生效。启动后查看状态sudo systemctl status openclaw状态是active (running)就说明服务已经在后台跑起来了。可以再确认下端口监听ss -tlnp | grep 8787注意看监听地址是不是0.0.0.0:8787。如果是127.0.0.1:8787外部访问不了回到配置文件把监听地址改成0.0.0.0再重启服务。3.3 Windows 侧创建计划任务现在进入 Windows 侧这条命令是核心schtasks /Create /TN OpenClawAutostart /TR C:\Windows\System32\wsl.exe -d Ubuntu-22.04 -u root systemctl start openclaw /SC ONLOGON /RL HIGHEST /F这条命令的含义是登录时触发以最高权限运行调用 wsl.exe 让 Ubuntu-22.04 的 root 用户执行systemctl start openclaw。这里有几个容易出问题的细节计划任务里的wsl.exe建议写全路径C:\Windows\System32\wsl.exe。有些环境的 PATH 不包含 System32只写wsl.exe可能执行失败。-d Ubuntu-22.04指定发行版避免机器上装了多个 WSL 发行版时调错。-u root是为了让 systemctl 有权限操作系统服务不需要额外配 sudo 免密。systemctl start openclaw前面不要加sudo因为已经是 root 用户。如果你不喜欢命令行创建任务用“任务计划程序”GUI 也行。创建任务 → 触发器设为“登录时” → 操作设为“启动程序” → 程序填C:\Windows\System32\wsl.exe参数填-d Ubuntu-22.04 -u root systemctl start openclaw然后勾选“使用最高权限运行”。创建完之后最好重启一次电脑验证。重启后不要手动打开 WSL等一分钟左右浏览器直接访问 OpenClaw 地址能打开就说明整条链路已经通了。4. Windows 浏览器访问从 localhost 到局域网三种姿势全打通4.1 默认的 localhost 转发套路WSL2 有个非常实用的特性localhost 转发。什么意思WSL2 里监听端口的服务Windows 侧直接访问http://localhost:端口就能通不需要手动配端口映射。这是绝大多数人遇到的第一种访问方式也是我最推荐的基础方案。也就是说OpenClaw 在 WSL2 里监听0.0.0.0:8787Windows 浏览器打开http://localhost:8787就能看到控制台页面。实测下来这个转发非常稳定和本机跑的 Windows 服务体验完全一致。注意前提是 OpenClaw 监听地址必须包含0.0.0.0至少不能只监听 WSL 内部的127.0.0.1。如果只监听回环地址Windows 侧localhost转发也会连不上因为转发目标是 WSL 的完整网络栈不是 WSL 内部的回环接口。验证方式很简单在 Windows 的 PowerShell 里执行curl http://localhost:8787能返回 HTML 内容说明转发通了。如果返回curl: (56)之类的错误大概率是监听地址问题或者服务根本没起来回 3.2 查ss -tlnp。4.2 局域网访问与 netsh 端口代理localhost 访问只覆盖本机。如果想让手机、平板、公司局域网里的其他电脑访问 OpenClaw就需要把 WSL2 的服务端口暴露到 Windows 物理网卡上。为什么不能直接访问 WSL2 的 IP原因很简单WSL2 是 NAT 网络它有一个内部 IP比如 172.20.10.5这个 IP 只有 Windows 宿主机能路由到局域网其他设备根本不知道这个 IP 存在也路由不进去。所以需要在 Windows 上做一个端口代理把 Windows 的某个端口转发到 WSL2 的 IP 和端口netsh interface portproxy add v4tov4 listenaddress0.0.0.0 listenport8787 connectaddress172.20.10.5 connectport8787先拿到 WSL2 的当前 IPhostname -I把这个 IP 填进去。然后还要放行 Windows 防火墙netsh advfirewall firewall add rule nameOpenClaw Web dirin actionallow protocolTCP localport8787之后局域网其他设备访问http://你的Windows主机IP:8787就能打开控制台。但这里有个很烦的问题WSL2 的 IP 不固定重启后可能会变。端口代理还是指向旧 IP访问就断了。解决办法是写一个 PowerShell 脚本每次开机时重新拉取 WSL2 最新 IP 并刷新端口代理$wslIp (wsl -d Ubuntu-22.04 -- hostname -I).Trim().Split( )[0] netsh interface portproxy delete v4tov4 listenport8787 listenaddress0.0.0.0 netsh interface portproxy add v4tov4 listenport8787 listenaddress0.0.0.0 connectport8787 connectaddress$wslIp把这个脚本挂到计划任务里触发条件设为登录时就能保持端口代理一直指向最新 IP。4.3 一劳永逸的 .wslconfigmirrored 网络模式如果你受够了 WSL2 IP 漂移有一个更优雅的解法WSL2 的 mirrored 网络模式。简单理解开启 mirrored 之后WSL2 共享 Windows 宿主机的网络接口IP 地址也变成同一个。WSL2 里监听的端口Windows 侧直接用 localhost 访问局域网其他设备也能像访问 Windows 本机服务一样访问不再需要 netsh 端口代理也不再存在 IP 漂移问题。配置方法是在 Windows 用户目录下创建.wslconfig文件C:\Users\你的用户名\.wslconfig写入[wsl2] memory8GB processors4 networkingModemirrored然后wsl --shutdown重启 WSL 使配置生效。注意 mirrored 模式有前提Windows 11 22H2 及以上版本且 WSL 版本比较新。老版本 Windows 10 大概率用不了系统会自动忽略这个配置项。另外如果你机器上有很多虚拟网卡或者网络类软件mirrored 模式偶尔会出现兼容性问题表现是 WSL2 里网络忽通忽不通。遇到这种情况退回 NAT netsh 端口代理方案就好两种方案各有适用场景对比项NAT netsh 端口代理mirrored 网络模式适用系统Windows 10 / 11 均可推荐 Win11 22H2配置复杂度需要脚本维护一次配置后续不用管IP 漂移问题有需要刷新脚本无局域网访问需要防火墙放行天然支持网络兼容性最好可能受虚拟网卡影响个人建议能开 mirrored 就开省心太多开不了或者遇到兼容问题再用 NAT 方案兜底。5. 常见问题排查与避坑记录5.1 “此计算机上未启用虚拟化”的系列报错这个报错在论坛里每天都有人问形态也五花八门0x80370102、0x80370114、还有 WSL2 直接提示“无法启动因为此计算机上未启用虚拟化”。排查顺序基本固定第一步任务管理器 → 性能 → CPU看“虚拟化”状态。如果是“已禁用”进 BIOS/UEFI 打开 Intel VT-x 或 AMD-V这是硬前提。第二步检查 Windows 功能里“虚拟机平台”是否开启。管理员 PowerShell 执行dism.exe /online /get-featureinfo /featurename:VirtualMachinePlatformState 显示 Enabled 才正常。没有的话按 1.2 节的命令启用并重启。第三步如果 BIOS 和 Windows 功能都正常但旧版本 Windows 还是报错考虑升级 WSL 内核。执行wsl --update这套排查走下来90% 的虚拟化问题都能解决。剩下的基本是主板固件太老或 BIOS 里虚拟化选项被“安全启动”或“内存完整性”间接关掉需要具体机型具体查了。5.2 服务起了但浏览器一直打不开这是自启排查里最头疼的“服务明明 active怎么浏览器就是打不开”按以下清单逐项排查服务是否真的在监听WSL2 里ss -tlnp | grep 8787没有输出说明进程没起来或端口不对。监听地址是不是0.0.0.0只监听127.0.0.1的话 Windows 侧访问不了去配置里改掉重启。Windows 侧是否通PowerShell 里curl http://localhost:8787报connection refused说明转发层有问题。防火墙是否挡了局域网访问本地 localhost 访问一般不受 Windows 防火墙影响但局域网访问必须放行端口。有没有端口冲突Windows 上别的程序占了 8787服务起不来或者转发混乱。之前有次折腾到半夜最后发现是 OpenClaw 启动参数里没指定配置默认监听127.0.0.1启动日志还挺正常。改配置后一切正常。所以先看监听地址再看防火墙不要瞎猜。5.3 自启任务没生效的几种原因计划任务创建了systemd 服务也 enable 了但重启后浏览器还是打不开。常见的三种原因第一种计划任务的参数写错了。wsl.exe的参数和 PowerShell 的参数解析规则不同-u root和systemctl start openclaw之间不能有奇怪的引号或换行。先用系统 PATH 里的 wsl 手动执行一遍确认命令本身没问题。第二种系统登录后 WSL 还没完全启动计划任务太快执行导致服务没拉起来。处理办法是给计划任务加一个延迟。GUI 里可以在触发器设置“延迟任务”30 到 60 秒命令行可以用/DELAY 60参数或者配合 PowerShell 脚本里Start-Sleep 30。第三种systemd 服务 enable 失败。检查systemctl is-enabled openclaw输出必须是enabled。如果是disabled回到 3.2 重新执行systemctl enable。记住enable和start是两件事一个管开机自启一个管立即拉起缺一不可。5.4 端口被占用与内存不足OpenClaw 的端口如果被其他程序占用了启动可能直接失败。Windows 侧查端口占用netstat -ano | findstr 8787看到 LISTENING 的 PID 后任务管理器里找到对应进程终止或者换一个端口。内存这块更值得注意。WSL2 默认会吃掉最多一半物理内存如果你同时开浏览器、IDE、微信再跑 OpenClawWindows 会明显卡顿。解决方法是给 WSL2 设限.wslconfig里[wsl2] memory8GB processors4 swap2GB这里swap2GB是给 WSL2 内部的交换分区别设太大太大会拖慢磁盘。设完wsl --shutdown生效。8GB 内存的机器建议设成 4GB16GB 内存设 8GB留出 Windows 侧的空间。另外OpenClaw 和中间件如果都跑在 WSL2 里最好在.wslconfig里给足processors和memory否则高峰期容易 OOM。这个我在 4.3 的配置里写了可以一起用。整套流程走下来我最大的感触是OpenClaw 本身的问题其实不多真正折磨人的是 Windows 和 WSL2 之间那层网络关系和自启链路。如果你也想折腾这套环境我会建议先把 mirrored 模式和 systemd 配好再装 OpenClaw这样从一开始就不会被 IP 漂移和手动拉服务的琐事拖住。最后再分享一个小技巧第一次部署别急着设自启先手动启动、手动通过浏览器访问成功一次确认环境和配置都没问题再上 systemd 和计划任务。拆分步骤的好处是每引入一个自动化你都能准确判断问题出在哪一层而不是全部叠加在一起之后连从哪里开始排查都不知道。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门