配置端口
通过在 .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 中声明的端口号。以上面的 Remote Desktop 示例为例,应用会收到 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> 暴露。
嵌入到看板
您可以使用 Embed Widget 将设备的远程访问隧道直接嵌入到看板中。这创造了无缝的使用体验,用户可以:
- 监控所有设备的全局数据
- 通过嵌入的 Web UI 与单个设备交互
所有操作在同一个仪表板中完成。
在
port-template.yml中配置远程访问不会自动激活隧道。只有具有权限的用户才能在其设备上启用或禁用隧道。