Skip to Content
Accès à distanceConfiguration des ports

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: https

Cela 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: udp

Référence des champs

ChampRequisDescription
nameOuiÉtiquette affichée dans les paramètres de l’application de l’appareil
portOuiNuméro de port local sur lequel le service écoute
mainNonSi true, ce port est utilisé pour l’icône d’accès rapide dans la liste des applications de l’appareil
protocolNonhttp (par défaut), https, tcp ou udp
remote_port_environmentNonTCP 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 :

VariableDescription
DEVICE_LAN_IPL’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>_CLOUDLe port exposé sur Internet lorsque l’appareil fonctionne sur une instance IronFlock qui relaie les tunnels via le cloud (TCP et UDP)
TUNNEL_DOMAINLe 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_KEYDé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.

Last updated on