OpenClaw 部署实战:Java 8 AI 编程助手(飞书)
OpenClaw 部署实战:Java 8 AI 编程助手(飞书)
关键词:OpenClaw、Docker 部署、Java 8、Maven、飞书集成、AI 编程助手
本文档详细介绍如何使用 Docker 部署 OpenClaw 开发环境,支持 Java 8 应用程序开发的完整实战案例。可通过飞书等渠道进行交互。
安装准备
目录结构
openclaw-java-docker/
├── .env # 环境变量配置
├── docker-compose.yml # Docker Compose 编排文件
├── config/ # OpenClaw 配置文件目录
│ └── openclaw.json # 主配置文件
├── logs/ # 日志目录
├── java/ # Java 环境目录
│ ├── maven-3.6.3/ # Maven 构建工具
│ │ └── bin/ # Maven 可执行文件
│ ├── jdk8/ # JDK 8
│ │ └── bin/ # Java 可执行文件
│ └── settings.xml # Maven 仓库配置文件
├── repository/ # Maven 本地仓库
└── workspace/ # 工作空间目录
├── java-projects/ # Java 本地项目目录
│ └── my-app/ # 示例项目
└── skills/ # OpenClaw 生成的技能目录
下载 JDK 8 和 Maven
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)
Maven 3.6.3
下载地址:
wget https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
解压并配置
# 创建目录
mkdir -p openclaw-java-docker/java
# 解压 JDK
tar -xzf OpenJDK8U-jdk_aarch64_linux_hotspot_8u422b05.tar.gz -C openclaw-java-docker/java/
mv openclaw-java-docker/java/jdk8u422-b05 openclaw-java-docker/java/jdk8
# 解压 Maven
tar -xzf apache-maven-3.6.3-bin.tar.gz -C openclaw-java-docker/java/
mv openclaw-java-docker/java/apache-maven-3.6.3 openclaw-java-docker/java/maven-3.6.3
创建项目目录
将准备好的相关文件存放到 openclaw-java-docker 目录:
mkdir -p openclaw-java-docker/{config,logs,workspace/java-projects,repository}
cd openclaw-java-docker
# settings.xml 存放在 java 目录下
Docker部署
docker-compose.yml配置
version: "3.9"
services:
openclaw-gateway:
image: alpine/openclaw:2026.3.12
container_name: openclaw-java-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}
JAVA_HOME: /usr/local/java/jdk8
PATH: /usr/local/java/maven-3.6.3/bin:/usr/local/java/jdk8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAVEN_HOME: /usr/local/java/maven-3.6.3
volumes:
- ./config:/home/node/.openclaw
- ./workspace:/home/node/.openclaw/workspace
- ./workspace/java-projects:/home/node/.openclaw/workspace/java-projects
- ./java/jdk8:/usr/local/java/jdk8:ro
- ./java/maven-3.6.3:/usr/local/java/maven-3.6.3:ro
- ./java/settings.xml:/home/node/.m2/settings.xml:ro
- ./repository:/home/node/.m2/repository
- ./logs:/home/node/.openclaw/logs
command: >
sh -c "
echo '=== 验证 Java 环境 ===' &&
/usr/local/java/jdk8/bin/java -version &&
/usr/local/java/maven-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 环境变量
# 火山引擎 API Key
VOLCENGINE_API_KEY=xxxxx
# OpenClaw 访问令牌 改成自己的
OPENCLAW_TOKEN=2fe7015f25e6d6018983e2875f332b50176070dd029391cj
# 硅基流动api key
SILICONFLOW_API_KEY=sk-xxxx
docker启动
# 进入openclaw-java-docker目录
cd openclaw-java-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",
"api": "openai-completions",
"reasoning": false,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 32000
},
{
"id": "doubao-seed-2.0-code",
"name": "doubao-seed-2.0-code",
"api": "openai-completions",
"reasoning": false,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 128000
},
{
"id": "doubao-seed-2.0-pro",
"name": "doubao-seed-2.0-pro",
"api": "openai-completions",
"reasoning": false,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 128000
},
{
"id": "doubao-seed-2.0-lite",
"name": "doubao-seed-2.0-lite",
"api": "openai-completions",
"reasoning": false,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 128000
},
{
"id": "doubao-seed-code",
"name": "doubao-seed-code",
"api": "openai-completions",
"reasoning": false,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 32000
},
{
"id": "minimax-m2.5",
"name": "minimax-m2.5",
"api": "openai-completions",
"reasoning": false,
"input": [
"text"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 128000
},
{
"id": "glm-4.7",
"name": "glm-4.7",
"api": "openai-completions",
"reasoning": false,
"input": [
"text"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 128000
},
{
"id": "deepseek-v3.2",
"name": "deepseek-v3.2",
"api": "openai-completions",
"reasoning": false,
"input": [
"text"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 32000
},
{
"id": "kimi-k2.5",
"name": "kimi-k2.5",
"api": "openai-completions",
"reasoning": false,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 32000
}
]
},
"siliconflow": {
"baseUrl": "https://api.siliconflow.cn/v1",
"apiKey": "${SILICONFLOW_API_KEY}",
"api": "openai-completions",
"models": [
{
"id": "Pro/zai-org/GLM-5",
"name": "Pro/zai-org/GLM-5",
"api": "openai-completions",
"reasoning": false,
"input": [
"text"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 32000
}
]
},
"ollama": {
"baseUrl": "http://host.docker.internal:11434/v1",
"apiKey": "ollama",
"api": "openai-completions",
"models": [
{
"id": "qwen2.5:3b",
"name": "qwen2.5:3b",
"api": "openai-completions",
"reasoning": false,
"input": [
"text"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 32768,
"maxTokens": 4096
}
]
}
}
},
"agents": {
"defaults": {
"model": {
"primary": "volcengine/ark-code-latest"
},
"models": {
"volcengine/ark-code-latest": {},
"volcengine/doubao-seed-2.0-code": {},
"volcengine/doubao-seed-2.0-pro": {},
"volcengine/doubao-seed-2.0-lite": {},
"volcengine/doubao-seed-code": {},
"volcengine/minimax-m2.5": {},
"volcengine/glm-4.7": {},
"volcengine/deepseek-v3.2": {},
"volcengine/kimi-k2.5": {},
"siliconflow/MiniMax-M2.5": {},
"ollama/qwen2.5:3b": {}
},
"workspace": "/home/node/.openclaw/workspace",
"compaction": {
"mode": "safeguard"
},
"maxConcurrent": 4,
"subagents": {
"maxConcurrent": 8
}
}
},
配置网关
"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-java-docker目录
cd openclaw-java-docker
# 关闭所有服务
docker compose down
# 启动所有服务
docker compose up -d
# 访问web ui页面 (默认端口 18789 改成了 18799) token 2fe7015f25e6d6018983e2875f332b50176070dd029391cj
open http://localhost:18799
运行示例
Docker启动

启动成功后,可以通过以下命令查看容器状态:
# 查看容器状态
docker ps | grep openclaw
# 查看日志
docker logs -f openclaw-java-docker
WebUI页面
访问 http://localhost:18799 进入OpenClaw管理界面:
输入 token 2fe7015f25e6d6018983e2875f332b50176070dd029391cj

概览页面

飞书开放平台创建应用
创建企业自建应用
访问 飞书开放平台 创建企业自建应用。
- 登录飞书开放平台
- 点击"创建企业自建应用"
- 填写应用名称和描述
- 创建完成后进入应用详情页
添加应用能力

权限管理
进入"权限管理"页面,添加以下权限:

需要的权限列表:
{
"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-java-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-java-docker /bin/bash
# 飞书频道授权
openclaw pairing approve feishu 配对码
java8项目AI开发
将项目挂载openclaw工作空间
cd openclaw-java-docker/workspace/java-projects
#将项目放到workspace/java-projects目录下
创建项目模块的编译运行技能

直接在飞书机器人对话框输入
项目在/home/node/.openclaw/workspace/java-projects目录下
## 帮我编写my-api编译运行项目技能
cd my-app
mvn package -s=/home/node/.m2/settings.xml -pl my-api -am
cd my-api/target
java -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-java-docker/workace/skills目录,会有对应技能生成。
启动项目模块
帮我编译运行 my-api

备注
飞书配置注意事项
- 应用发布:配置完成后必须发布应用版本,否则配置不会生效
- 权限申请:添加权限后需要提交审核,通过后才能使用
- Webhook地址:如使用Webhook模式,需要配置公网可访问的回调地址
- 白名单配置:建议配置群组和用户白名单,限制机器人的使用范围
- 安全建议:App Secret等敏感信息建议通过环境变量注入,不要硬编码在配置文件中
本地访问 pairing required
code=1008 reason=pairing required
解决
# 进入容器命令行
docker exec -it openclaw-java-docker /bin/bash
# 列举访问设备
openclaw devices list
# 复制设备的标识
765ef259-937e-46ce-bbb1-02bcf0c3a7af
# 授权设备
openclaw devices approve 765ef259-937e-46ce-bbb1-02bcf0c3a7af
飞书组ID获取
在创建的群组里面,添加群机器人,选择yt-openclaw-bot,配置完。
@yt-openclaw-bot 你好
docker logs -f openclaw-java-docker
# 查看日志 oc_xxxxx就是组ID
Feishu[default] message in group oc_xxxxx: 你好
配置默认模型
比如使用本地模型 ollama/qwen2.5:3b
编辑 config/openclaw.json:
"agents": {
"defaults": {
"model": {
"primary": "ollama/qwen2.5:3b"
},

浙公网安备 33010602011771号