跳转到内容
返回官网

设备应用部署案例

本文主要介绍如何在 JelinaCloud 部署设备的应用。

下列截图沿用已有的真实产品资料,展示配置和操作入口;界面中的设备、版本和服务名称为案例信息,请按实际项目填写。

部署应用前需要先给设备安装 JelinaOS,将设备添加至 JelinaCloud 舰队中。具体步骤请参考:添加设备

设备 JelinaOS 版本 Jelinvisor 版本 内核版本
I.MX8MP EBC-RS08-A2 imx8mmebcrs08a2 Debian-10 1.0.4 1.0.9 5.4.70-g62c07ec2f origin

应用部署流程 (1)

进入设备关联的组织舰队,依次点击【版本】 - 【新建版本】,选择创建版本的编辑模式,点击下一步进入compose.yml 编辑页面。

舰队中新建 Release 的入口

选择编辑模式:

选择开发者模式可编辑 compose 配置;选择非开发者模式可通过表单填写服务。两种模式的界面示例见下文。

以开发人员编辑模式为例

在compose.yml 编辑页面,编写应用服务配置信息。新增的版本可以在 compose.yml 配置文件中同时编写容器服务和本地服务的信息,为便于介绍,本文以分开讲解的形式介绍如何部署容器服务和本地服务。

用户可以登入 docker Hub 镜像市场(https://hub.docker.com/search?q=)去查找所需要的镜像服务,服务具体部署方案可参考网页中的文档。

以部署Mysql容器服务为例:

1.编写配置文件

开发者模式编辑应用配置的界面示例

version: 2
services:
#服务名称
db:
# mysql:镜像名称 latest最新的镜像版本(可省略,省略表示默认从dockerhub拉取最新镜像)。也可以指定某一版本的镜像,如:mysql:5.7
image: mysql:latest
#环境变量
environment:
# mysql超级管理员登录密码
MYSQL_ROOT_PASSWORD: '123456'
#宿主机与容器的映射端口
ports:
- '3306:3306'

2.点击【下一步】- 【保存】,即可将当前编辑版本保存。

3.点击服务列表的文件图标,上传打包后的服务程序文件(公共 Image 服务可通过镜像名称在 docker 中自行拉取服务,因此可以不用上传文件):

Release 服务列表与应用包上传入口

4.上传成功后,版本就可以发布了。点击右上角的【operation】- 【发布】 即可完成新版本的发布。

1.编写一个简单的 helloworld.sh 脚本文件,用于测试

实现功能:遍历 1-100,当遍历的数字对 10 求余等于 0 时,在控制台上输出一次 hello world 并停顿 10s,遍历完成后再获取设备变量 name 的值,输出到控制台。

#!/bin/bash
#遍历1-100,当遍历的数字对10求余等于0时,在控制台上输出一次hello world并停顿10s
for((i=1;i<=100;i++));
do
if [ $(expr $i % 10) == 0 ]
then
echo "hello world $i"
sleep 10
done
#获取设备变量name的值(name的值已被设为jack),输出到控制台。 注:name由用户在舰队公共变量或设备私有变量页面中自行设置。设备变量相关内容请参考下文的 ##关于设备配置及服务变量## 章节
echo "name:$name"

编写完成后将 helloworld.sh 脚本文件打包成 helloworld.tar.gz

2.编写配置文件并保存

version: 2
programs:
#服务名称
helloworld:
program: helloworld
#指定服务重启逻辑:当服务失败时进行重启
restart: on-failure
#服务启动命令
command: /usr/bin/bash helloworld.sh

3.点击服务列表的文件图标,上传打包后的服务程序文件

原生应用的程序包上传入口

4.上传成功后,发布版本。点击右上角的【operation】- 【发布】 即可完成新版本的发布。

非开发人员编辑模式

此模式是为非开发人员专门设计,只需输入基本的服务名称及启动命令即可完成服务配置的编写,其编辑模式如下:

点击【新增数据】,双击【–】进入编辑状态,填写服务配置信息;

编辑完毕后点击【下一步】保存。接下的 程序包文件上传 与 版本发布 操作与 【开发人员编辑模式】 一致。

非开发者模式填写服务配置的界面示例

默认情况下,舰队会自动跟随最新版本,但设备切换成最新的版本预计需要 15 分钟。为了让设备快速切换版本我们可以手动进行指定。

在设备概要页面,点击右上角【operation】 -> 【指定版本】,在弹出的窗口选择选择刚刚发布的新版本,点击【指定版本】完成当前设备版本的指定。

注意:设备需要联网并且处于正常通信状态。

服务运行成功后,可以在设备仪表盘页面中的服务列表中确认服务当前运行的状态。

设备当前与目标版本、服务状态和运行日志

下列为常见的 4 种状态:

  • Running表示正在运行中
  • Failed表示服务运行失败
  • Restarting表示服务正在重启中
  • Exited表示服务已退出

1.通过 JelinaCloud 设备详情页的远程访问入口连接 SSH 终端,或使用已有的 SSH 客户端连接设备;

JelinaCloud 设备远程访问入口

连接成功,进入控制台,输入 docker ps 命令,查看当前正在运行的容器服务:

确认目标容器出现在列表中,且 STATUS 显示为 Up。如果未出现,结合 Release 目标版本、镜像下载状态和容器日志继续排查。

(注:容器名称已被指定为:服务名称 _ 镜像ID _ 版本ID _ 版本Commit)

在容器列表中确认本案例的 db 服务处于运行状态。

还可以通过命令 journalctl -u jelina-jelinvisor -f查看设备日志,确认当前应用的运行状态:

检查设备代理日志中的服务启动与退出记录,并与云端仪表盘显示的服务状态对照。

设备会周期性上报状态。应以当前设备的上报周期和实际服务状态为准,确认目标服务正常运行。

确认 MySQL 容器服务实际运行情况
Section titled “确认 MySQL 容器服务实际运行情况”

打开 navicat,尝试远程连接设备部署的 mysql 应用,输入地址,超级管理员账号、在compose.yml中配置的 mysql 超级管理员密码以及端口:

连接项 本案例填写方式
地址 设备可访问的 IP 地址
端口 compose 中映射的宿主机端口,本例为 3306
用户名 root,或你已创建的业务用户
密码 当前应用配置中的数据库密码

点击【测试连接】,提示连接成功,说明设备应用已成功部署并且可以正常连接使用。

另外,我们还可以通过在 JelinaCloud 的设备私有变量或舰队公共变量中配置 Mysql 的其它环境配置信息,例如:配置 mysql 的使用账户等;

确认本地服务 helloworld 脚本实际运行情况
Section titled “确认本地服务 helloworld 脚本实际运行情况”

本地服务运行后,我们可以在 JelinaCloud 设备仪表盘的日志以及远程软件控制台中的设备输出报告中看到 helloworld 输出的相关信息:

JelinaCloud 设备仪表盘:

设备仪表盘中的服务状态与日志区域

远程控制台:

以下为本案例脚本的示例输出,具体数字随运行进度变化:

hello world 10
hello world 20
...
name:jack

脚本结束时输出 name:jack,表示它读取到了为服务设置的变量 name。如未输出预期值,请检查变量的作用范围与实际值。

优先级:设备配置 > 舰队配置

  • 舰队配置:默认情况下,舰队中的所有设备都按此配置执行。

舰队的公共设备配置

覆盖设备:指当前舰队中哪些设备按照此配置进行工作。

  • 设备配置:舰队中的单个设备可以独自设置自身的配置变量值

单台设备的配置与覆盖状态

  • 舰队公有服务变量:默认情况下,舰队中的所有设备的服务环境变量都按此配置执行。

    例如,在舰队公共服务变量中给所有服务都设置了三个变量 a , b , name,那舰队中的所有设备都会存在这三个变量。

舰队公共服务变量列表

也可以选择某一镜像服务进行环境变量的配置:

为指定服务添加变量

  • 设备私有服务变量:舰队中的单个设备可以独自设置自身的服务环境变量值,可以在操作页面中点击【override】重写舰队变量的值,从而实现设备不同于舰队的私有服务变量。

    例如,在页面中点击【override】,我们可以将舰队变量 name , a ,b 重新设置值,这个重新设置的值只会作用在这个设备上,不会影响到舰队中的其它设备。

在设备侧重写公共服务变量

1.设备只会运行当前版本中存在的服务;

2.修改舰队公共变量或设备私有变量后会重启当前设备运行的服务;

3.本地服务运行结束后其状态会变为Exited;

4.本地服务的重启逻辑默认为 restart: always,若重启逻辑为always,当服务异常中断时,系统会尝试重启服务,当服务在单位时间内一直进行重启操作时其状态会被判定会Failed。我们为使用者提供了多种重启逻辑,可以根据自身使用需求,指定服务的重启逻辑;

restart: 可选:no,on-success,on-failure,on-abnormal,on-watchdog,on-abort,always,默认always

5.非公有镜像容器服务及本地服务需要上传应用包文件,否则其关联的版本无法发布;

6.新建的版本中的本地服务名称与旧版本的一致时,新版本的本地服务才会保留旧版本服务的数据;

7.若要对容器服务的数据持久化,请在创建版本编辑compose.yml文件时,指定挂载数据卷【不支持指定路径挂载】;

8.容器名称已被指定为:服务名称 _ 镜像ID _ 版本ID _ 版本Commit ,因此用户无法在compose.yml文件中重新指定容器的名称container_name;

9.相较于【非开发人员编辑模式】,【开发人员编辑模式】可以进行更丰富的配置编写;

10.若compose.yml的 Volumes 的值为空时,表示没有指定挂载数据卷,不会影响容器的正常部署;