1. 使用上云 API 2 二次开发 Demo
上云 API 2 说明文档(KOC3)
  • 快速开始
  • 申请许可证
  • 联系我们
  • 软件下载
  • 使用上云 API 2 设备模拟器
  • 鉴权接入指南
  • 部署上云 API 2 应用运行与设备管控底座
    • 部署指南
    • 部署前准备
    • 开始部署
    • 能力扩展
  • 设备上云
    • 设备上云
    • 设备固件版本
  • 集成前端独立组件
    • 集成指南
    • 驾驶舱和设备小窗
    • 驾驶舱模块化配置
    • 设备管理组件
    • 航线组件
    • 直播大屏
    • 飞行记录
    • 集成参考
    • PaasJS 新增特性
  • SDK 文档
    • 基本介绍
      • SDK 简介
      • 功能特性
    • 快速入门
      • 准备工作
      • 使用流程
    • 接口调用
      • 接口调用时序图
    • SDK API 文档
      • 使用 API 文档查阅接口详情
    • SDK版本迁移指南
      • 迁移概述
      • 新增方法详情
      • API 变更详情
      • 迁移操作步骤
    • 功能集合
      • SDK初始化
      • SDK配置
      • DRC链路
      • 飞机状态监听
      • 飞向目标点
      • 飞行参数设置
      • 飞行记录导出
      • POI 环绕飞行
      • 一键起飞
      • 航线任务管理
      • 航线任务控制
      • 航线资产管理
      • 机场状态监听
      • 控制权管理
      • 机场控制
      • 飞行控制
      • AI Box 管理
      • AI 智能告警
      • 机载 AI 控制
      • 机载 AI 算法管理
      • PSDK 控制
      • PSDK 资源管理
      • RTK 标定
      • 安全服务
      • 固件管理
      • 媒体服务
      • 日志管理
      • 三维重建
      • 设备管理
      • 设备保修维护
      • 设备健康管理
      • 设备远程调试
      • 设备在线状态
      • 相机控制
      • 直播录制
      • 直播设备管理
      • 直播视频流
      • 直播同步
      • 中继器控制
      • 自定义 SEI
      • WHEP 自定义拉流
      • 网络测速
      • 地图元素管理
      • 频闪灯配置
  • 使用上云 API 2 AI Plugin
    • 上云 API 2 AI Plugin 使用指南
  • 使用上云 API 2 二次开发 Demo
    • 上云 API 2 二次开发 Demo 部署指南
    • 上云 API 2 二次开发 Demo - 无人机管理平台使用说明
  • 排障指南
    • 前端独立组件排障指南
    • SDK排障指南
  1. 使用上云 API 2 二次开发 Demo

上云 API 2 二次开发 Demo 部署指南

为了帮助开发者更快上手上云 API 2,上云 API 2 为开发者提供了二次开发 Demo - 上云 API 2 无人机管理平台。
本文档说明如何将上云 API 2 无人机管理平台(Spring Boot 后端 + Vue 3 前端 + MySQL)部署到自有环境。交付形态为源码,需要由开发者自行构建与运行。
下载上云 API 2 无人机管理平台源码。
上云 API 2 开发 Demo(下文简称 skeleton)支持三种部署形态,按规模自选:
形态适用场景复杂度前置依赖
普通机器单机/小规模,已有物理机或虚拟机中JDK17、MySQL8、nginx、systemd
Docker Compose单机容器化,便于迁移与版本管理低Docker 24+、Docker Compose v2
Kubernetes生产级高可用、多副本、弹性伸缩高K8s 集群、镜像仓库
推荐路径:安装部署 AI Plugin 后基于 AI 引导完成,无需逐节阅读。

1. 概览#

1.1 架构#

                    ┌──────────────┐
   用户 ──80/443──▶ │  fh-ui       │  Nginx + Vue 3 dist(端口 80)
                    └──────┬───────┘
                           │ /pf-devkit/ai-plugin/skeleton/* → proxy
                           ▼
                    ┌──────────────┐
                    │  skeleton    │  Spring Boot(端口 8080,context-path=/pf-devkit/ai-plugin/skeleton)
                    └──────┬───────┘
                           │
              ┌────────────┼────────────┐
              ▼                         ▼
        ┌──────────┐            ┌──────────────┐
        │  mysql   │            │  MCP Server  │(独立部署,Chat 启用时需要)
        └──────────┘            └──────────────┘
组件端口(容器内)说明
fh-ui80前端 Nginx,托管 Vue 3 静态资源,反代后端 API
skeleton8080后端 Spring Boot,context-path /pf-devkit/ai-plugin/skeleton
mysql3306MySQL 8.0,用户模块持久化
MCP Server8080独立部署,Chat 功能依赖(可选)

1.2 平台限制#

SDK JNI 原生库仅支持 Linux x86_64(amd64)。后端需运行在 amd64 平台(Docker/K8s 均要求,普通机器要求 Linux x86_64)。
macOS/Windows 仅能运行 mock 模式(不加载原生库),用于本地开发/演示。

1.3 外部依赖#

依赖必需说明
MySQL 8.0+是用户模块持久化(t_user 表)
FlightHub PaaS(SDK)sdk profile 必需FH_SKELETON_SDK_* 连接参数
MCP Server否(Chat 启用时是)FH_CHAT_MCP_URL 指向
Spring AI Provider否Chat 功能用,不配则 Chat 不可用

2. 前置准备#

2.1 获取源码#

下载上云 API 2 无人机管理平台源码

2.2 安装构建工具#

工具版本用途
JDK17+后端编译运行
Maven3.8+后端构建
Node.js18+前端构建
使用 §3 AI 辅助部署时,Skill 会自动检测工具环境并引导安装缺失项。

3. 【推荐】AI 辅助部署#

快速完成部署:安装部署 Skill 后,AI 会根据你的环境自动引导完成构建、配置、启动、验证全流程——无需逐节阅读本文档。

3.1 安装部署 Skill#

方式 A:Plugin 一键安装(推荐,需 Claude Code >= 1.0)#

方式 B:手动配置 settings.json#

编辑 ~/.claude/settings.json,添加:
{
  "enabledPlugins": {
    "cloudapi2@dji": true
  },
  "extraKnownMarketplaces": {
    "cloud-api2": {
      "source": {
        "source": "directory",
        "path": "/path/to/dji-cloudapi2-skills"  // 替换为仓库绝对路径
      }
    }
  }
}

方式 C:手动拷贝(仅部署 Skill)#

3.2 启动 AI 引导部署#

新开 Claude Code 会话,在 skeleton 项目目录下输入:
帮我把 skeleton 部署到 Docker Compose
或根据你的目标替换:
目标对话示例
Docker 单机"帮我部署 skeleton 到 Docker"
普通机器"帮我在这台 Linux 服务器上部署 skeleton"
Kubernetes"帮我部署 skeleton 到 K8s 集群"
本地体验"帮我本地 mock 模式跑起来"
AI 会自动:
1.
检查前置条件(源码、构建工具、SDK JAR)
2.
引导你填写必要配置(密钥、SDK 凭据、数据库密码)
3.
执行构建与部署命令
4.
验证服务健康状态
5.
遇到问题时自动排障

3.3 验证 Skill 已生效#

如果 AI 回复中提到"三种部署形态"、"FH_JWT_SECRET 必填"、"sdk-real profile"等内容,说明 cloudapi2-skeleton-deploy Skill 已成功加载。
不用 AI? 继续阅读 §4 的手动部署步骤。

4. 手动部署#

以下按三种部署形态分节说明。选择适合你环境的形态,跳过其余。

4.1 普通机器(JDK + MySQL + nginx + systemd)#

适用:单台 Linux x86_64 物理机/虚拟机。无需 Docker。

安装私有 SDK JAR(构建机一次性操作)#

libs/flight-hub-sdk-3.1.1.jar 不在任何远端仓库,在构建机上首次 Maven 编译前需手动安装到本地仓库:
Docker/K8s 部署无需此步——Dockerfile 多阶段构建已内置 JAR 安装。

安装运行时与依赖#

构建#

Maven Profile:生产部署必须 -Psdk-real,否则打包的是 mock 实现。

生成密钥与密码#

初始化数据库#

首次启动后 JPA ddl-auto=update 会自动建表。生产建议改用 validate + 迁移脚本管理 schema。

部署后端#

配置环境变量并注册 systemd#

部署前端并配置 nginx#

验证#


4.2 Docker Compose#

适用:单机容器化,首选推荐,镜像由您自行构建。

构建并推送镜像#

平台:后端镜像需 --platform linux/amd64(SDK native lib 仅 amd64)。Apple Silicon 加 DOCKER_DEFAULT_PLATFORM=linux/amd64。

配置 .env#

启动#

验证#

快速开始(本地 mock)#

零配置本地启动(mock 模式,无需真 SDK):

4.3 Kubernetes#

适用:生产级高可用、多副本、弹性伸缩。Manifest 位于 skeleton/deploy/k8s/。

准备镜像#

构建方式与 Docker Compose 相同(见 §4.2),推送到集群可拉取的私有仓库。

编辑 Secret 与 ConfigMap#

应用#

验证#

TLS 与域名(可选)#

编辑 08-ingress.yaml,将 tls: 块取消注释并填充 tls-secret,host 替换为实际域名。

滚动升级与回滚#

5. MCP Server 部署(Chat功能依赖,可选)#

5.1 为什么需要#

skeleton 的 AI ChatBot 通过 MCP(Model Context Protocol)调用 FlightHub 工具能力。启用 Chat 时,FH_CHAT_MCP_URL 必须指向一个已部署的 MCP Server。MCP Server 独立部署(不随 skeleton compose 栈启动)。

5.2 Docker 形态#

验证:curl -f http://<mcp-host>:8080/pf-devkit/ai-plugin/mcp/health

5.3 K8s 形态#

GLIBC_TUNABLES=glibc.rtld.execstack=2 解决 glibc 2.39+ 拒绝 execstack .so 的问题。生产 Secret 化敏感变量。

5.4 与 skeleton 联调#

skeleton 变量值
FH_CHAT_MCP_URLhttp://<mcp-service>:8080(K8s 用 http://fh-mcp:8080)
FH_CHAT_MCP_AUTH_TOKEN与 MCP Server 的 FH_SSE_AUTH_TOKEN 一致
FH_CHAT_ENABLEDtrue
启用 Chat 后需同时配置 Spring AI Provider API Key(SPRING_AI_OPENAI_API_KEY 等)。

6. 环境变量全表#

6.1 后端必填#

变量默认说明
FH_JWT_SECRET无JWT HS256 密钥,至少 32 字节,未配启动失败
FH_DB_URLjdbc:mysql://localhost:3306/fh_skeleton...数据库 JDBC URL
FH_DB_USERNAMEroot数据库用户
FH_DB_PASSWORD无数据库密码
FH_SKELETON_SDK_TOKEN—SDK 身份令牌(sdk profile)
FH_SKELETON_SDK_ADDRESS—SDK 服务地址
FH_SKELETON_SDK_NOTIFICATION_SERVER—SDK 通知服务地址

6.2 后端可选#

变量默认说明
SPRING_PROFILES_ACTIVE / FH_SKELETON_PROFILEsdksdk / mock
FH_SKELETON_PORT8080后端端口
FH_SKELETON_SDK_PORT443SDK 端口
FH_DDL_AUTOupdateJPA DDL 策略,生产建议 validate
FH_CHAT_ENABLEDfalse是否启用 Chat
FH_CHAT_MCP_URL—MCP Server 地址(Chat 启用时必填)
FH_CHAT_MCP_AUTH_TOKEN—MCP 鉴权 token
FH_CHAT_PROVIDERopenaiopenai / anthropic
FH_CHAT_MODELdeepseek-v4-flash主模型
SPRING_AI_OPENAI_API_KEY—OpenAI 兼容 API Key
SPRING_AI_ANTHROPIC_API_KEY—Anthropic API Key

6.3 前端#

变量默认说明
VITE_FH2_ADDRESS—FH2 服务器地址(含协议,不含端口)
VITE_FH2_PORT30812FH2 端口
VITE_FH2_WSS_URL—FH2 WebSocket 通知地址
VITE_FH2_PRJ_ID—FH2 项目 ID
VITE_DEFAULT_THEMElightlight / dark
VITE_PRIMARY_COLOR#1a73e8品牌主色
VITE_MOCK_ENABLEDfalse是否显示 Mock 调试面板
VITE_MAP_PROVIDEResriesri/osm/bing/tianditu
VITE_BING_KEY—Bing 地图 key(运行时注入,勿 build-arg)
VITE_TIANDITU_KEY—天地图 key(同上)

7. 升级与回滚#

7.1 普通机器#

7.2 Docker#

7.3 Kubernetes#

数据库 schema 演进由 JPA ddl-auto=update 自动加列(不删列/改类型)。生产建议改 validate + Flyway/Liquibase。

8. 常见问题与故障排查#

8.1 常见问题#

问题排查
启动失败:JWT 未配置FH_JWT_SECRET 必填(至少 32 字节)。openssl rand -hex 32
启动失败:SDK initializesdk profile 下 FH_SKELETON_SDK_TOKEN/ADDRESS/NOTIFICATION_SERVER 是否完整;构建是否用了 -Psdk-real
.so 加载失败native lib 系统依赖缺失(libssl1.1 等);非 amd64 平台
设备不出现mock 模式等 3-4s 自动上线;sdk 模式查日志
Chat 不可用FH_CHAT_ENABLED=true?FH_CHAT_MCP_URL 可达?API Key 配置?
前端地图不显示VITE_MAP_PROVIDER 与 key 不匹配(bing/tianditu 需 key)
前端 404静态产物未部署或路径不对(SPA fallback 未生效)
SSE 被 nginx buffer反代需 proxy_buffering off + 300s 超时
docker build 很慢首次需 mvn 下载依赖(~10min),后续利用 layer cache
镜像太大(~700MB)SDK native lib 占 404MB,无法压缩
macOS ARM64 platform 错误docker-compose.yml 加 platform: linux/amd64

8.2 故障排查#

日志查看:
健康检查端点:
端点认证响应
GET /pf-devkit/ai-plugin/skeleton/actuator/health否{"status":"UP"}
GET /pf-devkit/ai-plugin/skeleton/actuator/info否应用信息
故障定位:
现象定位
后端起不来先查 JWT(必填)→ 再查 DB 连通 → 再查 SDK 凭据
健康检查超时SDK native lib 加载慢,放大 initialDelaySeconds/start_period
MySQL 初始化脚本没执行数据卷已有数据时 /docker-entrypoint-initdb.d/ 不执行;清空卷后重启

9. 清理部署(卸载)#

清理 = 停止服务 + 移除运行态资源 + 按需删除数据。三形态命令互不影响,按实际部署形态选择。
危险操作确认原则:删除数据(数据卷 / PVC / 数据库)、删除镜像、删除 systemd unit 与配置目录均为不可逆操作,执行前必须与用户确认是否保留数据。

9.0 清理前准备#

决策点(必须先与用户确认):
保留数据:只停服务与移除运行态资源,不删数据卷 / PVC / 数据库
清除数据:追加执行删除数据卷 / PVC / 数据库的命令(不可逆)
建议先记录当前资源清单,便于核对清理结果:

9.1 普通机器(JDK + MySQL + nginx + systemd)#

9.2 Docker Compose#

注:skeleton/docker/docker-compose.yml 内置 skeleton + fh-ui 两服务;mysql 容器与 mysql-data 命名卷在 skeleton/deploy-compose.yml(deploy.sh 同步远端为 docker-compose.yml)。
down 只移除容器与默认网络,不删除命名卷 mysql-data;down -v 才会删除卷与其中数据。

9.3 Kubernetes#

kubectl delete namespace fh-skeleton 会级联删除该命名空间下的 全部 资源(含 PVC、Secret、ConfigMap)。仅需"停止保留数据"时,systemd/Docker 形态可选择性保留数据卷;K8s 的持久数据在 PVC(按 storageClass 默认 ReclaimPolicy=Delete 可能一并回收,按集群配置确认)。

附录 A:常用命令#


上一页
上云 API 2 AI Plugin 使用指南
下一页
上云 API 2 二次开发 Demo - 无人机管理平台使用说明
Built with