ポートの設定
.ironflock/ディレクトリにport-template.ymlファイルを作成して、アプリがリモートアクセス用に公開するサービスを定義します。
基本的な例
ports:
- name: Web Interface
port: 5000
main: true
protocol: httpsこれによりポート5000がリモートアクセス可能になります。ユーザーはデバイス上のアプリ設定からトンネルを有効にできます。
完全な例
ports:
- name: Web Interface
port: 1100
main: true
protocol: http
- name: Video Stream
port: 1200
protocol: http
- name: Remote Desktop
port: 5900
protocol: tcp
- name: LoRaWAN Gateway
port: 1700
protocol: udpフィールドリファレンス
| フィールド | 必須 | 説明 |
|---|---|---|
name | はい | デバイスのアプリ設定に表示されるラベル |
port | はい | サービスがリッスンするローカルポート番号 |
main | いいえ | trueの場合、デバイスのアプリ一覧のクイックアクセスアイコンにこのポートが使用されます |
protocol | いいえ | http(デフォルト)、https、tcp、またはudp |
注入される環境変数
宣言した各ポートに対して、プラットフォームはアプリのコンテナに環境変数を注入します。これにより、アドレスをハードコーディングすることなく、サービスが実際に到達可能な場所をコードから検出できます:
| 変数 | 説明 |
|---|---|
DEVICE_LAN_IP | ローカルネットワーク上でのデバイスのIPアドレス |
DEVICE_PORT_FOR_<port> | 宣言したポートがローカルネットワークに公開されるデバイス上のポート |
REMOTE_PORT_FOR_<port> | トンネルがアクティブな間にトンネルサーバーによって割り当てられるパブリックポート(TCPとUDP) |
REMOTE_PORT_FOR_<port>_CLOUD | クラウド経由でトンネルを転送するIronFlockインスタンス上でデバイスが稼働している場合の、インターネット側のポート(TCPとUDP) |
<port>はport-template.ymlで宣言したポート番号です。上記のリモートデスクトップの例では、アプリはDEVICE_PORT_FOR_5900を受け取り、トンネルがアクティブな間はREMOTE_PORT_FOR_5900も受け取ります。
複数のアプリが同じデバイス上で同時に実行される可能性があるため、宣言されたポートは自動的にデバイス上の空きポートにマッピングされます。宣言したポート番号をそのまま前提とせず、必ず注入された値からローカルネットワークのアドレスを組み立ててください:
import os
lan_ip = os.environ.get("DEVICE_LAN_IP")
lan_port = os.environ.get("DEVICE_PORT_FOR_5900")
# サービスはローカルネットワーク上の {lan_ip}:{lan_port} で到達可能ですこれらの変数はコンテナの起動時に設定されます。トンネルポートはアプリの実行中に変わることがあるため(例えばトンネルが再接続した場合)、現在の値は/data/env/<VARIABLE_NAME>.txtのファイルとしても常に最新の状態に保たれます。IronFlock SDKはこれらのファイルを自動的に読み取ります。
プロトコルの動作
HTTP / HTTPS
Webベースのサービス向けです。IronFlockはデバイスのローカルポートにトラフィックをプロキシするパブリックURLを作成します。ユーザーはブラウザでURLを開きます。
TCP
VNC(リモートデスクトップ)やダイレクトソケット接続などのプロトコル向けです。IronFlockはトンネルサーバー上にリモートポートを割り当て、REMOTE_PORT_FOR_<port>としてアプリに公開します。
UDP
LoRaWAN通信やVPNトンネルなどのプロトコル向けです。TCPと同様に、リモートポートが割り当てられ、REMOTE_PORT_FOR_<port>として公開されます。
ボードへの埋め込み
埋め込みウィジェットを使用して、デバイスのリモートアクセストンネルをボードに直接埋め込むことができます。これにより、ユーザーはシームレスな体験を得られます:
- すべてのデバイスからのグローバルデータを監視
- 埋め込まれたWeb UIを通じて個々のデバイスと対話
すべてを同じダッシュボード内で行えます。
port-template.ymlでリモートアクセスを設定しても、トンネルは自動的に有効化されません。権限を持つユーザーのみがデバイス上でトンネルの有効化・無効化を行えます。