裝置應用程式部署案例
本文主要介紹如何在 JelinaCloud 部署裝置的應用。
下列截圖沿用已有的真實產品資料,展示設定和操作入口;介面中的裝置、版本和服務名稱為案例資訊,請按實際專案填寫。
部署應用前需要先給裝置安裝 JelinaOS,將裝置新增至 JelinaCloud 艦隊中。具體步驟請參考:新增裝置
使用裝置情況
Section titled “使用裝置情況”| 裝置 | JelinaOS 版本 | Jelinvisor 版本 | 核心版本 |
|---|---|---|---|
| I.MX8MP EBC-RS08-A2 | imx8mmebcrs08a2 Debian-10 1.0.4 | 1.0.9 | 5.4.70-g62c07ec2f origin |
基本操作流程
Section titled “基本操作流程”
進入裝置關聯的組織艦隊,依次點選【版本】 - 【建立版本】,選擇建立版本的編輯模式,點選下一步進入compose.yml 編輯頁面。

選擇編輯模式:
選擇開發者模式可編輯 compose 設定;選擇非開發者模式可透過表單填寫服務。兩種模式的介面示例見下文。
以開發人員編輯模式為例
在compose.yml 編輯頁面,編寫應用服務設定資訊。新增的版本可以在 compose.yml 設定檔案中同時編寫容器服務和本機服務的資訊,為便於介紹,本文以分開講解的形式介紹如何部署容器服務和本機服務。
部署容器服務
Section titled “部署容器服務”使用者可以登入 docker Hub 映像市場(https://hub.docker.com/search?q=)去查找所需要的镜像服务,服务具体部署方案可参考网页中的文档。
以部署Mysql容器服務為例:
1.編寫設定檔案

version: 2services: #服務名稱 db: # mysql:映像名稱 latest最新的映像版本(可省略,省略表示預設從dockerhub拉取最新映像)。也可以指定某一版本的映像,如:mysql:5.7 image: mysql:latest #環境變數 environment: # mysql超級管理員登入密碼 MYSQL_ROOT_PASSWORD: '123456' #宿主機與容器的映射埠 ports: - '3306:3306'2.點選【下一步】- 【儲存】,即可將目前編輯版本儲存。
3.點選服務清單的檔案圖示,上傳打包後的服務程式檔案(公共 Image 服務可透過映像名稱在 docker 中自行拉取服務,因此可以不用上傳檔案):

4.上傳成功後,版本就可以釋出了。點選右上角的【operation】- 【釋出】 即可完成新版本的釋出。
部署本機服務
Section titled “部署本機服務”1.編寫一個簡單的 helloworld.sh 指令碼檔案,用於測試
實現功能:遍歷 1-100,當遍歷的數字對 10 求餘等於 0 時,在控制台上輸出一次 hello world 並停頓 10s,遍歷完成後再取得裝置變數 name 的值,輸出到控制台。
#!/bin/bash#遍歷1-100,當遍歷的數字對10求餘等於0時,在控制台上輸出一次hello world並停頓10sfor((i=1;i<=100;i++));do if [ $(expr $i % 10) == 0 ] then echo "hello world $i" sleep 10done#取得裝置變數name的值(name的值已被設為jack),輸出到控制台。 注:name由使用者在艦隊公共變數或裝置私有變數頁面中自行設定。裝置變數相關內容請參考下文的 ##關於裝置設定及服務變數## 章節echo "name:$name"編寫完成後將 helloworld.sh 指令碼檔案打包成 helloworld.tar.gz
2.編寫設定檔案並儲存
version: 2programs: #服務名稱 helloworld: program: helloworld #指定服務重新啟動邏輯:當服務失敗時進行重新啟動 restart: on-failure #服務啟動命令 command: /usr/bin/bash helloworld.sh3.點選服務清單的檔案圖示,上傳打包後的服務程式檔案

4.上傳成功後,釋出版本。點選右上角的【operation】- 【釋出】 即可完成新版本的釋出。
非開發人員編輯模式
此模式是為非開發人員專門設計,只需輸入基本的服務名稱及啟動命令即可完成服務設定的編寫,其編輯模式如下:
點選【新增資料】,按兩下【–】進入編輯狀態,填寫服務設定資訊;
編輯完畢後點選【下一步】儲存。接下的 程式套件檔案上傳 與 版本釋出 操作與 【開發人員編輯模式】 一致。

指定裝置版本
Section titled “指定裝置版本”預設情況下,艦隊會自動跟隨最新版本,但裝置切換成最新的版本預計需要 15 分鐘。為了讓裝置快速切換版本我們可以手動進行指定。
在裝置概要頁面,點選右上角【operation】 -> 【指定版本】,在彈出的視窗選擇選擇剛剛釋出的新版本,點選【指定版本】完成目前裝置版本的指定。
確認版本應用程式部署狀態
Section titled “確認版本應用程式部署狀態”注意:裝置需要聯網並且處於正常通訊狀態。
JelinaCloud 前端確認
Section titled “JelinaCloud 前端確認”服務執行成功後,可以在裝置儀表板頁面中的服務清單中確認服務目前執行的狀態。

下列為常見的 4 種狀態:
- Running表示正在執行中
- Failed表示服務執行失敗
- Restarting表示服務正在重新啟動中
- Exited表示服務已退出
1.透過 JelinaCloud 裝置詳情頁的遠端存取入口連線 SSH 終端,或使用已有的 SSH 用戶端連線裝置;

確認容器部署狀態
Section titled “確認容器部署狀態”連線成功,進入控制台,輸入 docker ps 命令,檢視目前正在執行的容器服務:
確認目標容器出現在清單中,且 STATUS 顯示為 Up。如果未出現,結合 Release 目標版本、映像下載狀態和容器記錄繼續排查。
(注:容器名稱已被指定為:服務名稱 _ 映像ID _ 版本ID _ 版本Commit)
在容器清單中確認本案例的 db 服務處於執行狀態。
確認本機服務部署狀態
Section titled “確認本機服務部署狀態”還可以透過命令 journalctl -u jelina-jelinvisor -f檢視裝置記錄,確認目前應用的執行狀態:
檢查裝置代理程式記錄中的服務啟動與退出記錄,並與雲端儀表板顯示的服務狀態對照。
裝置會週期性回報狀態。應以目前裝置的回報週期和實際服務狀態為準,確認目標服務正常執行。
確認服務使用效果
Section titled “確認服務使用效果”確認 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 10hello world 20...name:jack指令碼結束時輸出 name:jack,表示它讀取到了為服務設定的變數 name。如未輸出預期值,請檢查變數的作用範圍與實際值。
關於裝置設定及服務變數
Section titled “關於裝置設定及服務變數”優先順序:裝置設定 > 艦隊設定
- 艦隊設定:預設情況下,艦隊中的所有裝置都按此設定執行。

覆蓋裝置:指目前艦隊中哪些裝置按照此設定進行工作。
- 裝置設定:艦隊中的單個裝置可以獨自設定自身的設定變數值

-
艦隊公有服務變數:預設情況下,艦隊中的所有裝置的服務環境變數都按此設定執行。
例如,在艦隊公共服務變數中給所有服務都設定了三個變數 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,預設always5.非公有映像容器服務及本機服務需要上傳應用程式套件檔案,否則其關聯的版本無法釋出;
6.建立的版本中的本機服務名稱與舊版本的一致時,新版本的本機服務才會保留舊版本服務的資料;
7.若要對容器服務的資料持久化,請在建立版本編輯compose.yml檔案時,指定掛載資料卷【不支援指定路徑掛載】;
8.容器名稱已被指定為:服務名稱 _ 映像ID _ 版本ID _ 版本Commit ,因此使用者無法在compose.yml檔案中重新指定容器的名稱container_name;
9.相較於【非開發人員編輯模式】,【開發人員編輯模式】可以進行更豐富的設定編寫;
10.若compose.yml的 Volumes 的值為空時,表示沒有指定掛載資料卷,不會影響容器的正常部署;