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 环境变量

  • 有效的 VOLCENGINE_API_KEY(火山引擎,参考官方网站
  • 有效的 SILICONFLOW_AK(硅基流动,参考官方网站
# 火山引擎 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_start

启动成功后,可以通过以下命令查看容器状态:

# 查看容器状态
docker ps | grep openclaw

# 查看日志
docker logs -f openclaw-java-docker

WebUI页面

访问 http://localhost:18799 进入OpenClaw管理界面:
输入 token 2fe7015f25e6d6018983e2875f332b50176070dd029391cj

openclaw_login

概览页面

openclaw_home

飞书开放平台创建应用

创建企业自建应用

访问 飞书开放平台 创建企业自建应用。

  1. 登录飞书开放平台
  2. 点击"创建企业自建应用"
  3. 填写应用名称和描述
  4. 创建完成后进入应用详情页

添加应用能力

应用能力

权限管理

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

权限管理

需要的权限列表

{
  "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. 进入"版本管理与发布"页面
  2. 点击"创建版本"
  3. 填写应用版本号(如:1.0.0)
  4. 填写更新说明
  5. 保存并发布

凭证与基础信息

进入"凭证与基础信息"页面,获取App ID和App Secret:

凭证与基础配置_masked

需要复制的信息

  • App IDcli_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 ID
  • appSecret:飞书应用的App Secret
  • connectionMode:连接模式,可选websocketwebhook
  • groupPolicy:群组策略,allowlist表示白名单模式
  • groupAllowFrom:允许的群组ID列表(参考飞书组ID获取
  • userPolicy:用户策略,allowlist表示白名单模式
  • allowFrom:允许的用户ID列表(参考验证飞书频道

项目发布成功

应用发布成功

openclaw 配置飞书频道

# 进入容器命令行
docker exec -it openclaw-java-docker /bin/bash
# 开启配置向导
openclaw onboard 

启动配置向导

启动配置向导

开始配置

选择Yes,Enter 下一步。

开始配置

配置模式

按图示,Enter 下一步。

配置模式_quickstart

使用已经存在的配置

按图示,Enter 下一步。

use_exist_val

跳过模型配置

向下选择Skip for now,Enter 下一步。

model_skip

按提供者筛选模型

按图示,Enter 下一步。

filter_model_by_provider

默认模型

按图示,Enter 下一步。

default_model

选择飞书频道

按图示,Enter 下一步。

feishu_channel

飞书频道插件安装

选择Use local plugin path,Enter 下一步。

飞书插件

飞书频道应用密钥

复制对应的值,Enter 下一步。

feishu_app_secret

飞书频道应用ID

复制对应的值,Enter 下一步。

feishu_app_id

飞书频道模式

按图示,直接Enter 下一步。

feishu_mode

飞书频道域名

按图示,直接Enter 下一步。

feishu_domain

飞书频道组策略

按图示,直接Enter 下一步。

feishu_group_allow

飞书频道组ID

先不填,直接Enter 下一步。

feishu_group_id

配置完成,打开config/openclaw.json文件,会出现这个飞书插件配置

 "plugins": {
    "load": {
      "paths": [
        "/app/extensions/feishu"
      ]
    },
    "entries": {
      "feishu": {
        "enabled": true
      }
    }
  }

验证飞书频道

飞书验证_masked

# 进入容器命令行
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目录下

创建项目模块的编译运行技能

编写模块编译技能_masked

直接在飞书机器人对话框输入

项目在/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

启动模块_masked

备注

飞书配置注意事项

  1. 应用发布:配置完成后必须发布应用版本,否则配置不会生效
  2. 权限申请:添加权限后需要提交审核,通过后才能使用
  3. Webhook地址:如使用Webhook模式,需要配置公网可访问的回调地址
  4. 白名单配置:建议配置群组和用户白名单,限制机器人的使用范围
  5. 安全建议: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"
      },
posted @ 2026-03-18 09:10  云婷  阅读(51)  评论(0)    收藏  举报