コンテンツにスキップ
JelinaJelina Documentation技術ドキュメント
公式サイトに戻る

デバイスへのアプリケーションデプロイ例

このページでは、JelinaCloud でデバイスのアプリケーションをデプロイする方法を説明します。

以下のスクリーンショットは既存の実製品資料を使用し、設定画面と操作箇所を示しています。画面内のデバイス名、バージョン名、サービス名は例であり、実際のプロジェクトに合わせて入力してください。

デプロイ前に、デバイスへ JelinaOS をインストールし、JelinaCloud のフリートに追加する必要があります。具体的な手順はデバイスの追加を参照してください。

デバイス JelinaOS バージョン Jelinvisor バージョン カーネルバージョン
I.MX8MP EBC-RS08-A2 imx8mmebcrs08a2 Debian-10 1.0.4 1.0.9 5.4.70-g62c07ec2f origin

アプリケーションのデプロイフロー

デバイスが所属する組織のフリートを開き、[リリース]→[新しいリリース]をクリックします。編集モードを選択し、次へ進んで compose.yml の編集ページを開きます。

フリートで新しい Release を作成する操作箇所

編集モードの選択:

開発者モードでは compose 設定を編集できます。非開発者モードではフォームでサービスを設定できます。両モードの画面例を以下に示します。

開発者モードの例

compose.yml 編集ページでアプリケーションサービスの設定を記述します。1 つの 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'
  1. [次へ]→[保存]をクリックして、編集中のリリースを保存します。

  2. サービス一覧のファイルアイコンをクリックし、パッケージ化したサービスのプログラムファイルをアップロードします。公開 Image サービスはイメージ名から Docker で取得できるため、ファイルをアップロードする必要はありません。

Release のサービス一覧とパッケージのアップロード箇所

  1. アップロードが成功したら、右上の[operation]→[公開]をクリックし、新しいリリースを公開します。
  1. テスト用の簡単な helloworld.sh スクリプトを作成します。

処理内容:1~100 を順に処理し、数値を 10 で割った余りが 0 の場合に hello world をコンソールへ出力して 10 秒待機します。処理の完了後、デバイス変数 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 の値(jack に設定済み)を取得し、コンソールへ出力。name はフリート共通変数またはデバイス固有変数画面で設定します。詳細は後述の「デバイス設定とサービス変数」を参照
echo "name:$name"

記述後、helloworld.sh を helloworld.tar.gz にパッケージ化します。

  1. 設定ファイルを記述して保存します。
version: 2
programs:
#サービス名
helloworld:
program: helloworld
#サービス再起動規則:失敗時に再起動
restart: on-failure
#サービス起動コマンド
command: /usr/bin/bash helloworld.sh
  1. サービス一覧のファイルアイコンをクリックし、パッケージ化したサービスのプログラムファイルをアップロードします。

ネイティブアプリケーションのパッケージアップロード箇所

  1. アップロード後、右上の[operation]→[公開]をクリックし、新しいリリースを公開します。

非開発者モード

このモードは非開発者向けに設計されており、基本的なサービス名と起動コマンドを入力するだけでサービス設定を作成できます。操作は次のとおりです。

[データを追加]をクリックし、[–]をダブルクリックして編集状態にし、サービス設定を入力します。

入力後、[次へ]をクリックして保存します。その後のパッケージのアップロードとリリースの公開は、開発者モードと同じです。

非開発者モードでのサービス設定画面

デフォルトでは、フリートは最新バージョンに自動追従しますが、デバイスの切り替えには約 15 分かかります。すぐに切り替えるには、手動でバージョンを指定できます。

デバイスの概要ページで、右上の[operation]→[バージョンを指定]をクリックします。ダイアログで先ほど公開したバージョンを選択し、[バージョンを指定]をクリックします。

アプリケーションのデプロイ状態の確認

Section titled “アプリケーションのデプロイ状態の確認”

注意:デバイスがネットワークに接続され、正常に通信している必要があります。

サービスが起動すると、デバイスダッシュボードのサービス一覧で現在の稼働状態を確認できます。

現在と目標のリリース、サービス状態、実行ログ

代表的な状態は次の 4 つです。

  • Running:実行中。
  • Failed:サービスの実行に失敗。
  • Restarting:サービスを再起動中。
  • Exited:サービスが終了。
  1. JelinaCloud のデバイス詳細ページからリモートアクセスで SSH ターミナルを開くか、既存の SSH クライアントでデバイスに接続します。

JelinaCloud のデバイスリモートアクセス

コンテナのデプロイ状態の確認

Section titled “コンテナのデプロイ状態の確認”

接続後、コンソールで docker ps を実行し、現在動作しているコンテナサービスを確認します。

対象コンテナが一覧にあり、STATUS が Up であることを確認してください。表示されない場合は、目標の Release、イメージのダウンロード状態、コンテナログを確認して調査します。

コンテナ名は「サービス名 _ イメージ ID _ リリース ID _ リリース Commit」という形式で指定されています。

この例の db サービスがコンテナ一覧で実行中であることを確認します。

ローカルサービスのデプロイ状態の確認

Section titled “ローカルサービスのデプロイ状態の確認”

journalctl -u jelina-jelinvisor -f でデバイスログを表示し、アプリケーションの現在の実行状態を確認できます。

デバイスエージェントのログでサービスの起動・終了記録を確認し、クラウドダッシュボードのサービス状態と照合します。

デバイスは周期的に状態を報告します。現在の報告周期と実際のサービス状態に基づいて、対象サービスが正常に動作していることを確認してください。

MySQL コンテナサービスの動作確認
Section titled “MySQL コンテナサービスの動作確認”

Navicat を開き、デバイスにデプロイした mysql アプリケーションへのリモート接続を試します。アドレス、管理者アカウント、compose.yml に設定した mysql 管理者パスワード、ポートを入力します。

接続項目 この例の設定
アドレス アクセス可能なデバイスの IP アドレス
ポート compose でマッピングしたホスト側ポート。この例では 3306
ユーザー名 root、または作成済みの業務用ユーザー
パスワード 現在のアプリケーション設定のデータベースパスワード

[接続をテスト]をクリックし、成功が表示されれば、アプリケーションが正常にデプロイされ、接続して利用できることを確認できます。

また、JelinaCloud のデバイス専用変数またはフリート共有変数で、mysql の利用アカウントなど、その他の環境設定を指定することもできます。

ローカルサービス helloworld スクリプトの動作確認
Section titled “ローカルサービス helloworld スクリプトの動作確認”

ローカルサービスの実行後、JelinaCloud のデバイスダッシュボードのログやリモートコンソールの出力で、helloworld の情報を確認できます。

JelinaCloud デバイスダッシュボード:

デバイスダッシュボードのサービス状態とログ領域

リモートコンソール:

以下は、このスクリプトの出力例です。数値は実行の進行状況によって変わります。

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

スクリプトの終了時に name:jack が出力されると、サービスに設定された変数 name を読み取れたことを示します。期待する値が出力されない場合は、変数の適用範囲と実際の値を確認してください。

デバイス設定とサービス変数について

Section titled “デバイス設定とサービス変数について”

優先順位:デバイス設定 > フリート設定

  • フリート設定:デフォルトでは、フリート内のすべてのデバイスに適用されます。

フリートの共有デバイス設定

適用対象デバイスは、現在のフリート内でこの設定に従って動作するデバイスを示します。

  • デバイス設定:フリート内の個別デバイスに、独自の設定変数値を指定できます。

個別デバイスの設定と適用状態

  • フリートの共有サービス変数:デフォルトでは、フリート内の全デバイスのサービス環境変数に適用されます。

    例えば、共有サービス変数で全サービスに a、b、name の 3 変数を設定すると、フリート内のすべてのデバイスでそれらの変数が使用されます。

フリートの共有サービス変数一覧

特定のイメージサービスを選択して環境変数を設定することもできます。

特定サービスへの変数の追加

  • デバイスの専用サービス変数:個々のデバイスに独自のサービス環境変数を設定できます。操作ページの[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
  1. 非公開イメージのコンテナサービスとローカルサービスは、アプリケーションパッケージのアップロードが必要です。アップロードしないと、関連するリリースを公開できません。

  2. 新しいリリースのローカルサービス名が旧リリースと一致する場合にのみ、旧サービスのデータが保持されます。

  3. コンテナサービスのデータを永続化するには、リリース作成時の compose.yml でボリュームのマウントを指定してください。パスを指定したマウントには対応していません。

  4. コンテナ名は「サービス名 _ イメージ ID _ リリース ID _ リリース Commit」に固定されているため、compose.yml の container_name で再指定することはできません。

  5. 非開発者モードに比べ、開発者モードではより詳細な設定を記述できます。

  6. compose.yml の Volumes が空の場合は、マウントするボリュームが未指定であることを意味します。通常のコンテナデプロイには影響しません。