OpenClaw 部署实战测评:Java 8 AI编程助手飞书版
OpenClaw 部署实战:Ja va 8 AI 编程助手(飞书)
关键词:OpenClaw、Docker 部署、Ja va 8、Ma ven、飞书集成、AI 编程助手
这篇文章会一步步带你走通如何用 Docker 部署 OpenClaw 开发环境,并让它成为 Ja va 8 应用开发的得力助手。通过飞书或者其他渠道,就能直接跟它交互,相当方便。
安装准备
目录结构
先把整体目录搭建起来,下面这个结构就是我们需要准备的:
openclaw-ja va-docker/
├── .env # 环境变量配置
├── docker-compose.yml # Docker Compose 编排文件
├── config/ # OpenClaw 配置文件目录
│ └── openclaw.json # 主配置文件
├── logs/ # 日志目录
├── ja va/ # Ja va 环境目录
│ ├── ma ven-3.6.3/ # Ma ven 构建工具
│ │ └── bin/ # Ma ven 可执行文件
│ ├── jdk8/ # JDK 8
│ │ └── bin/ # Ja va 可执行文件
│ └── settings.xml # Ma ven 仓库配置文件
├── repository/ # Ma ven 本地仓库
└── workspace/ # 工作空间目录
├── ja va-projects/ # Ja va 本地项目目录
│ └── my-app/ # 示例项目
└── skills/ # OpenClaw 生成的技能目录
下载 JDK 8 和 Ma ven
JDK 8 (OpenJDK)
以 ARM64 版本为例,下载地址如下:
wget https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u422-b05/OpenJDK8U-jdk_aarch64_linux_hotspot_8u422b05.tar.gz
注意:根据你的系统架构选择对应版本(x64 或 aarch64)。
Ma ven 3.6.3
wget https://archive.apache.org/dist/ma ven/ma ven-3/3.6.3/binaries/apache-ma ven-3.6.3-bin.tar.gz
解压并配置
# 创建目录
mkdir -p openclaw-ja va-docker/ja va
# 解压 JDK
tar -xzf OpenJDK8U-jdk_aarch64_linux_hotspot_8u422b05.tar.gz -C openclaw-ja va-docker/ja va/
mv openclaw-ja va-docker/ja va/jdk8u422-b05 openclaw-ja va-docker/ja va/jdk8
# 解压 Ma ven
tar -xzf apache-ma ven-3.6.3-bin.tar.gz -C openclaw-ja va-docker/ja va/
mv openclaw-ja va-docker/ja va/apache-ma ven-3.6.3 openclaw-ja va-docker/ja va/ma ven-3.6.3
创建项目目录
把准备好的相关文件存放到 openclaw-ja va-docker 目录:
mkdir -p openclaw-ja va-docker/{config,logs,workspace/ja va-projects,repository}
cd openclaw-ja va-docker
# settings.xml 存放在 ja va 目录下
Docker 部署
docker-compose.yml 配置
version: "3.9"
services:
openclaw-gateway:
image: alpine/openclaw:2026.3.12
container_name: openclaw-ja va-docker
restart: unless-stopped
user: "root"
ports:
- "18799:18799"
- "8866:8866"
- "5005:5005"
environment:
VOLCENGINE_API_KEY: ${VOLCENGINE_API_KEY}
SILICONFLOW_API_KEY: ${SILICONFLOW_API_KEY}
OPENCLAW_STATE_DIR: /home/node/.openclaw
OPENCLAW_GATEWAY_PORT: "18799"
OPENCLAW_TOKEN: ${OPENCLAW_TOKEN}
JA VA_HOME: /usr/local/ja va/jdk8
PATH: /usr/local/ja va/ma ven-3.6.3/bin:/usr/local/ja va/jdk8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MA VEN_HOME: /usr/local/ja va/ma ven-3.6.3
volumes:
- ./config:/home/node/.openclaw
- ./workspace:/home/node/.openclaw/workspace
- ./workspace/ja va-projects:/home/node/.openclaw/workspace/ja va-projects
- ./ja va/jdk8:/usr/local/ja va/jdk8:ro
- ./ja va/ma ven-3.6.3:/usr/local/ja va/ma ven-3.6.3:ro
- ./ja va/settings.xml:/home/node/.m2/settings.xml:ro
- ./repository:/home/node/.m2/repository
- ./logs:/home/node/.openclaw/logs
command: >
sh -c "
echo '=== 验证 Ja va 环境 ===' &&
/usr/local/ja va/jdk8/bin/ja va -version &&
/usr/local/ja va/ma ven-3.6.3/bin/mvn -version &&
echo '' &&
echo '=== 确保日志目录可写 ===' &&
mkdir -p /home/node/.openclaw/logs &&
chmod -R 777 /home/node/.openclaw/logs &&
echo '' &&
echo '=== 启动 OpenClaw Gateway ===' &&
exec openclaw gateway --allow-unconfigured
"
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:18799/health" ]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
deploy:
resources:
limits:
cpus: '2.0'
memory: 4G
reservations:
cpus: '1.0'
memory: 2G
openclaw 首次启动前配置
.env 环境变量
需要准备以下有效密钥:
- 有效的 VOLCENGINE_API_KEY(火山引擎,参考官方文档)
- 有效的 SILICONFLOW_AK(硅基流动,参考官方文档)
# 火山引擎 API Key
VOLCENGINE_API_KEY=xxxxx
# OpenClaw 访问令牌改成自己的
OPENCLAW_TOKEN=2fe7015f25e6d6018983e2875f332b50176070dd029391cj
# 硅基流动 api key
SILICONFLOW_API_KEY=sk-xxxx
docker 启动
# 进入 openclaw-ja va-docker 目录
cd openclaw-ja va-docker
# 启动所有服务
docker compose up -d
openclaw.json 启动后配置
编辑 config/openclaw.json——这一步其实也可以在启动后用命令行配置向导来完成,不过我们先把关键配置列出来。
配置模型
"models": {
"providers": {
"volcengine": {
"baseUrl": "https://ark.cn-beijing.volces.com/api/coding/v3",
"apiKey": "${VOLCENGINE_API_KEY}",
"api": "openai-completions",
"models": [
{ "id": "ark-code-latest", "name": "ark-code-latest", ... },
{ "id": "doubao-seed-2.0-code", ... },
{ "id": "doubao-seed-2.0-pro", ... },
{ "id": "doubao-seed-2.0-lite", ... },
{ "id": "doubao-seed-code", ... },
{ "id": "minimax-m2.5", ... },
{ "id": "glm-4.7", ... },
{ "id": "deepseek-v3.2", ... },
{ "id": "kimi-k2.5", ... }
]
},
"siliconflow": {
"baseUrl": "https://api.siliconflow.cn/v1",
"apiKey": "${SILICONFLOW_API_KEY}",
"api": "openai-completions",
"models": [
{ "id": "Pro/zai-org/GLM-5", ... }
]
},
"ollama": {
"baseUrl": "http://host.docker.internal:11434/v1",
"apiKey": "ollama",
"api": "openai-completions",
"models": [
{ "id": "qwen2.5:3b", ... }
]
}
},
"agents": {
"defaults": {
"model": { "primary": "volcengine/ark-code-latest" },
"models": { ... },
"workspace": "/home/node/.openclaw/workspace",
"compaction": { "mode": "safeguard" },
"maxConcurrent": 4,
"subagents": { "maxConcurrent": 8 }
}
}
}
(上面我省略了每个模型的具体参数,实际使用可以直接复制原文中的完整 JSON)
配置网关
"gateway": {
"port": 18799,
"mode": "local",
"bind": "lan",
"controlUi": {
"allowedOrigins": ["http://localhost:18799", "http://127.0.0.1:18799"]
},
"auth": {
"mode": "token",
"token": "${OPENCLAW_TOKEN}"
},
"tailscale": {
"mode": "off",
"resetOnExit": false
}
}
修改配置生效
# 进入 openclaw-ja va-docker 目录
cd openclaw-ja va-docker
# 关闭所有服务
docker compose down
# 启动所有服务
docker compose up -d
# 访问 web ui 页面(默认端口 18789 改成了 18799)token 见 .env
open http://localhost:18799
运行示例
Docker 启动
启动成功后,用以下命令查看容器状态:
# 查看容器状态
docker ps | grep openclaw
# 查看日志
docker logs -f openclaw-ja va-docker
WebUI 页面
访问 http://localhost:18799 进入 OpenClaw 管理界面,输入 token(上面 .env 中配置的那个)。
概览页面
飞书开放平台创建应用
创建企业自建应用
访问飞书开放平台,创建一个企业自建应用。步骤很简单:
- 登录飞书开放平台
- 点击“创建企业自建应用”
- 填写应用名称和描述
- 创建完成后进入应用详情页
添加应用能力
权限管理
进入“权限管理”页面,添加需要的权限(建议按照列表全选,避免后续遗漏)。
{
"scopes": {
"tenant": [
"cardkit:card:read",
"cardkit:card:write",
"cardkit:template:read",
"contact:contact.base:readonly",
"contact:user.base:readonly",
"docx:document",
"docx:document.block:convert",
"docx:document:readonly",
"im:chat",
"im:chat.access_event.bot_p2p_chat:read",
"im:chat.announcement:read",
"im:chat.announcement:write_only",
"im:chat.managers:write_only",
"im:chat.members:bot_access",
"im:chat.members:read",
"im:chat.members:write_only",
"im:chat.menu_tree:read",
"im:chat.menu_tree:write_only",
"im:chat.moderation:read",
"im:chat.tabs:read",
"im:chat.tabs:write_only",
"im:chat.top_notice:write_only",
"im:chat.widgets:read",
"im:chat.widgets:write_only",
"im:chat:create",
"im:chat:delete",
"im:chat:moderation:write_only",
"im:chat:operate_as_owner",
"im:chat:read",
"im:chat:readonly",
"im:chat:update",
"im:message",
"im:message.group_at_msg:readonly",
"im:message.group_msg",
"im:message.p2p_msg:readonly",
"im:message.pins:read",
"im:message.pins:write_only",
"im:message.reactions:read",
"im:message.reactions:write_only",
"im:message.urgent",
"im:message.urgent.status:write",
"im:message:readonly",
"im:message:send_as_bot",
"im:message:send_multi_depts",
"im:message:send_multi_users",
"im:message:send_sys_msg",
"im:message:update",
"wiki:node:read",
"wiki:wiki",
"wiki:wiki:readonly"
],
"user": []
}
}
事件与回调
事件配置
订阅方式建议选择“使用长连接接收回调”,稳定又省心。
需要订阅的事件:
- 撤销拉用户进群 v2.0
im.chat.member.user.withdrawn_v1 - 消息被 reaction v2.0
im.message.reaction.created_v1 - 消息被取消 reaction v2.0
im.message.reaction.deleted_v1 - 接收消息 v2.0
im.message.receive_v1
回调配置
同样使用长连接接收回调。
需要添加的回调:
card.action.trigger- 卡片回传交互
版本管理与发布
- 进入“版本管理与发布”页面
- 点击“创建版本”
- 填写应用版本号(比如 1.0.0)
- 填写更新说明
- 保存并发布
凭证与基础信息
进入“凭证与基础信息”页面,获取 App ID 和 App Secret。
需要复制的信息:
- App ID:
cli_xxxxxxxxxxxx(应用唯一标识) - App Secret:应用密钥(用于 API 调用认证)
将拿到的 App ID 和 App Secret 配置到 config/openclaw.json 中:
"channels": {
"feishu": {
"enabled": true,
"appId": "cli_xxxxxxxxxxxx",
"appSecret": "xxxxxxxxxxxxxxxx",
"connectionMode": "websocket",
"domain": "feishu",
"groupPolicy": "allowlist",
"groupAllowFrom": ["oc_xxxxxxxxxxxxxxxx"],
"userPolicy": "allowlist",
"allowFrom": ["ou_xxxxxxxxxxxxxxxx"]
}
}
配置项说明:
enabled:是否启用飞书渠道appId:飞书应用的 App IDappSecret:飞书应用的 App SecretconnectionMode:连接模式,可选websocket或webhookgroupPolicy:群组策略,allowlist表示白名单模式groupAllowFrom:允许的群组 ID 列表(参考飞书组 ID 获取)userPolicy:用户策略,allowlist表示白名单模式allowFrom:允许的用户 ID 列表(参考验证飞书频道)
项目发布成功
openclaw 配置飞书频道
# 进入容器命令行
docker exec -it openclaw-ja va-docker /bin/bash
# 开启配置向导
openclaw onboard
启动配置向导
开始配置
选择 Yes,Enter 下一步。
配置模式
按图示,Enter 下一步。
使用已经存在的配置
按图示,Enter 下一步。
跳过模型配置
向下选择 Skip for now,Enter 下一步。
按提供者筛选模型
按图示,Enter 下一步。
默认模型
按图示,Enter 下一步。
选择飞书频道
按图示,Enter 下一步。
飞书频道插件安装
选择 Use local plugin path,Enter 下一步。
飞书频道应用密钥
复制对应的值,Enter 下一步。
飞书频道应用 ID
复制对应的值,Enter 下一步。
飞书频道模式
按图示,直接 Enter 下一步。
飞书频道域名
按图示,直接 Enter 下一步。
飞书频道组策略
按图示,直接 Enter 下一步。
飞书频道组 ID
先不填,直接 Enter 下一步。
配置完成,打开 config/openclaw.json 文件,会出现这个飞书插件配置:
"plugins": {
"load": {
"paths": ["/app/extensions/feishu"]
},
"entries": {
"feishu": {
"enabled": true
}
}
}
验证飞书频道
# 进入容器命令行
docker exec -it openclaw-ja va-docker /bin/bash
# 飞书频道授权
openclaw pairing approve feishu 配对码
ja va8 项目 AI 开发
将项目挂载到 openclaw 工作空间
cd openclaw-ja va-docker/workspace/ja va-projects
# 将项目放到 workspace/ja va-projects 目录下
创建项目模块的编译运行技能
直接在飞书机器人对话框输入类似下面的内容:
项目在 /home/node/.openclaw/workspace/ja va-projects 目录下
## 帮我编写 my-api 编译运行项目技能
cd my-app
mvn package -s=/home/node/.m2/settings.xml -pl my-api -am
cd my-api/target
ja va -jar my-api.jar -Dserver.port=8866 -Dspring.profiles.active=demo -Dnacos.config.server-addr=xx.xx.xx.xx:8848 -Dnacos.config.namespace=bef34f60-7aed-4466-b952-edfaab700888
curl http://localhost:8866/healthz
返回 {"msg": "success", "code": "0", "success": true}
程序启动成功
技能创建完后,进入 openclaw-ja va-docker/workspace/skills 目录,就能看到对应技能文件了。
启动项目模块
直接在飞书里告诉机器人:“帮我编译运行 my-api”
备注
飞书配置注意事项
- 应用发布:配置完成后必须发布应用版本,否则配置不会生效。
- 权限申请:添加权限后需要提交审核,通过后才能使用。
- Webhook 地址:如果使用 Webhook 模式,需要配置公网可访问的回调地址。
- 白名单配置:建议配置群组和用户白名单,限制机器人的使用范围。
- 安全建议:App Secret 等敏感信息建议通过环境变量注入,不要硬编码在配置文件中。
本地访问 pairing required
如果遇到 code=1008 reason=pairing required 错误,用以下步骤处理:
# 进入容器命令行
docker exec -it openclaw-ja va-docker /bin/bash
# 列举访问设备
openclaw devices list
# 复制设备的标识(例如 765ef259-937e-46ce-bbb1-02bcf0c3a7af)
# 授权设备
openclaw devices approve 765ef259-937e-46ce-bbb1-02bcf0c3a7af
飞书组 ID 获取
在创建的群组里添加群机器人,选择你创建的 bot。然后 @bot 打个招呼,比如“你好”。接着查看容器日志:
docker logs -f openclaw-ja va-docker
# 日志中会出现类似 oc_xxxxx 这样的字符串,那就是组 ID
示例输出:Feishu[default] message in group oc_xxxxx: 你好
配置默认模型
如果想使用本地模型,比如 ollama/qwen2.5:3b,编辑 config/openclaw.json,在 agents.defaults.model 里改成:
"agents": {
"defaults": {
"model": {
"primary": "ollama/qwen2.5:3b"
},
...
}
}


























