OpenClaw离线版Windows内网部署指南:安装配置与避坑
简介OpenClaw小龙虾离线安装包专为无外网、网络受限的内网环境打造面向内网开发/测试工程师与运维实施人员解决npm拉取超时、GitHub无法访问等痛点。目标机仅需预装Node.js即可借助内置运行文件与启动器完成部署。包内共2000个文件以1072个js脚本和860个md文档为主体辅以64个json配置、3个txt说明及1个yaml文件压缩包约270.83MBjs文件承载核心运行逻辑md文档覆盖部署与使用指引json/yaml用于配置管理目录结构清晰。目前已有848人学习下载。该离线包提供可复用的AI Agent私有化方案让封闭环境稳定交付无需外网即可体验完整OpenClaw功能适合作为内网测试机、实验室及演示机的标准化部署工具。1. 先弄明白一件事OpenClaw离线版到底解决了什么痛点很多在单位内网搞自动化的人第一次遇到 OpenClaw 都会卡在同一个地方官方安装命令要联网拉一堆运行时和依赖而你的Windows机器上不了外网折腾半天装到一半就报错。于是就有了俗称“小龙虾”的 OpenClaw 离线安装包——把主程序、运行时和依赖预先打包好做成 Windows 内网可用的完整版。这里不聊无关宣传只讲我按自己部署习惯总结的实操路径离线包拿到手先检查什么、Windows 环境怎么准备、配置哪些参数、会遇到哪几个坑以及怎么验证这套东西真能用。适合网管、隔离网开发者和想在内网搭 Agent 原型的人。2. Windows离线安装的全链路拆解从安装包结构到环境自检离线安装包和在线安装的差别不只是“不用联网”。在线安装其实是一个黑匣子脚本会按需拉取主程序、Node 运行时、系统依赖和模型组件离线包则把这一堆东西提前固定下来。所以你拿到的完整版首先要做的不是急着安装而是先看清楚里面装了什么再决定环境怎么补。2.1 先看懂离线安装包里装的是什么我一般会先开一个管理员终端切换到解压目录跑tree /F看目录布局。一个典型的 OpenClaw 离线包会包含这几类东西OpenClaw-Offline/ ├─ app/ # 主程序目录 ├─ runtime/ # Node.js 等运行时 ├─ resources/ # 配置文件模板与静态资源 ├─ launcher.exe # Windows 启动器 ├─ install.ps1 # 一键安装脚本 └─ README.txt # 版本说明注意不要用tree /F直接输出到屏幕内容多的时候看不全我常用tree /F structure.txt导出到文件再翻。看目录的同时要做两件小事读 README 里的版本说明确认里面是否带 WSL2 相关组件再对比resources里的配置模板和在线环境下的默认配置版本差异会直接影响参数名。离线包最大的价值就是自带依赖但也带来一个问题它只保证在“选定环境”下可用如果你机器缺了系统组件依然会装不上所以环境自检不能跳过。2.2 环境自检三步Node运行时、WSL2状态、磁盘空间我第一次在内网装的时候直接点安装脚本结果卡在 WSL2 上。OpenClaw 的 Windows daemon 会用到 WSL2 做沙箱而常见问题是机器只装了旧版 WSL或者 Hyper-V 功能没开。所以在执行 install.ps1 之前建议先跑下面这段 PowerShell 做自检# 检查 Node 运行时是否已可用 node -v # 检查 WSL2 内核状态离线安装依赖此项 wsl --status wsl --version # 确认系统盘剩余空间单位GB Get-PSDrive C | Select-Object {NameFreeGB;Expression{[math]::Round($_.Free/1GB,2)}}这段脚本里node -v用来确认离线包自带的 runtime 是否已经被加入 PATH如果显示 “not recognized”说明安装包里的运行时没有自动写入环境变量需要手动把runtime目录加进去。wsl --status的输出要重点看“默认版本”是否为 2如果显示 1 或者提示未安装后面的 daemon 大概率会直接报错。磁盘空间这一项容易被忽略但其实很关键离线完整版解压后通常比你想象的大C 盘剩不到 10GB 就不要硬装后续模型和数据写入会明显变慢。自检通过之后再用管理员权限运行install.ps1。注意不是右键“以管理员身份运行”就完了PowerShell 窗口也要从管理员终端打开否则脚本写环境变量时会遇到权限不足。如果 install.ps1 中途失败先看输出停在哪个阶段一般会看到“checking environment”“installing runtime”“registering service”三个阶段卡在哪个阶段就去补哪个环境比反复重跑整个脚本高效得多。2.3 自带运行时与系统已有运行时的冲突处理如果内网机器之前装过 Node.js很容易出现离线包自带的 runtime 和系统 PATH 里的旧版本冲突。现象是启动后版本不对、模块加载报错。处理方式是把离线包的 runtime 目录放到 PATH 最前面同时用环境变量强制指向。具体做法$openclawRoot C:\Program Files\OpenClaw [Environment]::SetEnvironmentVariable(PATH, $openclawRoot\runtime; [Environment]::GetEnvironmentVariable(PATH,Machine), Machine)这条命令把 OpenClaw 的 runtime 插入到系统 PATH 头部确保启动器优先使用离线包自带的 Node。这里有个坑改完环境变量后当前终端不会自动生效需要重新开一个管理员 PowerShell 再执行node -v否则你会以为没改上。另外如果机器有旧版本 Node 以注册表方式写入 PATH插入头部仍然生效但如果旧版本安装得很“霸道”还是建议先卸载干净再装离线包别两个版本混着用。提示离线包里的 runtime 是否有依赖系统组件通常写在 README 的“系统要求”一节。别跳过那一段内网机器补组件可比在线环境麻烦得多。3. 在内网Windows上跑通OpenClaw的最小配置环境变量、模型地址与日志开关离线安装成功只代表文件就位离“能用”还差配置。OpenClaw 默认配置面向联网在线环境在内网必须改掉几个关键参数。不同版本键名可能略有差异以离线包内config.example.json为准但内网场景下要动的逻辑是固定的。3.1 三个必调配置项数据目录、模型服务地址、日志级别OpenClaw 的配置通常分为环境变量和配置文件两种入口。我习惯先把环境变量设好再改配置文件这样重装系统后也能快速恢复。以内网场景为例先建一个专门的数据目录New-Item -ItemType Directory -Force -Path D:\OpenClawData [Environment]::SetEnvironmentVariable(OPENCLAW_HOME, D:\OpenClawData, User)OPENCLAW_HOME是 OpenClaw 存放技能、日志和运行状态的主目录。官方默认会放在用户目录下内网机器如果用户目录在 C 盘长期读写会产生大量日志所以我会挪到独立数据盘。改完环境变量后启动器读到的就是新目录这一点在离线包里同样生效。第二个必调项是模型服务地址。OpenClaw 本身不直接带大模型它通过 OpenAI 兼容接口调用本地或内网模型服务。离线环境最常见的就是对接同网段内一台已经部署好 Ollama 的机器。在配置文件里改这两个键{ model_router: { base_url: http://10.20.30.40:11434/v1, api_key: ollama, model_name: qwen2.5:7b } }这里base_url指向内网 Ollama 的/v1路径而不是默认的https://api.openai.comapi_key在 Ollama 下随便填一个非空值占位它不校验model_name要写你实际拉取到本地镜像的名称比如qwen2.5:7b。如果 Ollama 和 OpenClaw 装在同一台机器base_url可以直接写http://127.0.0.1:11434/v1但内网多机共用时建议写实际内网 IP避免每台客户端改来改去。第三个是日志级别。离线排障时最怕信息不够把日志调成debug能少走很多弯路。在配置文件里找logging.level字段一般从info改成debug。{ logging: { level: debug, output_file: D:\\OpenClawData\\logs\\openclaw.log } }日志输出到文件比只输出到控制台有用尤其 daemon 在后台运行的时候控制台关了就什么都看不到了。output_file路径注意要用双反斜杠或正斜杠我见过不少因为单反斜杠转义导致日志文件写到奇怪路径的案例。3.2 用 PowerShell 注册开机自启和后台运行内网机器通常没有人天天开机手动敲命令所以需要把 OpenClaw daemon 注册成开机自动启动。我不建议把它直接扔到启动文件夹更加可控的是注册为计划任务。下面这个 PowerShell 脚本创建了一个开机时以最高权限运行的计划任务$action New-ScheduledTaskAction -Execute C:\Program Files\OpenClaw\launcher.exe -Argument --daemon $trigger New-ScheduledTaskTrigger -AtStartup $principal New-ScheduledTaskPrincipal -UserId SYSTEM -LogonType ServiceAccount -RunLevel Highest Register-ScheduledTask -TaskName OpenClawDaemon -Action $action -Trigger $trigger -Principal $principal计划任务相比启动文件夹有几个好处可以指定SYSTEM账户不依赖当前用户登录可以用-RunLevel Highest提升权限避开“非管理员终端启动 daemon 失败”的权限问题启动失败时事件查看器里能看到完整状态码。如果你不想用计划任务还有一个轻量办法写一个.vbs脚本以隐藏窗口方式启动 launcher再放入启动文件夹但这样灵活性差我建议还是优先计划任务。注册完成后用下面这条命令手动触发一次确认任务能起来Start-ScheduledTask -TaskName OpenClawDaemon Get-ScheduledTask -TaskName OpenClawDaemon | Get-ScheduledTaskInfo这里Start-ScheduledTask是立即触发Get-ScheduledTaskInfo返回上一次运行时间和结果。如果LastRunTime没有变化说明任务没有真正启动去看配置的执行路径是否写错或者启动器是否因为缺少参数卡住。计划任务的“运行结果”里267011这类状态码通常表示权限不足需要把RunLevel改成Highest。4. 离线部署的避坑清单5个常见问题与排查路径这一章我直接按“现象→原因→解决”写都是离线部署最常见的卡点。4.1 双击启动器提示“OpenClaw无法安全验证”或直接闪退现象从内网U盘拷来的离线包双击launcher.exeWindows SmartScreen 提示“无法安全验证”点“更多信息”也没有“仍要运行”按钮或者干脆闪退没有任何提示。原因离线包内的启动器没有经过微软代码签名SmartScreen 把未知签名当作风险闪退则可能是用户目录下面的数据文件损坏启动器初始化失败就退出了。解决先对安装包整体做解锁。在资源管理器里右键launcher.exe打开属性勾选“解除锁定”点确定。如果文件多就用 PowerShell 批量解除Unblock-File -Path C:\Program Files\OpenClaw\* -Recurse -ForceUnblock-File会移除从网络或内网复制文件时附加的 Mark of the WebMOTW标记。做完这步再启动SmartScreen 就不会第一时间拦截。如果依旧闪退去D:\OpenClawData\logs看启动日志常见的第二层原因是配置文件里写了错误的模型地址导致启动时初始化模型客户端失败并退出。4.2 WSL2 状态异常导致 daemon 无法启动现象启动 OpenClaw daemon 时提示类似于“无法安全验证 WSL2 环境请在 PowerShell 中运行 wsl -- status”。原因离线包依赖 WSL2 运行部分隔离组件。机器上装了 WSL 但默认版本是 1或者WSL服务没有启动daemon 检查环境失败。解决先按提示在管理员 PowerShell 中跑wsl --status看输出。如果是默认版本为 1执行wsl --set-default-version 2如果提示尚未安装 WSL2 内核可以用wsl --install --no-distribution只装运行时不装发行版。装完必须重启一次否则操作系统的虚拟化平台相关功能不会立即生效。内网离线状态下执行wsl --install需要注意这个命令一般会尝试从系统更新源拉取包离线环境可能失败。这时要在安装包里找厂家附带的 WSL2 内核安装文件或者找同版本系统的离线安装 CAB 包手动用dism /online /Add-Package装上。注意wsl --install --no-distribution在某些精简版 Windows 上也会失败报缺少“虚拟机平台”功能。这时去“启用或关闭 Windows 功能”里勾选“适用于 Linux 的 Windows 子系统”和“虚拟机平台”重启后再跑一次。4.3 非管理员终端启动 daemon 失败现象在普通用户终端里执行launcher.exe --daemon终端输出error: start the windows daemon from a non-elevated terminal然后进程退出。原因OpenClaw 的 Windows daemon 会尝试在系统服务管理器中注册状态普通权限无法创建服务所以直接失败。解决从管理员 PowerShell 启动。判断当前终端是否有管理员权限可以执行$isAdmin ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) Write-Host $isAdmin输出False就需要重新打开管理员终端。如果计划任务配置了-RunLevel Highest可以不受这条限制。我自己的习惯是把 daemon 注册为计划任务后平时的交互命令通过普通终端跑这样既满足权限要求又不会让系统服务随手被关。4.4 端口被占用或防火墙拦截内网访问现象OpenClaw 服务在本机显示运行正常但另一台内网机器访问不到或者本机启动时提示端口已被占用。原因服务默认监听127.0.0.1只允许本机访问或者 Windows Defender 防火墙没有放行该端口的入站规则。端口被占用则常是之前的服务进程没有干净退出。解决先用 netstat 查端口占用netstat -ano | findstr :11435 tasklist | findstr PID把占用进程 PID 对应到任务名确认是同一服务残留就结束它。然后为局域网访问添加防火墙放行规则。假设服务端口是 11435放行 TCP 入站New-NetFirewallRule -DisplayName OpenClaw LAN -Direction Inbound -Protocol TCP -LocalPort 11435 -Action Allow如果服务本身绑定的是127.0.0.1仅放行防火墙也没有用。需要在配置里把监听地址改成内网地址常见配置项名是server.host设为0.0.0.0后重启服务。4.5 中文乱码和路径编码问题现象启动日志里中文全部变成乱码或者配置文件中相对路径解析失败。原因Windows PowerShell 默认使用 GBK/GB2312 编码而 OpenClaw 的配置文件通常是 UTF-8两边的编码不一致时日志输出会乱路径解析失败大多是安装目录带了中文名比如D:\软件\OpenClaw离线包在解析路径时没有正确处理中文字符。解决统一编码。在管理员 PowerShell 里先执行chcp 65001再启动修改配置文件时用 UTF-8 with BOM 保存。安装目录尽量放到纯英文路径。如果已经装在了中文路径里最简单的办法是卸载重装到C:\OpenClaw或D:\OpenClaw然后重新指一下OPENCLAW_HOME。数据目录仍然可以放在中文盘符下的英文目录。5. 内网多机使用与模型对接把OpenClaw变成团队服务离线完整版的下一步价值就是让内网其他机器也能连上这台 OpenClaw当作团队共用的 Agent 服务。前面避坑时提到绑定 0.0.0.0现在具体说怎么做。5.1 绑定内网 IP 与局域网访问先查看本机内网 IPGet-NetIPAddress -AddressFamily IPv4 | Where-Object {$_.InterfaceAlias -notmatch Loopback} | Select-Object IPAddress然后在配置中把监听地址从127.0.0.1改为内网网卡地址或者直接改为0.0.0.0表示监听所有网卡。对于离线内网环境我更建议写具体 IP例如10.20.30.40避免同时暴露到其他不必要的网卡上。改完配置后重启服务用Test-NetConnection验证端口能连通Test-NetConnection -ComputerName 10.20.30.40 -Port 11435这个命令返回TcpTestSucceeded : True才说明局域网访问链路是通的。如果本机通但别的机器不通十有八九是防火墙规则只作用于“公用”网络配置文件需要把规则加上-Profile Private或-Profile Any。还有一个容易漏的地方Windows 的“网络发现”没开不影响 TCP 访问别在这上面浪费时间。5.2 对接内网 Ollama离线模型服务怎么做团队模式最好别让每台客户端直接访问模型服务而是让 OpenClaw 统一对接内网已有的 Ollama。离线环境下模型文件通常由一台有外网的机器提前用ollama pull拉好再拷贝到内网机器。注意ollama pull得到的模型文件默认在C:\Users\用户\.ollama\models换机器后需要重新执行ollama create或导入检查点单纯拷贝文件经常遇到不认模型的问题。内网 Ollama 就绪后OpenClaw 配置模型路由已经在 3.1 节给了 JSON 片段。这里补充一个参数model_router.request_timeout。内网离线模型如果用的是 CPU 推理单次响应可能超过默认的 60 秒导致 OpenClaw 报连接中断{ model_router: { base_url: http://10.20.30.40:11434/v1, api_key: ollama, model_name: qwen2.5:7b, request_timeout: 300 } }这个值单位是秒300意味着最长等 5 分钟。配合logging.level: debug可以在日志里看到具体是哪一步超时。如果日志显示context canceled往往是模型响应太慢如果显示connection reset则要去 Ollama 那台机器看它的端口监听是否绑定了127.0.0.1。Ollama 默认监听 127.0.0.1设置环境变量OLLAMA_HOST0.0.0.0才能对外服务改完要重启 Ollama 进程。5.3 Skill与数据目录的同步团队使用时OpenClaw 的 skill 目录需要统一。离线包里的resources自带一些内置 skill而自定义 skill 一般放在OPENCLAW_HOME\skills下。我建议把整个 skills 目录纳入内网共享或版本管理不要在每台机器上各改一份。最简单的方式是用一个内网文件服务器在配置里设置skill_dir指向网络路径但网络路径要注意权限和离线包沙箱的访问粒度。更省事的是让每台机器从统一基线解压后续修改同步回去。提示每次替换 skill 目录后先查日志里有没有failed to load skill的记录。离线包只会加载它认识的结构多个文件夹少一个manifest.json就可能导致整个 skill 不出现还不会报明显错误。6. 进阶验证用一条任务跑通完整闭环6.1 端到端验证三步走安装和配置都做完最怕的是“好像启动了但不知道成没成”。我习惯按三步验证校验文件完整性、确认健康检查、发一条真实请求。第一步校验关键文件哈希。离线包发布时通常会附带 SHA256 校验值把安装目录里的launcher.exe哈希对一下Get-FileHash -Path C:\Program Files\OpenClaw\launcher.exe -Algorithm SHA256哈希一致说明离线包在拷贝过程中没有损坏。这一步在内网尤为重要U盘拷贝大文件经常因为断连导致二进制残缺但 Windows 复制不一定报错。第二步确认健康接口。启动服务后直接用浏览器或 PowerShell 打健康检查Invoke-RestMethod -Uri http://127.0.0.1:11435/v1/health -Method Get返回{status:ok}说明 daemon 活着如果连接失败回到第 4 章逐条排查。第三步发一条真实对话请求验证模型路由、配置和网络链路全链路是通的$body { model qwen2.5:7b messages ({roleuser; content用一句话介绍你自己}) max_tokens 64 } | ConvertTo-Json -Depth 5 Invoke-RestMethod -Uri http://10.20.30.40:11435/v1/chat/completions -Method Post -ContentType application/json; charsetutf-8 -Body $body这里model必须和配置文件里的model_name一致否则 Ollama 会返回model not found。返回结构里看choices[0].message.content有内容就说明 OpenClaw、WSL2、Ollama、防火墙整条链路都通了。我每装完一台都会把端口、监听 IP、模型名、防火墙规则这四样记在一个纯文本文件里放到安装目录下。下次内网环境再出问题先翻这个文件再翻日志基本不用重演“黑匣子”式排查。希望帮到你。本文还有配套的精品资源点击获取