Skip to main content

打包部署

本文将详细介绍平台打包及部署.

打包

驱动打包就是将开发完成的程序打包为可以在平台部署的驱动. 平台自身支持运行在 windowslinuxmacOS 系统中, 并且支持 x86arm 平台. 在 windows 系统中平台服务和驱动程序都是直接运行在操作系统中, 而在 linux 系统中是以 容器 的方式运行, 平台中的每个服务和驱动程序都是一个独立的容器, 所以针对不同的操作系统打包方式也不相同. 下面分别介绍在 windowslinux 系统中如何打包驱动, 对于不同平台只需要保证使用软件和库支持即可.

windows系统打包

windows 系统中, 驱动程序是直接运行在操作系统中, 所以需要将驱动程序打包. 具体打包步骤如下:

  1. Node 驱动为例打程序程序和相关资源打包为 .js 文件. 由于包含很多依赖库,所以首先安装 @vercel/ncc 编译工具,执行下面的命令进行安装:
npm i -g @vercel/ncc

项目执行下面的命令进行编译:

ncc build index.js -o dist -m
  1. 准备驱动配置文件 config.json. 可以将 config.json 放在与 编译后的文件index.js 文件相同目录下, 这样驱动在启动时会自动加载该配置文件.
info

注: config.json 中需要填写好 驱动ID驱动名称 两个配置项, 参考驱动文档.

  1. 准备驱动安装配置文件 service.yml . 在平台中安装驱动时, 需要提供一些驱动的基本信息, 例如: 版本号、驱动描述、端口号等. 这些信息需要在 service.yml 中定义, 平台会根据该文件中的配置信息进行安装. service.yml 的具体格式如下:
Name: driver-mqtt-demo
Description: 测试程序
Version: 4.0.0
ConfigType: config.json
GroupName: driver
Command: node index.js --config config.json
  1. 将所有资源打包为 zip 文件.

index.jsconfig.jsonservice.ymldriver.protoschema.js 和其它资源打包为 zip 文件, 平台会根据该文件进行安装. 建议打包后的 zip 文件结构如下:

目录结构

linux系统打包

由于在 linux 系统中, 驱动程序是以 容器 的方式运行, 所以打包时需要先将驱动程序打包为 docker 镜像. 然后再将镜像文件和 service.yml 打包为 .tar.gz 压缩包. 具体打包步骤如下:

  1. 打包程序程序打包为 index.js 文件. 具体打包步骤参考 windows系统打包 中的第一步. 需要注意的是, 在 linux 系统打包中, 不要求包含驱动配置文件 config.json`.
  1. 准备 Dockerfile 文件. 以下是一个简单的 Dockerfile 文件示例, 具体内容根据自身的需求进行修改:
FROM node:18.17.1-alpine3.17
WORKDIR /app
ADD dist/* /app/
ENTRYPOINT [ "node", "index.js" ]
  1. 构建 docker 镜像.

使用上一步中的 Dockerfile 文件构建 docker 镜像, 具体命令如下:

docker build -t airiot/node-driver-example:v4.0.0 .
  1. 导出 docker 镜像并压缩.
docker save airiot/node-driver-example:v4.0.0 | gzip > node-driver-example.tar.gz
  1. 准备驱动安装配置文件 service.yml . 该文件的格式与 windows系统打包 中的第三步中的 service.yml 文件格式相似但又有区别. 具体格式如下:
# 必填项. 驱动名称
Name: node-driver-example
# 必填项. 例如: 1.0.0, 通常用镜像版本号一致
Version: 4.0.0
# 非必填项.
Description: 描述信息
# 必填项. 驱动固定为 driver、流程插件、算法服务为 server
GroupName: driver
# 容器端口映射类型, 非必填项. 如果驱动需要对外提供 rest 服务, 或暴露端口时, 需要填写该配置项.
# 可选项有 None Internal External
#
# None: 不暴露端口
# Internal: 只在平台内部暴露端口. 一般为驱动对外提供 rest 服务时, 将端口映射到网关上, 填写为 Internal 即可.
# External: 对外暴露端口. 一般为驱动为作 server 端, 需要对外暴露端口以供设备连接, 此时该端口会暴露在宿主机上, 填写为 External 即可.
Service: Node
# 非必填项. 暴露的端口列表
#Ports:
# - Host: "8558" # 映射到宿主机的端口号, 如果不填写, 则会随机分配一个端口号
# Container: "8558" # 容器内部的端口号, 即驱动服务监听的端口号
# Protocol: "" # 协议类型, 可选项有 TCP UDP, 如果不填写, 则默认为 TCP
  1. 将所有资源打包为 gzip 文件. 将 docker镜像service.yml 文件打包为 gzip 文件. 打包命令如下:
tar cvf node-driver-example.tar node-driver-example.tar.gz service.yml
gzip node-driver-example.tar

打包后的 gzip 文件结构如下:

目录结构

info

linux 系统整个打包过程对应的命令如下所示:

# 将驱动打包为镜像
docker build -t airiot/node-driver-example:v4.0.0 .

# 导出镜像并压缩
docker save airiot/node-driver-example:v4.0.0 | gzip > node-driver-example.tar.gz

# 将镜像文件和 service.yml 打包
tar cvf node-driver-example.tar node-driver-example.tar.gz service.yml

# 对整个驱动包进行压缩
gzip node-driver-example.tar

# 最后得到 node-driver-example.tar.gz 压缩文件

部署

将上一步骤中得到的驱动安装包通过 运维管理系统 上传到平台, 平台会自动解析并安装驱动. 安装成功后, 就可以在项目中使用该驱动了.

安装驱动

  1. 登录 运维管理系统, 运维管理系统的默认登录地址为 http://IP:13030/, 将 IP 换成平台地址即可.
  2. 点击左侧菜单栏中的 服务管理 选项, 进入服务管理页面.
  3. 点击页面右上角的 离线上传驱动 按钮, 选择上一步中得到的 node-driver-example.tar.gz 文件, 点击 确定 按钮, 平台会自动解析并安装驱动.

离线上传驱动

如果驱动安装失败, 可以在 运维管理系统首页 中查看详细的日志信息.

驱动安装日志

info

不同版本的平台, 离线上传驱动 按扭的位置可能不同.

使用驱动

当驱动成功安装到平台后, 就可以在项目中使用该驱动了.

具体使用方法请参考 驱动管理.

info

注: 需要将运维服务的 InternetAccess 改为false, 才能读取本地仓库