如何安全撸龙虾不掉坑

作者:一个被 AI 坑了三天但最终靠自己爬出来的靓仔

摘要:本文将用养猪(啊不,养龙虾)的朴素智慧,带你手把手在 Mac 上搭建属于你自己的 AI 大龙虾(OpenClaw),并让它成功撩到“会飞的书”(飞书机器人)。全程避坑指南,外行友好,代码可直接复制粘贴。


〇、 前言:当我以为我在吃火锅唱着歌…

事情是这样的:我想在本地电脑上养一只 AI 大龙虾(OpenClaw),让它帮我干活。AI 助手热情地给我推荐了一个“一键安装”的豪华套餐https://github.com/liam798/docker-openclawd,这是某个叫 liam 的大佬写的?(这发音,怎么听都有点像东北那旮沓夸姑娘“这娘们真带劲”里的“娘们”… 如果原作者看到这文章,别骂我,黑红也是红,再说我这不也算给您引流了嘛,精神损失费就当宣传费了哈)。

结果呢?好家伙,这“一键”下去,直接给我弹射到了坑底。当我费尽九牛一毛的力气,按照教程在容器里装好龙虾后,顺手就想搞一下飞书集成,心想“这还不简单?”。结果正吃着火锅唱着歌呢,原来装龙虾的整个箱子(Docker容器)都废了,无限重启,直接摆烂。

感情我轻轻地撩了一下“会飞的书”都不行啊?人家书都会飞就不能怪我撩它了,是它主动… 哦不,是我手贱。但问题总得解决,于是被坑了两三天的我,决定扔掉所有“一键脚本”,用自己的思路,从零开始,搭建一个干净、可控、美味的龙虾养殖场。

下面就是我的“安全撸虾指南”,保证你跟着做,绝对不掉坑(掉了我负责精神按摩)。


一、 核心思想:别信“一键”,信自己

经验一:不要安装网上的一键安装版,AI 推荐的也不好使。

这是我用血泪换来的教训。那些封装好的脚本,看似省事,实则黑盒。一旦出问题(比如飞书依赖缺失),你连它在哪挖的坑都不知道,只能对着日志干瞪眼,被绕得云里雾里。

正确姿势:用自己的思路,一步步来。过程干净、整洁、可控。你不懂代码?没关系!我下面要写的所有命令,你都可以直接复制粘贴,我会告诉你这行命令是干嘛的。咱们的思路就一个:先搞个干净的“养殖箱”(Docker容器),再把龙虾苗(OpenClaw)放进去,最后配置环境让它活蹦乱跳。


二、 搭建豪华龙虾养殖箱(Docker 镜像)

咱们不用别人的箱子,自己造一个,用料扎实,绝无甲醛。

2.1 创建项目目录和 Dockerfile

打开你的终端(Terminal),执行:

# 创建一个专属目录,所有操作都在这里面,清爽
mkdir openclaw-custom && cd openclaw-custom

在这个目录里,创建一个名为 Dockerfile 的文件(没有后缀)。用你喜欢的文本编辑器(比如 VSCode、nano 都行),把下面这一大段“养殖箱建造图纸”贴进去:

# 使用指定版本的Node.js 22.14.0 作为基础箱子
FROM node:22-bookworm-slim

# 设置箱子里的环境(时区、工作目录)
ENV DEBIAN_FRONTEND=noninteractive \
    TZ=Asia/Shanghai \
    OPENCLAW_HOME=/home/node/.openclaw

# 关键一步:把软件源换成国内的(下载速度快,避免网络超时)
RUN set -e; \
    # 检查并创建软件源列表文件
    if [ ! -f /etc/apt/sources.list ]; then \
        echo "创建 /etc/apt/sources.list 文件..."; \
        echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware" > /etc/apt/sources.list; \
        echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list; \
        echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware" >> /etc/apt/sources.txt; \
        echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list; \
    else \
        echo "替换现有 /etc/apt/sources.list 中的镜像源..."; \
        sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list; \
        sed -i 's/security.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list; \
    fi; \
    # 更新软件列表并安装一堆必要的工具(比如curl, git,还有让龙虾能控制你Mac软件的图形库)
    apt-get update && apt-get install -y \
    curl \
    wget \
    git \
    procps \
    libx11-6 \
    libxext6 \
    libxrender1 \
    libxtst6 \
    libxi6 \
    libgl1-mesa-glx \
    fonts-liberation \
    fonts-noto-color-emoji \
    nano \
    vim \
    && rm -rf /var/lib/apt/lists/*

# !!! 超级大坑预警 !!!
# 很多教程让你在这里直接安装 openclaw,会碰到各种“找不到XXX包”的坑。
# 我们的策略是:先不装!等箱子造好了,我们以“管理员”身份进去再装。
# 所以下面这行是注释掉的,千万别解开!
# RUN npm install -g openclaw@latest

# 创建一个非root用户来运行龙虾(更安全),并设置工作目录
USER node
WORKDIR /home/node

# 提前创建好龙虾的“家”(配置目录)
RUN mkdir -p /home/node/.openclaw

# 设置一些环境变量
ENV PATH="/home/node/.npm-global/bin:${PATH}" \
    NODE_ENV=production \
    DISPLAY=host.docker.internal:0  # 这句是让容器里的程序能弹出窗口到你的Mac桌面

这段代码在干嘛:简单说,就是定制了一个基于 Node.js 的 Linux 小箱子,换上了清华的软件源(下载飞快),装好了基础工具,并且准备好了运行龙虾的账户和环境。但最关键的一步——安装龙虾本体,我们留到后面手动做,这是避坑的关键。

2.2 构建镜像

图纸画好了,开始施工:

# 在 openclaw-custom 目录下执行
# 这行命令会根据 Dockerfile 构建一个名为 openclaw-custom:node-22.14.0 的镜像
docker build -t openclaw-custom:node-22.14.0 .

喝杯水,等它构建完成。成功后,你的豪华养殖箱就造好了。


三、 投放龙虾苗并培育

箱子是空的,现在我们把龙虾苗放进去,并把它养大。

3.1 进入箱子,并以管理员身份安装龙虾

我们先运行一个临时容器进去看看:

# 运行一个临时容器并进入其bash终端
docker run -it --rm openclaw-custom:node-22.14.0 bash

进入后,终端提示符会变成类似 node@一长串ID:~$,说明你已经在容器内部了。输入 whoami 应该显示 node。然后退出(输入 exit)。

接下来是核心操作:我们以管理员 (root) 身份进入容器,全局安装龙虾。这样可以避免后续各种奇怪的权限问题导致插件装不上。

# 启动一个用于初始化、取名为 openclaw-init 的容器,并让它休眠(这样它不会退出)
docker run -d \
  --name openclaw-init \
  -p 18789:18789 \
  -v $(pwd)/openclaw-data:/home/node/.openclaw \ # 把数据目录挂载出来,方便持久化
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -e DISPLAY=host.docker.internal:0 \
  openclaw-custom:node-22.14.0 \
  sleep infinity

# 以 root 身份进入这个容器
docker exec -u root -it openclaw-init bash

现在你在容器里是 root 用户了。执行最关键的一步:

# 全局安装 OpenClaw!美味的龙虾即将下锅。
npm install -g openclaw@latest

恭喜! 至此,一个纯净的、包含了所有核心依赖的龙虾养殖环境就准备好了。超级的美味往往只需要简单的食材,而简单的过程往往能避开最深的坑。


四、 初始化你的龙虾(配置向导)

保持在上一步的容器 (openclaw-init) 的 root 终端里,我们现在来初始化龙虾:

# 切换到 node 用户(安全起见)
su - node
# 开始初始化配置
openclaw onboard --install-daemon

耐心! 这里会启动一个交互式配置向导。你可以先看会儿“小绿片”(进度条),休息一下。

向导步骤很简单:

  1. 选择语言:当然是 中文
  2. 安装模式:选 QuickStart 快速开始。
  3. 配置AI模型
    • 模型提供商:选 deepseek(国内用,快且便宜)。
    • 输入你的 DeepSeek API Key(去官网注册一个,新人有免费额度)。
  4. 选择技能:一路按回车,或者选 skip for now(暂时不配),后续都能加。
  5. 完成:向导结束,它会生成配置文件。

五、 启动正式龙虾服务容器

初始化完成后,我们就可以关掉这个“初始化容器”,启动一个正式的、长期运行的服务容器了。

# 在宿主机(你Mac本身的终端)里执行,不是在容器里!
# 先停止并删除初始化容器
docker stop openclaw-init && docker rm openclaw-init

# 启动正式的、持久化的龙虾服务容器
docker run -d \
  --name openclaw-custom \        # 容器名字
  --hostname openclaw-docker \    # 容器内部主机名
  -p 18789:18789 \                # 把容器18789端口映射到你Mac的18789端口
  -v ./openclaw-data:/home/node/.openclaw \ # 挂载数据,配置不丢
  -v /tmp/.X11-unix:/tmp/.X11-unix \ # 允许图形界面
  -e DISPLAY=host.docker.internal:0 \ # 同上
  -e OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ # 允许本地用http访问,避免安全报错
  -e TZ=Asia/Shanghai \           # 设置时区
  --restart unless-stopped \      # 自动重启,除非你手动停止
  --memory="8g" \                 # 给它8G内存,吃饱好干活
  --cpus="2.0" \                  # 给2个CPU核心
  openclaw-custom:node-22.14.0 \
  openclaw gateway --bind lan --port 18789  # 启动网关服务

大功告成! 现在,在你的 Mac 浏览器里打开 http://localhost:18789,你应该能看到 OpenClaw 的控制界面了!


六、 填坑笔记与进阶操作

坑1:网关启动命令的“文字游戏”

AI 有时会告诉你用 --host 0.0.0.0,但新版本命令变了。正确命令是上面最后一行写的:openclaw gateway --bind lan --port 18789。记住,是 --bind lan,不是 --host

坑2:登录需要“令牌”

打开 http://localhost:18789 可能只看到登录页。你需要一个令牌。在容器内执行 openclaw dashboard 会输出一个带 #token=xxx 的完整 URL。把整个 URL 复制到浏览器地址栏,回车,就能直接进去了。

坑3:关于“会飞的书”(飞书机器人)的终极避坑指南

这是重灾区,无数人在这里跌倒。请严格按照以下步骤,一步都别错:

  1. 在容器内启动配置向导

    docker exec -it openclaw-custom bash
    openclaw config
    

    然后选择:Local -> Channels -> Configure/link -> Feishu/Lark -> China(国内版)。

  2. 扫码!扫码!扫码!
    命令行会吐出一个二维码。拿出你的手机,用“飞书”APP(注意:是国内版飞书,不是“飞书海外版Lark”或“飞书商务版”)扫码。我之前用外区账号下的飞书扫码就没反应,坑死。

  3. 扫码后的奇迹
    扫码后,飞书APP会引导你“创建一个机器人”。一路默认点下去,机器人就创建好了,并且自动和你的OpenClaw完成了关联!不用手动填AppID、AppSecret那些鬼东西。

  4. 去飞书后台补权限
    创建成功后,去https://open.feishu.cn/找到你刚创建的应用。在“权限管理”页面,点击“批量导入”,把下面这坨权限JSON贴进去,然后“创建版本”并发布。

    { "scopes": { "tenant": [ "aily:file:read", "aily:file:write", "application:application.app_message_stats.overview:readonly", "application:application:self_manage", "application:bot.menu:write", "cardkit:card:write", "contact:user.employee_id:readonly", "corehr:file:download", "docs:document.content:read", "event:ip_list", "im:chat", "im:chat.access_event.bot_p2p_chat:read", "im:chat.members:bot_access", "im:message", "im:message.group_at_msg:readonly", "im:message.group_msg", "im:message.p2p_msg:readonly", "im:message:readonly", "im:message:send_as_bot", "im:resource", "sheets:spreadsheet", "wiki:wiki:readonly" ], "user": [ "aily:file:read", "aily:file:write", "im:chat.access_event.bot_p2p_chat:read" ] }}
    
  5. 事件订阅
    在飞书后台的“事件与回调”页面,事件订阅方式一定要选“长连接”(这是关键!)。然后添加 im.message.receive_v1 事件。保存。

做完这些,你的飞书机器人就应该能正常@和私聊了。别再去网上找那些复杂的配对命令了,用二维码创建的机器人,大部分情况下不需要手动配对!


七、 总结

撸龙虾(OpenClaw)这事儿,说难也难,说简单也简单。难在网上的信息鱼龙混杂,一步错步步错;简单在只要你抓住核心——自己从零开始,控制每一步——就能避开99%的坑。

  1. 拒绝黑盒:别用一键脚本,自己写 Dockerfile,心里有数。
  2. 权限干净:在纯净容器里用 root 装核心包,一劳永逸。
  3. 配置从简:初始化向导能用就用,模型、技能都可以后续加。
  4. 飞书扫码:配置飞书就认准官方 openclaw config 向导出来的二维码,其他野路子都忘掉。

现在,你可以愉快地享用你的私人 AI 龙虾大餐了。它就在你的 Mac 本地,安全、可控、还不用交月费。如果还有坑… 那一定不是我的攻略问题,是龙虾又更新了!不过按照这个“自己掌控”的思路,你也能轻松把它填上。

祝大家撸虾愉快,永不掉坑!如果这篇“血泪史”帮到了你,点个赞再走呗~ (精神按摩费就免了,哈哈)

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐