Konfigurowanie portów
Zdefiniuj które usługi aplikacja udostępnia do zdalnego dostępu tworząc plik port-template.yml w katalogu .ironflock/.
Podstawowy przykład
ports:
- name: Interfejs webowy
port: 5000
main: true
protocol: httpsUdostępnia port 5000 do zdalnego dostępu. Zainstalowanie aplikacji na urządzeniu produkcyjnym włącza jego tunel; użytkownicy z uprawnieniem Sieć mogą go wyłączać i włączać z ustawień aplikacji na urządzeniu.
Pełny przykład
ports:
- name: Interfejs webowy
port: 1100
main: true
protocol: http
- name: Strumień wideo
port: 1200
protocol: http
- name: Pulpit zdalny
port: 5900
protocol: tcp
- name: Brama LoRaWAN
port: 1700
protocol: udpDokumentacja pól
| Pole | Wymagane | Opis |
|---|---|---|
name | Tak | Etykieta pokazywana w ustawieniach aplikacji urządzenia |
port | Tak | Numer portu lokalnego, na którym nasłuchuje usługa |
main | Nie | Jeśli true, ten port jest używany dla ikony szybkiego dostępu na liście aplikacji urządzenia |
protocol | Nie | http (domyślny), https, tcp lub udp |
remote_port_environment | Nie | Tylko TCP i UDP: dodatkowa nazwa zmiennej, pod którą agent urządzenia ogłasza port zdalny tunelu, obok REMOTE_PORT_FOR_<port>. Agent urządzenia w wersji starszej niż 0.19.8 ogłasza go tylko pod tą nazwą |
Wstrzykiwane zmienne środowiskowe
Dla każdego zadeklarowanego portu platforma wstrzykuje do kontenerów aplikacji zmienne środowiskowe, dzięki którym kod może ustalić, gdzie usługa jest faktycznie osiągalna — bez wpisywania adresów na sztywno:
| Zmienna | Opis |
|---|---|
DEVICE_LAN_IP | Adres IP urządzenia w sieci lokalnej |
DEVICE_PORT_FOR_<port> | Port na urządzeniu, pod którym zadeklarowany port jest opublikowany w sieci lokalnej |
REMOTE_PORT_FOR_<port> | Publiczny port przydzielony przez serwer tuneli, gdy tunel jest aktywny (TCP i UDP; agent urządzenia 0.19.8 i nowsze). 0 oznacza, że port nie został jeszcze przydzielony |
REMOTE_PORT_FOR_<port>_CLOUD | Port dostępny z internetu, gdy urządzenie działa w instancji IronFlock przekazującej tunele przez chmurę (TCP i UDP) |
TUNNEL_DOMAIN | Domena, w której składane są adresy URL tuneli urządzenia: app.ironflock.com w chmurze, domena Appliance w przypadku Appliance on-premises oraz localhost na urządzeniu brzegowym Appliance zainstalowanego bez domeny (tryb prosty) |
INSTANCE_KEY | Ustawiana tylko na urządzeniu należącym do Appliance on-premises (instancji): klucz, który zawierają jego adresy URL tuneli przekazywanych przez chmurę |
<port> to numer portu zadeklarowany w port-template.yml. Dla powyższego przykładu pulpitu zdalnego aplikacja otrzyma DEVICE_PORT_FOR_5900 oraz — gdy jej tunel jest aktywny — REMOTE_PORT_FOR_5900. SDK IronFlock składają adres URL zdalnego dostępu portu z tych zmiennych za pomocą getRemoteAccessUrlForPort. Platforma nie ustawia CLOUD_TUNNEL_DOMAIN: adresy URL przekazywane przez chmurę używają app.ironflock.com, chyba że aplikacja sama ustawi tę zmienną.
Tunele istnieją tylko dla instalacji produkcyjnych. Kontener deweloperski (DEV) nie dostaje własnego tunelu ani portu zdalnego — docieraj do niego zamiast tego przez sieć lokalną urządzenia (DEVICE_LAN_IP, DEVICE_PORT_FOR_<port>).
Na tym samym urządzeniu może działać jednocześnie wiele aplikacji, dlatego zadeklarowane porty są automatycznie mapowane na wolny port urządzenia. Zawsze buduj adresy w sieci lokalnej na podstawie wstrzykniętych wartości, zamiast zakładać, że obowiązuje zadeklarowany port:
import os
lan_ip = os.environ.get("DEVICE_LAN_IP")
lan_port = os.environ.get("DEVICE_PORT_FOR_5900")
# usługa jest osiągalna w sieci lokalnej pod adresem {lan_ip}:{lan_port}Zmienne są ustawiane przy starcie kontenera. Porty tuneli mogą się zmieniać w trakcie działania aplikacji (na przykład gdy tunel się ponownie połączy), dlatego zmienne portów tuneli (REMOTE_PORT_FOR_<port>, odpowiadająca jej zmienna _CLOUD oraz własna nazwa ustawiona w remote_port_environment) są dodatkowo na bieżąco aktualizowane jako pliki w /data/env/<VARIABLE_NAME>.txt — SDK IronFlock odczytują je automatycznie. Pozostałe zmienne zmieniają się tylko przy restarcie kontenera.
Agent urządzenia usuwa plik _CLOUD, gdy port w chmurze przestaje istnieć (przekazywanie przez chmurę wyłączone). Dopóki pliki agenta są obecne, brakujący lub pusty plik _CLOUD oznacza więc, że portu w chmurze nie ma, a SDK nie wracają do nieaktualnej wartości, z którą kontener wystartował.
Agent udostępnia /data/env do odczytu tylko użytkownikowi root. Kontener działający jako inny użytkownik nie może odczytać tych plików: widzi tylko wartości, z którymi wystartował — bez portów tuneli zmienionych od tego czasu — a SDK jednorazowo zapisują ostrzeżenie w logu.
Jak działają protokoły
HTTP / HTTPS
Dla usług webowych. IronFlock tworzy adres URL w domenie tuneli, który przekazuje ruch do lokalnego portu urządzenia. Użytkownicy otwierają URL w przeglądarce. Jest on prywatny: mogą go otworzyć tylko użytkownicy zalogowani do IronFlock, którzy mają dostęp do urządzenia, chyba że port zostanie przełączony na Publiczny.
TCP
Dla protokołów takich jak VNC (pulpit zdalny) lub bezpośrednie połączenia socketowe. IronFlock przydziela port zdalny na serwerze tuneli i udostępnia go aplikacji jako REMOTE_PORT_FOR_<port>; usługa jest wtedy osiągalna pod adresem tcp://<TUNNEL_DOMAIN>:<remote port>.
UDP
Dla protokołów takich jak komunikacja LoRaWAN lub tunele VPN. Podobnie jak w TCP — port zdalny jest przydzielany i udostępniany jako REMOTE_PORT_FOR_<port>.
Osadzanie w boardach
Możesz osadzić tunel zdalnego dostępu urządzenia bezpośrednio w boardzie za pomocą widżetu Embed. Zapewnia to spójne doświadczenie, w którym użytkownicy mogą:
- Monitorować globalne dane ze wszystkich urządzeń
- Wchodzić w interakcję z pojedynczymi urządzeniami przez osadzone interfejsy webowe
Wszystko w ramach tego samego dashboardu.
Zainstalowanie aplikacji na urządzeniu produkcyjnym włącza tunel każdego portu z jej
port-template.yml. Tunele HTTP i HTTPS pozostają prywatne — mogą je otworzyć tylko użytkownicy zalogowani do IronFlock, którzy mają dostęp do urządzenia — chyba że port zostanie przełączony na Publiczny. Tunele TCP i UDP to zwykłe porty na serwerze tuneli, bez żadnego logowania przed nimi, więc aplikacja musi sama uwierzytelniać swoich klientów. Użytkownicy z uprawnieniem Sieć na urządzeniu mogą wyłączać tunele i ponownie je włączać; zobacz Zarządzanie tunelami.