Skip to Content
リモートアクセスポートの設定

ポートの設定

.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
remote_port_environmentいいえTCPとUDPのみ:REMOTE_PORT_FOR_<port>に加えて、デバイスエージェントがトンネルのリモートポートを通知する追加の変数名。0.19.8より前のデバイスエージェントは、この名前でのみ通知します

注入される環境変数

宣言した各ポートに対して、プラットフォームはアプリのコンテナに環境変数を注入します。これにより、アドレスをハードコーディングすることなく、サービスが実際に到達可能な場所をコードから検出できます:

変数説明
DEVICE_LAN_IPローカルネットワーク上でのデバイスのIPアドレス
DEVICE_PORT_FOR_<port>宣言したポートがローカルネットワークに公開されるデバイス上のポート
REMOTE_PORT_FOR_<port>トンネルがアクティブな間にトンネルサーバーによって割り当てられるパブリックポート(TCPとUDP。デバイスエージェント0.19.8以降)。0はまだ割り当てられていないことを意味します
REMOTE_PORT_FOR_<port>_CLOUDクラウド経由でトンネルを転送するIronFlockインスタンス上でデバイスが稼働している場合の、インターネット側のポート(TCPとUDP)
TUNNEL_DOMAINデバイスのトンネルURLの組み立てに使われるドメイン:クラウドではapp.ironflock.com、オンプレミスアプライアンスではアプライアンスのドメイン、ドメインなしでインストールされたアプライアンス(プレーンモード)のエッジデバイスではlocalhost
INSTANCE_KEYオンプレミスアプライアンス(インスタンス)に属するデバイスでのみ設定されます:そのデバイスのクラウド経由で転送されるトンネルURLに含まれるキー

<port>はport-template.ymlで宣言したポート番号です。上記のリモートデスクトップの例では、アプリはDEVICE_PORT_FOR_5900を受け取り、トンネルがアクティブな間はREMOTE_PORT_FOR_5900も受け取ります。IronFlock SDKは、getRemoteAccessUrlForPortでこれらの変数からポートのリモートアクセスURLを組み立てます。プラットフォームはCLOUD_TUNNEL_DOMAINを設定しません:アプリがこの変数を自ら設定しない限り、クラウド経由で転送されるURLはapp.ironflock.comを使用します。

トンネルは本番インストールにのみ存在します。開発(DEV)コンテナには、独自のトンネルもリモートポートもありません — 代わりにデバイスのローカルネットワーク上でアクセスしてください(DEVICE_LAN_IP、DEVICE_PORT_FOR_<port>)。

複数のアプリが同じデバイス上で同時に実行される可能性があるため、宣言されたポートは自動的にデバイス上の空きポートにマッピングされます。宣言したポート番号をそのまま前提とせず、必ず注入された値からローカルネットワークのアドレスを組み立ててください:

import os lan_ip = os.environ.get("DEVICE_LAN_IP") lan_port = os.environ.get("DEVICE_PORT_FOR_5900") # サービスはローカルネットワーク上の {lan_ip}:{lan_port} で到達可能です

これらの変数はコンテナの起動時に設定されます。トンネルポートはアプリの実行中に変わることがあるため(例えばトンネルが再接続した場合)、トンネルポートの変数(REMOTE_PORT_FOR_<port>、それに対応する_CLOUD変数、およびカスタムのremote_port_environment名)は、/data/env/<VARIABLE_NAME>.txtのファイルとしても常に最新の状態に保たれます。IronFlock SDKはこれらのファイルを自動的に読み取ります。その他の変数が変わるのは、コンテナの再起動時だけです。

クラウドポートがなくなると(クラウド転送がオフになった場合)、デバイスエージェントは_CLOUDファイルを削除します。したがって、エージェントのファイルが存在する間は、_CLOUDファイルが存在しないか空であることはクラウドポートがないことを意味し、SDKはコンテナの起動時の古い値にフォールバックしません。

エージェントは/data/envをrootだけが読み取れるようにしています。別のユーザーとして実行されるコンテナはこれらのファイルを読み取れません:参照できるのは起動時の値だけで、その後に変わったトンネルポートは反映されず、SDKは警告を1回ログに記録します。

プロトコルの動作

HTTP / HTTPS

Webベースのサービス向けです。IronFlockはデバイスのローカルポートにトラフィックをプロキシする、トンネルドメイン上のURLを作成します。ユーザーはブラウザでURLを開きます。このURLはプライベートで、ポートをPublicに切り替えない限り、IronFlockにサインインしていてデバイスへのアクセス権を持つユーザーだけが開けます。

TCP

VNC(リモートデスクトップ)やダイレクトソケット接続などのプロトコル向けです。IronFlockはトンネルサーバー上にリモートポートを割り当て、REMOTE_PORT_FOR_<port>としてアプリに公開します。サービスにはtcp://<TUNNEL_DOMAIN>:<remote port>で到達できます。

UDP

LoRaWAN通信やVPNトンネルなどのプロトコル向けです。TCPと同様に、リモートポートが割り当てられ、REMOTE_PORT_FOR_<port>として公開されます。

ボードへの埋め込み

埋め込みウィジェットを使用して、デバイスのリモートアクセストンネルをボードに直接埋め込むことができます。これにより、ユーザーはシームレスな体験を得られます:

  • すべてのデバイスからのグローバルデータを監視
  • 埋め込まれたWeb UIを通じて個々のデバイスと対話

すべてを同じダッシュボード内で行えます。

本番デバイスにアプリをインストールすると、そのport-template.ymlにあるすべてのポートのトンネルがオンになります。HTTPとHTTPSのトンネルはプライベートのままで、ポートをPublicに切り替えない限り、IronFlockにサインインしていてデバイスへのアクセス権を持つユーザーだけが開けます。TCPとUDPのトンネルはトンネルサーバー上のポートをそのまま公開するもので、前段にログインがないため、アプリ自身がクライアントを認証する必要があります。デバイスに対するネットワーク権限を持つユーザーは、トンネルをオフにしたり、再びオンにしたりできます。トンネルの管理を参照してください。

Last updated on