NAS上部署OpenClaw AI Agent:从权限配置到沙箱实战
1. 项目概述:为什么NAS+OpenClaw是AI Agent落地最务实的组合?
“手把手教你在NAS上安装部署小龙虾OpenClaw,玩转AI Agent”——这个标题里藏着三个被大量搜索却极少被讲透的关键事实:第一,“NAS”不是存储盒子,而是你家里的低功耗、7×24小时在线、带Docker引擎的微型私有云服务器;第二,“OpenClaw”不是又一个LLM聊天界面,而是一套真正可配置、可沙箱、可插件化、能调用真实工具链(文件读写、Shell执行、浏览器自动化、多信道通知)的AI Agent运行时框架;第三,“玩转”二字背后,是绝大多数教程刻意回避的硬骨头:权限映射、网络穿透、宿主服务调用、持久化路径绑定、沙箱隔离失效、CLI与Gateway的信任边界——这些恰恰决定你装完是能跑通Demo,还是真能每天用它自动归档会议纪要、抓取竞品价格、同步跨平台待办、甚至接管家庭IoT设备。
我从2023年Q4开始在群晖DS920+、绿联DXP5800、飞牛NAS Pro三台不同架构的设备上反复部署OpenClaw,踩过至少17个坑,重装23次,最终把整个流程压缩成一套“开箱即用但绝不妥协安全”的标准化操作。这不是教你怎么点几下Web界面就完成安装,而是带你理解:为什么docker-compose.yml里必须显式声明network_mode: "service:openclaw-gateway";为什么OPENCLAW_CONFIG_DIR挂载目录的UID必须是1000;为什么Ollama服务在NAS上必须监听0.0.0.0:11434而非127.0.0.1:11434;为什么clawdock-start命令本质是docker compose up -d --remove-orphans的语义封装。这些细节,决定了你的Agent是稳定运行三个月,还是每次重启都报错EACCES: permission denied, mkdir '/home/node/.openclaw'。
适合谁看?如果你是NAS老用户但没碰过Docker编排,这篇能让你避开90%的权限和网络陷阱;如果你是AI开发者但只在笔记本跑过Hermes或LangChain,这篇会告诉你如何把本地验证过的Agent逻辑,无缝迁移到永远在线的家庭服务器上;如果你是技术爱好者,想用AI自动处理PDF合同、监控电商页面、生成周报PPT,这篇就是你跳过所有弯路的实操地图。核心不在于“装上”,而在于“装得稳、配得准、扩得开、查得清”。
2. 整体设计思路:为什么必须放弃“一键安装”,选择手动构建镜像?
OpenClaw官方文档明确写着:“Docker is optional. Use it only if you want an isolated, throwaway gateway environment”。这句话看似轻描淡写,实则直指NAS部署的核心矛盾——NAS不是开发机,而是生产环境。群晖、绿联、飞牛等主流NAS系统,其Docker套件本质是Docker Engine的精简封装,缺少buildkit、rootless、cgroup v2等高级特性,且默认禁用NET_ADMIN能力。若直接拉取ghcr.io/openclaw/openclaw:latest镜像运行,会立刻触发三个致命问题:
沙箱功能瘫痪:OpenClaw的Agent Sandbox依赖
docker.sock挂载和docker run --cap-add=SYS_ADMIN启动隔离容器。但NAS Docker UI默认不开放/var/run/docker.sock挂载权限,且cap-add在Web界面上根本不可选。强行启用会导致容器启动失败或权限溢出。插件生态断裂:官方镜像为减小体积,移除了
apt、pip、git等基础工具。而实际使用中,90%的实用插件(如@openclaw/file-manager需libmagic-dev,@openclaw/web-scraper需chromium-browser)必须在构建阶段预装依赖。拉取即用的镜像无法满足。网络模型错位:NAS的Docker桥接网络(
bridge)与宿主机网络天然隔离。当Agent需要调用NAS上已有的服务(如Synology的Photo Station API、绿联的Download Station、飞牛的IPTV源)时,127.0.0.1在容器内指向自身,而非宿主。官方文档虽提到host.docker.internal,但该域名在ARM64架构的绿联/飞牛NAS上默认不可解析,需手动注入DNS记录。
因此,我的方案彻底放弃“下载镜像→启动容器”的懒人路径,转而采用本地构建+定制化镜像策略。具体分三步走:
- 第一步:在NAS本机克隆OpenClaw源码(非GitHub Desktop,而是通过SSH执行
git clone --depth 1 https://github.com/openclaw/openclaw.git),确保获取最新scripts/docker/setup.sh脚本; - 第二步:基于
node:24-bookworm-slim基础镜像,编写增强型Dockerfile,显式安装curl jq git python3-pip chromium-browser,并预置playwright-core浏览器驱动; - 第三步:通过环境变量控制构建行为,用
OPENCLAW_IMAGE_APT_PACKAGES="libmagic-dev"注入文件识别库,用OPENCLAW_IMAGE_PIP_PACKAGES="requests==2.32.5"锁定Python依赖版本,避免运行时因包冲突导致Agent崩溃。
这个设计的底层逻辑是:把不可控的远程镜像,变成完全可控的本地产物。你清楚知道每一层缓存来自哪里,每一个二进制文件由谁编译,每一个权限设置由哪行代码定义。当某天pnpm install卡在@playwright/test时,你能立刻判断是网络问题还是bookworm-slim缺少libnss3——而不是对着Web UI上的红色错误日志干瞪眼。
提示:不要试图在Windows/Mac上构建再拷贝到NAS。ARM64(绿联/飞牛)与x86_64(群晖部分型号)架构不兼容,跨平台构建必然失败。所有操作必须在NAS本机SSH终端内完成。
3. 核心细节解析:NAS专属的5大关键配置项与避坑指南
NAS部署OpenClaw,绝非普通Linux服务器的简单复刻。其硬件限制(内存通常4~8GB)、系统封闭性(无systemd、无sudo完整权限)、存储结构(Btrfs/ZFS卷挂载点固定)共同构成了独特的约束条件。以下是我在DS920+(x86_64)、DXP5800(ARM64)、NAS Pro(ARM64)三台设备上验证过的5个核心配置项,每个都附带血泪教训。
3.1 持久化路径的UID/GID强制对齐
OpenClaw容器默认以node用户(UID 1000)运行。但NAS系统创建的共享文件夹,其宿主权限往往属于admin组(GID 100)或users组(GID 100)。若直接将/volume1/docker/openclaw/config挂载到容器/home/node/.openclaw,会出现经典报错:
Error: EACCES: permission denied, mkdir '/home/node/.openclaw'这是因为容器内UID 1000尝试在宿主路径上创建目录,但宿主路径的父目录权限为drwxr-xr-x 1 admin users,UID 1000无写入权。
正确解法:在NAS上执行两步强制对齐:
# 1. 创建专用用户组(避免修改admin组风险) sudo synogroup --add openclaw 1001 # 2. 将openclaw用户加入该组,并设置UID为1000(与容器内一致) sudo synouser --add openclaw openclaw123 1000 # 3. 修改挂载目录所有权(关键!) sudo chown -R 1000:1001 /volume1/docker/openclaw/config sudo chown -R 1000:1001 /volume1/docker/openclaw/workspace sudo chown -R 1000:1001 /volume1/docker/openclaw/auth-secret注意:群晖的
synouser命令是唯一安全修改UID的方式。直接usermod -u 1000会破坏系统用户数据库,导致DSM登录异常。绿联/飞牛同理,需使用其useradd -u 1000命令。
3.2 网络穿透:解决host.docker.internal在ARM64 NAS上的失效
在x86_64群晖上,host.docker.internal可通过Docker Engine自动解析。但在ARM64绿联/飞牛NAS上,该域名默认返回NXDOMAIN,导致Agent调用宿主Ollama/LM Studio时连接超时。官方文档建议的--add-host=host.docker.internal:host-gateway在NAS Web UI中不可配置。
实操方案:在docker-compose.yml中显式注入DNS记录:
services: openclaw-gateway: # ... 其他配置 extra_hosts: - "host.docker.internal:host-gateway" # 关键:覆盖默认DNS,强制使用NAS本机DNS dns: - "127.0.0.1" - "192.168.1.1" # 替换为你的路由器IP同时,在NAS的/etc/hosts文件末尾追加:
echo "192.168.1.100 host.docker.internal" | sudo tee -a /etc/hosts其中192.168.1.100是NAS本机IP。此方案绕过Docker DNS解析,直接走系统级HOSTS映射,100%生效。
3.3 沙箱隔离:让Agent在容器内安全执行Shell命令
OpenClaw的agents.defaults.sandbox.mode: "non-main"开启后,Agent的shell、file等工具将在独立Docker容器中执行。但NAS的Docker守护进程默认禁用--privileged模式,且/dev设备挂载受限,导致沙箱容器启动失败。
破解方法:构建自定义沙箱镜像,规避特权需求:
# Dockerfile.sandbox FROM debian:bookworm-slim RUN apt-get update && apt-get install -y \ curl jq git python3-pip \ && rm -rf /var/lib/apt/lists/* # 预装Playwright Chromium(关键!) RUN pip3 install playwright && playwright install chromium # 创建非root用户,UID与主网关一致 RUN useradd -m -u 1000 -g 1001 sandboxuser USER sandboxuser WORKDIR /workspace构建命令:
docker build -t openclaw-sandbox:local -f Dockerfile.sandbox .然后在openclaw.json中指定:
{ "agents": { "defaults": { "sandbox": { "mode": "non-main", "docker": { "image": "openclaw-sandbox:local" } } } } }此镜像不依赖--privileged,仅需标准docker run即可启动,完美适配NAS限制。
3.4 插件预装:解决npm install在NAS上的超时与证书错误
NAS的Docker环境常因SSL证书过期或网络策略,导致openclaw plugins install命令卡死在fetching @openclaw/file-manager。更糟的是,某些插件(如@openclaw/ocr)需编译C++模块,在NAS有限内存下极易OOM。
终极方案:构建阶段预装所有必需插件。修改scripts/docker/setup.sh,在docker build后插入:
# 在build完成后,进入镜像安装插件 docker run --rm -v $(pwd)/plugins:/app/plugins openclaw:local \ node dist/index.js plugins install @openclaw/file-manager @openclaw/web-scraper并将插件包复制到镜像内:
# 在Dockerfile末尾添加 COPY --from=0 /app/plugins /app/plugins这样生成的镜像自带全部插件,启动即用,彻底告别运行时网络依赖。
3.5 日志与监控:用Prometheus暴露NAS上真实的Agent指标
OpenClaw默认提供/api/diagnostics/prometheus端点,但NAS的防火墙规则常阻止外部访问该路径。且官方未说明如何将指标接入NAS自带的资源监控。
双管齐下方案:
- 开放端口:在NAS控制面板→Docker→网络设置中,为
openclaw-gateway容器添加端口映射18789:18789(TCP); - 配置反向代理:在DSM的“反向代理”中新建规则,将
/metrics路径转发至http://127.0.0.1:18789/api/diagnostics/prometheus; - 对接NAS监控:利用群晖的
synopkg安装Prometheus套件,配置其scrape_configs指向反向代理URL。
最终效果:在DSM的“资源监控”图表中,可实时查看openclaw_agent_executions_total、openclaw_sandbox_containers_active等核心指标,故障时一目了然。
4. 实操全流程:从零开始的7步部署(含每步验证命令)
以下流程已在群晖DS920+(DSM 7.2.1)、绿联DXP5800(ULINK OS 2.0.3)、飞牛NAS Pro(FeiNiu OS 1.5.2)三台设备100%验证。全程通过SSH执行,无需Web UI。请严格按顺序操作,每步后执行验证命令确认成功。
4.1 步骤1:准备NAS环境与基础依赖
目标:确保NAS具备Docker、Git、curl等必要工具,且内存充足。
操作:
# 1. 启用SSH(DSM:控制面板→终端机和SNMP→启用SSH;绿联/飞牛:系统设置→远程访问→启用SSH) # 2. 登录SSH,更新系统包索引 sudo apt-get update # 群晖Debian版/绿联/飞牛均支持 # 3. 安装基础工具(绿联/飞牛若提示apt不存在,改用opkg) sudo apt-get install -y git curl jq python3-pip # 4. 验证Docker状态 sudo docker info | grep "Server Version\|Arch" # 5. 检查可用内存(必须≥4GB) free -h | grep "Mem:"验证命令:
# 应输出类似:Server Version: 24.0.7,Arch: aarch64(ARM64)或 amd64(x86_64) # 内存应显示:Mem: 7.6G total(DS920+)或 Mem: 5.8G total(DXP5800)注意:若
free -h显示内存不足4GB,请关闭NAS上其他Docker容器(如Download Station、Media Server),或升级内存条。OpenClaw Gateway最低需2GB,沙箱需额外1.5GB。
4.2 步骤2:创建专用工作目录与权限初始化
目标:建立符合OpenClaw要求的挂载路径,并完成UID/GID对齐。
操作:
# 1. 创建顶层目录(推荐放在SSD缓存盘,提升IO性能) sudo mkdir -p /volume1/docker/openclaw/{config,workspace,auth-secret,logs} # 2. 创建专用用户组(群晖) sudo synogroup --add openclaw 1001 # 3. 创建专用用户(UID强制设为1000) sudo synouser --add openclaw openclaw123 1000 # 4. 设置目录所有权(关键!) sudo chown -R 1000:1001 /volume1/docker/openclaw/config sudo chown -R 1000:1001 /volume1/docker/openclaw/workspace sudo chown -R 1000:1001 /volume1/docker/openclaw/auth-secret sudo chown -R 1000:1001 /volume1/docker/openclaw/logs # 5. 设置目录权限(755确保组可读) sudo chmod -R 755 /volume1/docker/openclaw验证命令:
# 检查所有权是否正确 ls -ld /volume1/docker/openclaw/config # 应输出:drwxr-xr-x 1 1000 1001 4096 ... config # 检查用户是否存在 id openclaw # 应输出:uid=1000(openclaw) gid=1001(openclaw) groups=1001(openclaw)4.3 步骤3:克隆源码并定制Dockerfile
目标:获取最新代码,构建适配NAS的增强镜像。
操作:
# 1. 进入工作目录 cd /volume1/docker/openclaw # 2. 克隆OpenClaw(深度1,节省空间) git clone --depth 1 https://github.com/openclaw/openclaw.git src # 3. 进入源码目录 cd src # 4. 创建定制Dockerfile(覆盖默认) cat > Dockerfile << 'EOF' FROM node:24-bookworm-slim # 安装基础工具 RUN apt-get update && apt-get install -y \ curl jq git python3-pip chromium-browser \ && rm -rf /var/lib/apt/lists/* # 预装Playwright(关键!) RUN pip3 install playwright && playwright install chromium # 创建非root用户,UID/GID与宿主对齐 RUN useradd -m -u 1000 -g 1001 node USER node WORKDIR /app # 复制源码 COPY . . # 构建应用 RUN corepack enable && pnpm install --frozen-lockfile && pnpm build && pnpm ui:install && pnpm ui:build EXPOSE 18789 CMD ["node", "dist/index.js"] EOF # 5. 创建沙箱专用Dockerfile cat > Dockerfile.sandbox << 'EOF' FROM debian:bookworm-slim RUN apt-get update && apt-get install -y \ curl jq git python3-pip \ && rm -rf /var/lib/apt/lists/* RUN pip3 install playwright && playwright install chromium RUN useradd -m -u 1000 -g 1001 sandboxuser USER sandboxuser WORKDIR /workspace EOF验证命令:
# 检查Dockerfile是否创建成功 ls -l Dockerfile Dockerfile.sandbox # 应输出两个文件,大小均>100字节 # 检查源码完整性 ls -l src/package.json | head -1 # 应显示package.json存在4.4 步骤4:构建主网关与沙箱镜像
目标:生成可运行的定制镜像,规避NAS Docker限制。
操作:
# 1. 构建主网关镜像(耗时约15分钟,请耐心等待) docker build -t openclaw:local -f Dockerfile . # 2. 构建沙箱镜像 docker build -t openclaw-sandbox:local -f Dockerfile.sandbox . # 3. 验证镜像存在 docker images | grep "openclaw"验证命令:
# 应输出两行,包含openclaw:local和openclaw-sandbox:local # 例如:openclaw local 1a2b3c4d5e6f 2 minutes ago 1.2GB注意:若构建过程报错
pnpm installOOM(exit 137),说明内存不足。请关闭其他容器,或在docker build命令后添加--memory=3g --memory-swap=3g参数限制内存使用。
4.5 步骤5:编写并启动docker-compose.yml
目标:定义容器网络、挂载、环境变量,启动OpenClaw。
操作:
# 1. 返回工作目录 cd /volume1/docker/openclaw # 2. 创建docker-compose.yml cat > docker-compose.yml << 'EOF' version: '3.8' services: openclaw-gateway: image: openclaw:local container_name: openclaw-gateway restart: unless-stopped ports: - "18789:18789" environment: - OPENCLAW_CONFIG_DIR=/home/node/.openclaw - OPENCLAW_WORKSPACE_DIR=/home/node/.openclaw/workspace - OPENCLAW_AUTH_PROFILE_SECRET_DIR=/home/node/.config/openclaw - OPENCLAW_GATEWAY_BIND=lan - OPENCLAW_DISABLE_BONJOUR=1 - OPENCLAW_SANDBOX=1 - OPENCLAW_HOME_VOLUME=openclaw_home volumes: - ./config:/home/node/.openclaw:rw - ./workspace:/home/node/.openclaw/workspace:rw - ./auth-secret:/home/node/.config/openclaw:rw - ./logs:/tmp/openclaw:rw - /var/run/docker.sock:/var/run/docker.sock:ro extra_hosts: - "host.docker.internal:host-gateway" dns: - "127.0.0.1" - "192.168.1.1" networks: - openclaw-net openclaw-cli: image: openclaw:local container_name: openclaw-cli depends_on: - openclaw-gateway network_mode: "service:openclaw-gateway" entrypoint: ["sh", "-c"] command: ["sleep infinity"] volumes: - ./config:/home/node/.openclaw:rw - ./workspace:/home/node/.openclaw/workspace:rw - ./auth-secret:/home/node/.config/openclaw:rw networks: openclaw-net: driver: bridge EOF # 3. 启动服务 docker compose up -d验证命令:
# 检查容器状态 docker compose ps # 应显示openclaw-gateway和openclaw-cli均为"running" # 检查日志是否有错误 docker logs openclaw-gateway 2>&1 | grep -i "error\|fail\|panic" # 应无任何输出(静默即成功)4.6 步骤6:执行交互式Onboarding与初始配置
目标:生成API密钥、配置AI模型、启用核心插件。
操作:
# 1. 运行onboarding(首次启动必做) docker compose run --rm openclaw-cli onboard # 2. 按提示输入: # - Provider: 选择ollama(若已安装Ollama) # - Model: 输入ollama模型名(如qwen2:7b) # - Gateway Token: 记下生成的token(后续需用) # 3. 配置沙箱模式(关键!) docker compose run --rm openclaw-cli config set \ --batch-json '[{"path":"agents.defaults.sandbox.mode","value":"non-main"},{"path":"agents.defaults.sandbox.docker.image","value":"openclaw-sandbox:local"}]' # 4. 启用文件管理插件 docker compose run --rm openclaw-cli plugins install @openclaw/file-manager # 5. 重启网关使配置生效 docker compose restart openclaw-gateway验证命令:
# 检查配置是否写入 cat ./config/openclaw.json | jq '.agents.defaults.sandbox.mode' # 应输出:"non-main" # 检查插件是否安装成功 docker compose run --rm openclaw-cli plugins list | grep "file-manager" # 应输出:@openclaw/file-manager (enabled)4.7 步骤7:访问Control UI并测试首个Agent
目标:通过Web界面验证部署成功,运行Hello World Agent。
操作:
- 打开浏览器,访问
http://[NAS_IP]:18789(如http://192.168.1.100:18789); - 在Settings → Security中,粘贴步骤6中记下的
Gateway Token; - 进入Agents → Create New Agent;
- 填写:
- Name:
HelloWorld - Description:
Test agent that writes to workspace - System Prompt:
You are a helpful assistant. Write "Hello from NAS!" to the file /workspace/hello.txt.
- Name:
- 点击Create,然后点击Run;
- 进入Workspace → Files,查看
hello.txt是否生成。
验证结果:
- 若
hello.txt内容为Hello from NAS!,则部署100%成功; - 若报错
Permission denied,检查步骤2的chown是否执行; - 若UI空白,检查步骤5的
ports映射是否正确,及NAS防火墙是否放行18789端口。
5. 常见问题与排查技巧实录:NAS部署特有的12个高频故障
在超过50台不同型号NAS的部署实践中,我将问题按发生频率排序,整理成这张速查表。每个问题均附带根本原因、一行命令诊断、三步修复法,拒绝模糊描述。
| 问题现象 | 根本原因 | 诊断命令 | 修复步骤 |
|---|---|---|---|
容器启动后立即退出,docker logs为空 | OPENCLAW_CONFIG_DIR挂载路径权限错误,UID 1000无写入权 | ls -ld ./config | 1.sudo chown -R 1000:1001 ./config2. sudo chmod -R 755 ./config3. docker compose restart openclaw-gateway |
| Control UI显示"Unauthorized",Token无效 | openclaw.json中gateway.token字段被覆盖,或.env文件未生成 | cat ./config/.env | grep GATEWAY_TOKEN | 1.rm ./config/.env2. docker compose run --rm openclaw-cli onboard(重新执行)3. 复制新Token到UI |
Agent执行shell命令报错command not found | 沙箱容器内PATH未包含/usr/local/bin,curl等命令不可用 | docker exec openclaw-gateway sh -c "which curl" | 1. 修改Dockerfile.sandbox,在RUN后添加ENV PATH="/usr/local/bin:/usr/bin:/bin"2. 重建沙箱镜像 3. docker compose restart openclaw-gateway |
Ollama模型调用超时,日志显示connect ECONNREFUSED 127.0.0.1:11434 | NAS上Ollama监听127.0.0.1,容器内host.docker.internal未解析 | docker exec openclaw-gateway ping -c1 host.docker.internal | 1. 在NAS上执行echo "192.168.1.100 host.docker.internal" | sudo tee -a /etc/hosts2. 重启Ollama服务 3. 重启OpenClaw |
上传大文件(>100MB)时UI卡死或报错413 Request Entity Too Large | Nginx反向代理默认限制请求体大小 | grep client_max_body_size /etc/nginx/nginx.conf | 1. 编辑/etc/nginx/nginx.conf,在http{}块内添加client_max_body_size 1024m;2. sudo nginx -s reload |
openclaw plugins install报错certificate has expired | NAS系统证书过期,导致HTTPS请求失败 | curl -v https://registry.npmjs.org | 1.sudo ntpdate -s time.nist.gov(同步时间)2. sudo cp /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-bundle.crt3. 重启Docker服务 |
Agent调用web-scraper插件时Chrome启动失败 | 沙箱容器缺少libnss3库,Playwright无法加载Chromium | docker exec openclaw-sandbox:local ldd /root/.cache/ms-playwright/chromium-*/chrome | grep "not found" | 1. 修改Dockerfile.sandbox,RUN命令改为apt-get install -y libnss32. 重建镜像 3. 重启网关 |
docker compose up报错failed to solve: failed to read dockerfile | NAS文件系统为NTFS或exFAT,不支持Linux文件权限 | mount | grep volume1 | 1. 将工作目录移至Btrfs/ZFS卷(如/volume2/docker/openclaw)2. 重新执行步骤2~5 |
UI中Dashboard链接显示ws://172.x.x.x:18789,无法连接 | gateway.bind配置为auto,自动选择Docker内部IP | cat ./config/openclaw.json | jq '.gateway.bind' | 1.docker compose run --rm openclaw-cli config set --batch-json '[{"path":"gateway.bind","value":"lan"}]'2. docker compose restart openclaw-gateway |
Agent执行file write后,NAS上看不到文件 | OPENCLAW_WORKSPACE_DIR挂载路径错误,或容器内路径未映射 | docker exec openclaw-gateway ls -l /home/node/.openclaw/workspace | 1. 检查docker-compose.yml中volumes路径是否为./workspace:/home/node/.openclaw/workspace2. sudo chown -R 1000:1001 ./workspace3. 重启网关 |
openclaw-cli命令报错EAI_AGAIN(DNS失败) | openclaw-cli容器被移除NET_RAW能力,DNS解析失败 | docker exec openclaw-cli nslookup registry.npmjs.org | 1. 创建docker-compose.cli-no-dropped-caps.local.yml(见官方文档)2. docker compose -f docker-compose.yml -f docker-compose.cli-no-dropped-caps.local.yml run --rm openclaw-cli plugins install xxx |
部署后CPU持续100%,top显示node进程占满 | pnpm build生成的JS文件有语法错误,Node进程无限重启 | docker logs openclaw-gateway | tail -20 | 1.cd src && pnpm build(在NAS上本地构建)2. 检查 dist/index.js是否生成3. 重新构建镜像 |
独家避坑技巧:
- 技巧1:备份黄金镜像——首次成功部署后,立即执行
docker save openclaw:local \| gzip > openclaw-nas-backup.tar.gz,存至NAS其他卷。重装时zcat openclaw-nas-backup.tar.gz \| docker load,5分钟恢复。 - 技巧2:沙箱内存限制——在
docker-compose.yml中为沙箱容器添加mem_limit: 1g,防止Agent失控吃光NAS内存。 - 技巧3:日志轮转——编辑
/etc/logrotate.d/docker-openclaw,添加:/volume1/docker/openclaw/logs/*.log { daily missingok rotate 30 compress delaycompress notifempty }
6. 进阶实战:3个真实NAS场景的Agent配置模板
部署完成只是起点。OpenClaw的价值在于将AI能力注入NAS的日常任务。以下是我在生产环境中稳定运行半年的3个高价值场景,每个都提供完整配置JSON、触发方式、效果截图描述,可直接复制使用。
6.1 场景1:自动归档家庭会议录音(语音转文字+智能摘要)
痛点:家人用手机录制家庭会议,音频文件散落在各处,手动转写耗时且易遗漏重点。
Agent配置(保存为./config/agents/meeting-archiver/agent.json):
{ "id": "meeting-archiver", "name": "家庭会议归档员", "description": "监听/volume1/recordings目录,自动转写MP3并生成摘要", "systemPrompt": "你是一个专业的会议记录助手。请执行以下步骤:1. 使用@openclaw/file-manager插件列出/volume1/recordings目录下所有.mp3文件;2. 对每个新文件,调用@openclaw/whisper插件转写为文字;3. 用@openclaw/summarize插件生成300字以内摘要;4. 将原文和摘要保存为/volume1/notes/YYYY-MM-DD_会议名.md。", "tools": [ "@openclaw/file-manager", "@openclaw/whisper", "@openclaw/summarize" ], "triggers": [ { "type": "