Ports konfigurieren
Definieren Sie, welche Dienste Ihre App für den Fernzugriff bereitstellt, indem Sie eine port-template.yml-Datei im .ironflock/-Verzeichnis erstellen.
Einfaches Beispiel
ports:
- name: Web Interface
port: 5000
main: true
protocol: httpsDies macht Port 5000 für den Fernzugriff verfügbar. Die Installation der App auf einem Produktionsgerät schaltet seinen Tunnel ein; Benutzer mit der Netzwerk-Berechtigung können ihn in den App-Einstellungen auf ihrem Gerät aus- und wieder einschalten.
Vollständiges Beispiel
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: udpFeldreferenz
| Feld | Erforderlich | Beschreibung |
|---|---|---|
name | Ja | Bezeichnung, die in den App-Einstellungen des Geräts angezeigt wird |
port | Ja | Lokale Portnummer, auf der der Dienst lauscht |
main | Nein | Wenn true, wird dieser Port für das Schnellzugriffssymbol in der App-Liste des Geräts verwendet |
protocol | Nein | http (Standard), https, tcp oder udp |
remote_port_environment | Nein | Nur TCP und UDP: ein zusätzlicher Variablenname, unter dem der Geräte-Agent den entfernten Port des Tunnels bekanntgibt, neben REMOTE_PORT_FOR_<port>. Geräte-Agenten vor 0.19.8 geben ihn nur unter diesem Namen bekannt |
Injizierte Umgebungsvariablen
Für jeden deklarierten Port injiziert die Plattform Umgebungsvariablen in die Container Ihrer App, damit Ihr Code ermitteln kann, wo der Dienst tatsächlich erreichbar ist — ohne Adressen fest codieren zu müssen:
| Variable | Beschreibung |
|---|---|
DEVICE_LAN_IP | Die IP-Adresse des Geräts im lokalen Netzwerk |
DEVICE_PORT_FOR_<port> | Der Port auf dem Gerät, unter dem Ihr deklarierter Port im lokalen Netzwerk veröffentlicht wird |
REMOTE_PORT_FOR_<port> | Der öffentliche Port, den der Tunnelserver zuweist, solange der Tunnel aktiv ist (TCP und UDP; Geräte-Agent 0.19.8 und neuer). 0 bedeutet: noch nicht zugewiesen |
REMOTE_PORT_FOR_<port>_CLOUD | Der über das Internet erreichbare Port, wenn das Gerät auf einer IronFlock-Instanz läuft, die Tunnel über die Cloud weiterleitet (TCP und UDP) |
TUNNEL_DOMAIN | Die Domain, auf der die Tunnel-URLs des Geräts gebildet werden: app.ironflock.com in der Cloud, die Domain der Appliance auf einer On-Premises-Appliance und localhost auf einem Edge-Gerät einer ohne Domain installierten Appliance (Modus „Einfaches HTTP“) |
INSTANCE_KEY | Nur auf einem Gerät gesetzt, das zu einer On-Premises-Appliance (Instanz) gehört: der Schlüssel, den seine über die Cloud weitergeleiteten Tunnel-URLs tragen |
<port> ist die Portnummer, die Sie in port-template.yml deklariert haben. Für das obige Remote-Desktop-Beispiel würde die App DEVICE_PORT_FOR_5900 erhalten und — solange ihr Tunnel aktiv ist — REMOTE_PORT_FOR_5900. Die IronFlock-SDKs bilden die Fernzugriffs-URL eines Ports aus diesen Variablen mit getRemoteAccessUrlForPort. Die Plattform setzt CLOUD_TUNNEL_DOMAIN nicht: Über die Cloud weitergeleitete URLs verwenden app.ironflock.com, sofern Ihre App diese Variable nicht selbst setzt.
Tunnel gibt es nur für Produktionsinstallationen. Ein Entwicklungscontainer (DEV) erhält keinen eigenen Tunnel und keinen eigenen entfernten Port — erreichen Sie ihn stattdessen im lokalen Netzwerk des Geräts (DEVICE_LAN_IP, DEVICE_PORT_FOR_<port>).
Da Apps gleichzeitig auf demselben Gerät laufen können, werden deklarierte Ports automatisch auf einen freien Port des Geräts abgebildet. Setzen Sie Adressen im lokalen Netzwerk daher immer aus den injizierten Werten zusammen, statt vom deklarierten Port auszugehen:
import os
lan_ip = os.environ.get("DEVICE_LAN_IP")
lan_port = os.environ.get("DEVICE_PORT_FOR_5900")
# Der Dienst ist im lokalen Netzwerk unter {lan_ip}:{lan_port} erreichbarDie Variablen werden beim Start des Containers gesetzt. Tunnel-Ports können sich ändern, während die App läuft (zum Beispiel, wenn sich ein Tunnel neu verbindet). Daher werden die Tunnel-Port-Variablen (REMOTE_PORT_FOR_<port>, die zugehörige _CLOUD-Variable und ein per remote_port_environment festgelegter eigener Name) zusätzlich als Dateien unter /data/env/<VARIABLE_NAME>.txt aktuell gehalten — die IronFlock-SDKs lesen diese automatisch. Die übrigen Variablen ändern sich nur, wenn der Container neu startet.
Der Geräte-Agent entfernt eine _CLOUD-Datei, wenn der Cloud-Port wegfällt (Cloud-Weiterleitung ausgeschaltet). Solange die Dateien des Agenten vorhanden sind, bedeutet eine fehlende oder leere _CLOUD-Datei daher, dass es keinen Cloud-Port gibt, und die SDKs greifen nicht auf den veralteten Wert zurück, mit dem der Container gestartet wurde.
Der Agent macht /data/env nur für root lesbar. Ein Container, der unter einem anderen Benutzer läuft, kann diese Dateien nicht lesen: Er sieht nur die Werte, mit denen er gestartet wurde — keinen Tunnel-Port, der sich seither geändert hat —, und die SDKs protokollieren einmalig eine Warnung.
Funktionsweise der Protokolle
HTTP / HTTPS
Für webbasierte Dienste. IronFlock erstellt eine URL auf der Tunnel-Domain, die den Datenverkehr an den lokalen Port des Geräts weiterleitet. Benutzer öffnen die URL in ihrem Browser. Sie ist privat: Nur bei IronFlock angemeldete Benutzer mit Zugriff auf das Gerät können sie öffnen, es sei denn, der Port ist auf Public geschaltet.
TCP
Für Protokolle wie VNC (Remote Desktop) oder direkte Socket-Verbindungen. IronFlock weist einen entfernten Port auf dem Tunnelserver zu und stellt ihn Ihrer App als REMOTE_PORT_FOR_<port> bereit; der Dienst ist dann unter tcp://<TUNNEL_DOMAIN>:<remote port> erreichbar.
UDP
Für Protokolle wie LoRaWAN-Kommunikation oder VPN-Tunnel. Ähnlich wie TCP — ein entfernter Port wird zugewiesen und als REMOTE_PORT_FOR_<port> bereitgestellt.
Einbettung in Boards
Sie können den Fernzugriffstunnel eines Geräts direkt in ein Board einbetten, indem Sie das Embed-Widget verwenden. Dies ermöglicht eine nahtlose Erfahrung, bei der Benutzer:
- Globale Daten aller Geräte überwachen
- Mit einzelnen Geräten über eingebettete Weboberflächen interagieren
Alles innerhalb desselben Dashboards.
Die Installation einer App auf einem Produktionsgerät schaltet den Tunnel jedes Ports in ihrer
port-template.ymlein. HTTP- und HTTPS-Tunnel bleiben privat — nur bei IronFlock angemeldete Benutzer mit Zugriff auf das Gerät können sie öffnen —, es sei denn, ein Port ist auf Public geschaltet. TCP- und UDP-Tunnel sind reine Ports auf dem Tunnelserver ohne vorgeschaltete Anmeldung, daher muss die App ihre Clients selbst authentifizieren. Benutzer mit der Netzwerk-Berechtigung auf dem Gerät können Tunnel aus- und wieder einschalten; siehe Tunnel verwalten.