Configuration des ports
Définissez quels services votre application expose pour l’accès à distance en créant un fichier port-template.yml dans le répertoire .ironflock/.
Exemple de base
ports:
- name: Web Interface
port: 5000
main: true
protocol: httpsCela rend le port 5000 disponible pour l’accès à distance. L’installation de l’application sur un appareil de production active le tunnel de ce port ; les utilisateurs disposant du privilège réseau peuvent le désactiver et le réactiver depuis les paramètres de l’application sur leur appareil.
Exemple complet
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: udpRéférence des champs
| Champ | Requis | Description |
|---|---|---|
name | Oui | Étiquette affichée dans les paramètres de l’application de l’appareil |
port | Oui | Numéro de port local sur lequel le service écoute |
main | Non | Si true, ce port est utilisé pour l’icône d’accès rapide dans la liste des applications de l’appareil |
protocol | Non | http (par défaut), https, tcp ou udp |
remote_port_environment | Non | TCP et UDP uniquement : un nom de variable supplémentaire sous lequel l’agent de l’appareil annonce le port distant du tunnel, en plus de REMOTE_PORT_FOR_<port>. Les agents d’appareil antérieurs à 0.19.8 ne l’annoncent que sous ce nom |
Variables d’environnement injectées
Pour chaque port que vous déclarez, la plateforme injecte des variables d’environnement dans les conteneurs de votre application afin que votre code puisse découvrir où le service est réellement accessible — sans coder les adresses en dur :
| Variable | Description |
|---|---|
DEVICE_LAN_IP | L’adresse IP de l’appareil sur le réseau local |
DEVICE_PORT_FOR_<port> | Le port de l’appareil sur lequel votre port déclaré est publié sur le réseau local |
REMOTE_PORT_FOR_<port> | Le port public alloué par le serveur de tunnel tant que le tunnel est actif (TCP et UDP ; agent de l’appareil 0.19.8 et ultérieur). 0 signifie qu’il n’est pas encore attribué |
REMOTE_PORT_FOR_<port>_CLOUD | Le port exposé sur Internet lorsque l’appareil fonctionne sur une instance IronFlock qui relaie les tunnels via le cloud (TCP et UDP) |
TUNNEL_DOMAIN | Le domaine sur lequel les URL de tunnel de l’appareil sont composées : app.ironflock.com dans le cloud, le domaine de l’appliance sur une appliance sur site, et localhost sur un appareil edge d’une appliance installée sans domaine (mode HTTP en clair) |
INSTANCE_KEY | Défini uniquement sur un appareil qui appartient à une appliance sur site (instance) : la clé que portent ses URL de tunnel relayées par le cloud |
<port> correspond au numéro de port que vous avez déclaré dans port-template.yml. Pour l’exemple Remote Desktop ci-dessus, l’application recevrait DEVICE_PORT_FOR_5900 et — tant que son tunnel est actif — REMOTE_PORT_FOR_5900. Les SDK IronFlock composent l’URL d’accès à distance d’un port à partir de ces variables avec getRemoteAccessUrlForPort. La plateforme ne définit pas CLOUD_TUNNEL_DOMAIN : les URL relayées par le cloud utilisent app.ironflock.com, sauf si votre application définit elle-même cette variable.
Les tunnels n’existent que pour les installations de production. Un conteneur de développement (DEV) n’obtient ni tunnel ni port distant propre — joignez-le plutôt sur le réseau local de l’appareil (DEVICE_LAN_IP, DEVICE_PORT_FOR_<port>).
Plusieurs applications peuvent s’exécuter simultanément sur le même appareil ; les ports déclarés sont donc automatiquement mappés vers un port libre de l’appareil. Composez toujours les adresses du réseau local à partir des valeurs injectées au lieu de présumer du port déclaré :
import os
lan_ip = os.environ.get("DEVICE_LAN_IP")
lan_port = os.environ.get("DEVICE_PORT_FOR_5900")
# le service est accessible sur le réseau local à {lan_ip}:{lan_port}Les variables sont définies au démarrage du conteneur. Les ports de tunnel peuvent changer pendant l’exécution de l’application (par exemple lors de la reconnexion d’un tunnel) ; les variables de port de tunnel (REMOTE_PORT_FOR_<port>, la variable _CLOUD correspondante et un nom personnalisé défini par remote_port_environment) sont donc également tenues à jour sous forme de fichiers dans /data/env/<VARIABLE_NAME>.txt — les SDK IronFlock les lisent automatiquement. Les autres variables ne changent qu’au redémarrage du conteneur.
L’agent de l’appareil supprime un fichier _CLOUD lorsque le port cloud disparaît (relais cloud désactivé). Tant que les fichiers de l’agent sont présents, un fichier _CLOUD absent ou vide signifie donc qu’il n’y a pas de port cloud, et les SDK ne se rabattent pas sur la valeur périmée avec laquelle le conteneur a démarré.
L’agent rend /data/env lisible par root uniquement. Un conteneur qui s’exécute sous un autre utilisateur ne peut pas lire ces fichiers : il ne voit que les valeurs avec lesquelles il a démarré — aucun port de tunnel modifié depuis — et les SDK journalisent un avertissement une seule fois.
Fonctionnement des protocoles
HTTP / HTTPS
Pour les services web. IronFlock crée, sur le domaine de tunnel, une URL qui relaie le trafic vers le port local de l’appareil. Les utilisateurs ouvrent l’URL dans leur navigateur. Elle est privée : seuls les utilisateurs connectés à IronFlock ayant accès à l’appareil peuvent l’ouvrir, sauf si le port est passé en Public.
TCP
Pour des protocoles comme VNC (Remote Desktop) ou les connexions socket directes. IronFlock alloue un port distant sur le serveur de tunnel et l’expose à votre application via REMOTE_PORT_FOR_<port> ; le service est alors joignable à l’adresse tcp://<TUNNEL_DOMAIN>:<remote port>.
UDP
Pour des protocoles comme la communication LoRaWAN ou les tunnels VPN. Similaire à TCP — un port distant est alloué et exposé via REMOTE_PORT_FOR_<port>.
Intégration dans les boards
Vous pouvez intégrer le tunnel d’accès à distance d’un appareil directement dans un board en utilisant le Widget Intégration. Cela crée une expérience fluide où les utilisateurs peuvent :
- Surveiller les données globales de tous les appareils
- Interagir avec des appareils individuels via des interfaces web intégrées
Le tout au sein du même tableau de bord.
L’installation d’une application sur un appareil de production active le tunnel de chaque port de son
port-template.yml. Les tunnels HTTP et HTTPS restent privés — seuls les utilisateurs connectés à IronFlock ayant accès à l’appareil peuvent les ouvrir — sauf si un port est passé en Public. Les tunnels TCP et UDP sont des ports bruts sur le serveur de tunnel, sans aucune connexion en amont : l’application doit donc authentifier elle-même ses clients. Les utilisateurs disposant du privilège réseau sur l’appareil peuvent désactiver les tunnels puis les réactiver ; voir Gestion des tunnels.