Configurazione Porte
Definisci quali servizi la tua app espone per l’accesso remoto creando un file port-template.yml nella directory .ironflock/.
Esempio Base
ports:
- name: Web Interface
port: 5000
main: true
protocol: httpsQuesto rende la porta 5000 disponibile per l’accesso remoto. L’installazione dell’app su un dispositivo di produzione ne attiva il tunnel; gli utenti con il privilegio network possono disattivarlo e riattivarlo dalle impostazioni dell’app sul loro dispositivo.
Esempio 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: udpRiferimento Campi
| Campo | Obbligatorio | Descrizione |
|---|---|---|
name | Sì | Etichetta mostrata nelle impostazioni dell’app del dispositivo |
port | Sì | Numero di porta locale su cui il servizio è in ascolto |
main | No | Se true, questa porta viene utilizzata per l’icona di accesso rapido nella lista app del dispositivo |
protocol | No | http (predefinito), https, tcp o udp |
remote_port_environment | No | Solo TCP e UDP: un nome di variabile aggiuntivo con cui l’agente del dispositivo annuncia la porta remota del tunnel, oltre a REMOTE_PORT_FOR_<port>. Gli agenti del dispositivo precedenti alla 0.19.8 la annunciano solo con questo nome |
Variabili d’Ambiente Iniettate
Per ogni porta che dichiari, la piattaforma inietta variabili d’ambiente nei container della tua app, così il tuo codice può scoprire dove il servizio è effettivamente raggiungibile — senza indirizzi codificati in modo fisso:
| Variabile | Descrizione |
|---|---|
DEVICE_LAN_IP | L’indirizzo IP del dispositivo sulla rete locale |
DEVICE_PORT_FOR_<port> | La porta del dispositivo su cui la porta dichiarata è pubblicata sulla rete locale |
REMOTE_PORT_FOR_<port> | La porta pubblica allocata dal server tunnel mentre il tunnel è attivo (TCP e UDP; agente del dispositivo 0.19.8 e successivi). 0 significa non ancora assegnata |
REMOTE_PORT_FOR_<port>_CLOUD | La porta esposta su Internet quando il dispositivo opera su un’istanza IronFlock che inoltra i tunnel attraverso il cloud (TCP e UDP) |
TUNNEL_DOMAIN | Il dominio su cui vengono composti gli URL dei tunnel del dispositivo: app.ironflock.com nel cloud, il dominio dell’appliance su un’appliance on-premises, e localhost su un dispositivo edge di un’appliance installata senza dominio (modalità HTTP semplice) |
INSTANCE_KEY | Impostata solo su un dispositivo che appartiene a un’appliance on-premises (istanza): la chiave contenuta negli URL dei suoi tunnel inoltrati tramite il cloud |
<port> è il numero di porta dichiarato in port-template.yml. Per l’esempio del Desktop Remoto qui sopra, l’app riceverebbe DEVICE_PORT_FOR_5900 e — mentre il suo tunnel è attivo — REMOTE_PORT_FOR_5900. Gli SDK IronFlock compongono l’URL di accesso remoto di una porta da queste variabili con getRemoteAccessUrlForPort. La piattaforma non imposta CLOUD_TUNNEL_DOMAIN: gli URL inoltrati tramite il cloud usano app.ironflock.com, a meno che la tua app non imposti essa stessa quella variabile.
I tunnel esistono solo per le installazioni di produzione. Un container di sviluppo (DEV) non riceve né un tunnel né una porta remota propri — raggiungilo invece sulla rete locale del dispositivo (DEVICE_LAN_IP, DEVICE_PORT_FOR_<port>).
Più app possono essere in esecuzione contemporaneamente sullo stesso dispositivo, quindi le porte dichiarate vengono mappate automaticamente su una porta libera del dispositivo. Componi sempre gli indirizzi di rete locale a partire dai valori iniettati invece di dare per scontata la porta dichiarata:
import os
lan_ip = os.environ.get("DEVICE_LAN_IP")
lan_port = os.environ.get("DEVICE_PORT_FOR_5900")
# il servizio è raggiungibile sulla rete locale all'indirizzo {lan_ip}:{lan_port}Le variabili vengono impostate all’avvio del container. Le porte dei tunnel possono cambiare mentre l’app è in esecuzione (ad esempio quando un tunnel si riconnette), quindi le variabili delle porte dei tunnel (REMOTE_PORT_FOR_<port>, la relativa variabile _CLOUD e un nome personalizzato definito con remote_port_environment) vengono inoltre mantenute aggiornate come file in /data/env/<VARIABLE_NAME>.txt — gli SDK IronFlock li leggono automaticamente. Le altre variabili cambiano solo al riavvio del container.
L’agente del dispositivo rimuove un file _CLOUD quando la porta cloud scompare (inoltro tramite il cloud disattivato). Finché i file dell’agente sono presenti, un file _CLOUD mancante o vuoto significa quindi che non c’è alcuna porta cloud, e gli SDK non ripiegano sul valore obsoleto con cui il container è stato avviato.
L’agente rende /data/env leggibile solo da root. Un container eseguito con un altro utente non può leggere questi file: vede solo i valori con cui è stato avviato — nessuna porta di tunnel cambiata nel frattempo — e gli SDK registrano un avviso una sola volta.
Come Funzionano i Protocolli
HTTP / HTTPS
Per i servizi basati sul web. IronFlock crea un URL sul dominio del tunnel che inoltra il traffico alla porta locale del dispositivo. Gli utenti aprono l’URL nel loro browser. È privato: possono aprirlo solo gli utenti che hanno effettuato l’accesso a IronFlock e hanno accesso al dispositivo, a meno che la porta non sia impostata su Pubblico.
TCP
Per protocolli come VNC (Desktop Remoto) o connessioni socket dirette. IronFlock alloca una porta remota sul server tunnel e la espone alla tua app come REMOTE_PORT_FOR_<port>; il servizio è quindi raggiungibile all’indirizzo tcp://<TUNNEL_DOMAIN>:<remote port>.
UDP
Per protocolli come la comunicazione LoRaWAN o i tunnel VPN. Simile a TCP — viene allocata una porta remota ed esposta come REMOTE_PORT_FOR_<port>.
Incorporamento nelle Bacheche
Puoi incorporare il tunnel di accesso remoto di un dispositivo direttamente in una bacheca usando il Widget Embed. Questo crea un’esperienza fluida in cui gli utenti possono:
- Monitorare i dati globali da tutti i dispositivi
- Interagire con i singoli dispositivi attraverso interfacce web incorporate
Tutto all’interno della stessa dashboard.
L’installazione di un’app su un dispositivo di produzione attiva il tunnel di ogni porta del suo
port-template.yml. I tunnel HTTP e HTTPS restano privati — possono aprirli solo gli utenti che hanno effettuato l’accesso a IronFlock e hanno accesso al dispositivo — a meno che una porta non venga impostata su Pubblico. I tunnel TCP e UDP sono porte esposte direttamente sul server tunnel, senza alcun login davanti, quindi l’app deve autenticare da sé i propri client. Gli utenti con il privilegio network sul dispositivo possono disattivare i tunnel e riattivarli; vedi Gestione Tunnel.