Configuración de puertos
Define qué servicios expone tu app para acceso remoto creando un archivo port-template.yml en el directorio .ironflock/.
Ejemplo básico
ports:
- name: Web Interface
port: 5000
main: true
protocol: httpsEsto hace que el puerto 5000 esté disponible para acceso remoto. Instalar la app en un dispositivo de producción activa su túnel; los usuarios con el privilegio de red pueden desactivarlo y volver a activarlo desde la configuración de la app en su dispositivo.
Ejemplo completo
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: udpReferencia de campos
| Campo | Requerido | Descripción |
|---|---|---|
name | Sí | Etiqueta mostrada en la configuración de la app del dispositivo |
port | Sí | Número de puerto local en el que el servicio escucha |
main | No | Si es true, este puerto se usa para el ícono de acceso rápido en la lista de apps del dispositivo |
protocol | No | http (predeterminado), https, tcp o udp |
remote_port_environment | No | Solo TCP y UDP: un nombre de variable adicional con el que el agente del dispositivo anuncia el puerto remoto del túnel, además de REMOTE_PORT_FOR_<port>. Los agentes de dispositivo anteriores a 0.19.8 solo lo anuncian con este nombre |
Variables de entorno inyectadas
Por cada puerto que declaras, la plataforma inyecta variables de entorno en los contenedores de tu app para que tu código pueda descubrir dónde es realmente accesible el servicio — sin codificar direcciones de forma fija:
| Variable | Descripción |
|---|---|
DEVICE_LAN_IP | La dirección IP del dispositivo en la red local |
DEVICE_PORT_FOR_<port> | El puerto del dispositivo en el que tu puerto declarado se publica en la red local |
REMOTE_PORT_FOR_<port> | El puerto público asignado por el servidor de túneles mientras el túnel está activo (TCP y UDP; agente del dispositivo 0.19.8 y posteriores). 0 significa que todavía no se ha asignado |
REMOTE_PORT_FOR_<port>_CLOUD | El puerto expuesto a internet cuando el dispositivo opera en una instancia de IronFlock que reenvía los túneles a través de la nube (TCP y UDP) |
TUNNEL_DOMAIN | El dominio sobre el que se componen las URLs de túnel del dispositivo: app.ironflock.com en la nube, el dominio del appliance en un appliance on-premises, y localhost en un dispositivo edge de un appliance instalado sin dominio (modo HTTP simple) |
INSTANCE_KEY | Solo se establece en un dispositivo que pertenece a un appliance on-premises (instancia): la clave que llevan sus URLs de túnel reenviadas a través de la nube |
<port> es el número de puerto que declaraste en port-template.yml. Para el ejemplo de Remote Desktop anterior, la app recibiría DEVICE_PORT_FOR_5900 y — mientras su túnel esté activo — REMOTE_PORT_FOR_5900. Los SDKs de IronFlock componen la URL de acceso remoto de un puerto a partir de estas variables con getRemoteAccessUrlForPort. La plataforma no establece CLOUD_TUNNEL_DOMAIN: las URLs reenviadas a través de la nube usan app.ironflock.com salvo que tu app establezca esa variable por sí misma.
Los túneles solo existen para instalaciones de producción. Un contenedor de desarrollo (DEV) no obtiene túnel ni puerto remoto propios — accede a él a través de la red local del dispositivo (DEVICE_LAN_IP, DEVICE_PORT_FOR_<port>).
Varias apps pueden ejecutarse simultáneamente en el mismo dispositivo, por lo que los puertos declarados se asignan automáticamente a un puerto libre del dispositivo. Compón siempre las direcciones de la red local a partir de los valores inyectados en lugar de asumir el puerto declarado:
import os
lan_ip = os.environ.get("DEVICE_LAN_IP")
lan_port = os.environ.get("DEVICE_PORT_FOR_5900")
# el servicio es accesible en la red local en {lan_ip}:{lan_port}Las variables se establecen cuando el contenedor arranca. Los puertos de túnel pueden cambiar mientras la app está en ejecución (por ejemplo, cuando un túnel se reconecta), por lo que las variables de puerto de túnel (REMOTE_PORT_FOR_<port>, su variable _CLOUD correspondiente y un nombre propio definido con remote_port_environment) también se mantienen actualizadas como archivos en /data/env/<VARIABLE_NAME>.txt — los SDKs de IronFlock los leen automáticamente. Las demás variables solo cambian cuando el contenedor se reinicia.
El agente del dispositivo elimina un archivo _CLOUD cuando el puerto en la nube desaparece (reenvío a través de la nube desactivado). Mientras estén presentes los archivos del agente, un archivo _CLOUD ausente o vacío significa por tanto que no hay puerto en la nube, y los SDKs no recurren al valor obsoleto con el que arrancó el contenedor.
El agente hace que /data/env solo sea legible por root. Un contenedor que se ejecuta con otro usuario no puede leer estos archivos: solo ve los valores con los que arrancó — ningún puerto de túnel que haya cambiado desde entonces — y los SDKs registran una advertencia una sola vez.
Cómo funcionan los protocolos
HTTP / HTTPS
Para servicios basados en web. IronFlock crea una URL en el dominio de túneles que redirige el tráfico al puerto local del dispositivo. Los usuarios abren la URL en su navegador. Es privada: solo los usuarios que han iniciado sesión en IronFlock y tienen acceso al dispositivo pueden abrirla, salvo que el puerto se cambie a Public.
TCP
Para protocolos como VNC (Escritorio remoto) o conexiones directas por socket. IronFlock asigna un puerto remoto en el servidor de túneles y lo expone a tu app como REMOTE_PORT_FOR_<port>; el servicio es entonces accesible en tcp://<TUNNEL_DOMAIN>:<remote port>.
UDP
Para protocolos como comunicación LoRaWAN o túneles VPN. Similar a TCP — se asigna un puerto remoto y se expone como REMOTE_PORT_FOR_<port>.
Integración en boards
Puedes integrar el túnel de acceso remoto de un dispositivo directamente en un board usando el Embed Widget. Esto crea una experiencia fluida donde los usuarios pueden:
- Monitorear datos globales de todos los dispositivos
- Interactuar con dispositivos individuales a través de interfaces web integradas
Todo dentro del mismo dashboard.
Instalar una app en un dispositivo de producción activa el túnel de cada puerto de su
port-template.yml. Los túneles HTTP y HTTPS siguen siendo privados — solo los usuarios que han iniciado sesión en IronFlock y tienen acceso al dispositivo pueden abrirlos — salvo que un puerto se cambie a Public. Los túneles TCP y UDP son puertos directos en el servidor de túneles, sin inicio de sesión delante, por lo que la app debe autenticar a sus clientes por sí misma. Los usuarios con el privilegio de red en el dispositivo pueden desactivar los túneles y volver a activarlos; consulta Gestión de túneles.