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 中声明的端口号。以上面的 Remote Desktop 示例为例,应用会收到 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 会记录一次警告。

协议工作方式

HTTP / HTTPS

用于基于 Web 的服务。IronFlock 在隧道域名上创建一个 URL,将流量代理到设备的本地端口。用户在浏览器中打开该 URL。该 URL 是私有的:只有登录 IronFlock 且有权访问该设备的用户才能打开它,除非该端口被切换为公开。

TCP

用于 VNC(远程桌面)或直接套接字连接等协议。IronFlock 在隧道服务器上分配一个远程端口,并通过 REMOTE_PORT_FOR_<port> 暴露给您的应用;随后即可通过 tcp://<TUNNEL_DOMAIN>:<remote port> 访问该服务。

UDP

用于 LoRaWAN 通信或 VPN 隧道等协议。与 TCP 类似——分配远程端口并通过 REMOTE_PORT_FOR_<port> 暴露。

嵌入到看板

您可以使用 Embed Widget 将设备的远程访问隧道直接嵌入到看板中。这创造了无缝的使用体验,用户可以:

  • 监控所有设备的全局数据
  • 通过嵌入的 Web UI 与单个设备交互

所有操作在同一个仪表板中完成。

在生产设备上安装应用时,会开启其 port-template.yml 中每个端口的隧道。HTTP 和 HTTPS 隧道保持私有——只有登录 IronFlock 且有权访问该设备的用户才能打开——除非某个端口被切换为公开。TCP 和 UDP 隧道是隧道服务器上的原始端口,前面没有任何登录保护,因此应用必须自行验证其客户端的身份。对设备拥有网络权限的用户可以关闭隧道并重新开启;参见管理隧道。

Last updated on