打包部署
本文将详细介绍平台打包及部署.
打包
驱动打包就是将开发完成的程序打包为可以在平台部署的驱动. 平台自身支持运行在 windows
、linux
和 macOS
系统中, 并且支持 x86
和 arm
平台.
在 windows
系统中平台服务和驱动程序都是直接运行在操作系统中, 而在 linux
系统中是以 容器
的方式运行, 平台中的每个服务和驱动程序都是一个独立的容器, 所以针对不同的操作系统打包方式也不相同. 下面分别介绍在 windows
和 linux
系统中如何打包驱动, 对于不同平台只需要保证使用软件和库支持即可.
windows系统打包
在 windows
系统中, 驱动程序是直接运行在操作系统中, 所以需要将驱动程序打包. 具体打包步骤如下:
- 以
Node
驱动为例打程序程序和相关资源打包为.js
文件. 由于包含很多依赖库,所以首先安装@vercel/ncc
编译工具,执行下面的命令进行安装:
npm i -g @vercel/ncc
项目执行下面的命令进行编译:
ncc build index.js -o dist -m
- 准备驱动配置文件
config.json
. 可以将config.json
放在与编译后的文件index.js
文件相同目录下, 这样驱动在启动时会自动加载该配置文件.
注: config.json
中需要填写好 驱动ID
和 驱动名称
两个配置项, 参考驱动文档.
- 准备驱动安装配置文件
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
- 将所有资源打包为
zip
文件.
将 index.js
、config.json
、service.yml
、driver.proto
、schema.js
和其它资源打包为 zip
文件, 平台会根据该文件进行安装. 建议打包后的 zip
文件结构如下:
linux系统打包
由于在 linux
系统中, 驱动程序是以 容器
的方式运行, 所以打包时需要先将驱动程序打包为 docker
镜像. 然后再将镜像文件和 service.yml
打包为 .tar.gz
压缩包. 具体打包步骤如下:
- 打包程序程序打包为
index.js
文件. 具体打包步骤参考 windows系统打包 中的第一步. 需要注意的是, 在linux
系统打包中, 不要求包含驱动配置文件 config.json`.
- 准备
Dockerfile
文件. 以下是一个简单的Dockerfile
文件示例, 具体内容根据自身的需求进行修改:
FROM node:18.17.1-alpine3.17
WORKDIR /app
ADD dist/* /app/
ENTRYPOINT [ "node", "index.js" ]
- 构建
docker
镜像.
使用上一步中的 Dockerfile
文件构建 docker
镜像, 具体命令如下:
docker build -t airiot/node-driver-example:v4.0.0 .
- 导出
docker
镜像并压缩.
docker save airiot/node-driver-example:v4.0.0 | gzip > node-driver-example.tar.gz
- 准备驱动安装配置文件
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
- 将所有资源打包为
gzip
文件. 将docker镜像
和service.yml
文件打包为gzip
文件. 打包命令如下:
tar cvf node-driver-example.tar node-driver-example.tar.gz service.yml
gzip node-driver-example.tar
打包后的 gzip
文件结构如下:
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 压缩文件
部署
将上一步骤中得到的驱动安装包通过 运维管理系统
上传到平台, 平台会自动解析并安装驱动. 安装成功后, 就可以在项目中使用该驱动了.
安装驱动
- 登录
运维管理系统
, 运维管理系统的默认登录地址为http://IP:13030/
, 将IP
换成平台地址即可. - 点击左侧菜单栏中的
服务管理
选项, 进入服务管理页面. - 点击页面右上角的
离线上传驱动
按钮, 选择上一步中得到的node-driver-example.tar.gz
文件, 点击确定
按钮, 平台会自动解析并安装驱动.
如果驱动安装失败, 可以在 运维管理系统
的 首页
中查看详细的日志信息.
不同版本的平台, 离线上传驱动
按扭的位置可能不同.
使用驱动
当驱动成功安装到平台后, 就可以在项目中使用该驱动了.
具体使用方法请参考 驱动管理.
注: 需要将运维服务的 InternetAccess 改为false, 才能读取本地仓库