Port Yapılandırma
.ironflock/ dizininde port-template.yml dosyası oluşturarak uygulamanızın uzaktan erişim için hangi servisleri açığa çıkaracağını tanımlayın.
Temel Örnek
ports:
- name: Web Interface
port: 5000
main: true
protocol: httpsBu yapılandırma, 5000 numaralı portu uzaktan erişim için kullanılabilir hale getirir. Uygulamayı bir üretim cihazına kurmak bu portun tünelini açar; ağ ayrıcalığına sahip kullanıcılar tüneli cihazlarındaki uygulama ayarlarından kapatıp açabilir.
Tam Örnek
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: udpAlan Referansı
| Alan | Zorunlu | Açıklama |
|---|---|---|
name | Evet | Cihazın uygulama ayarlarında gösterilen etiket |
port | Evet | Servisin dinlediği yerel port numarası |
main | Hayır | true ise bu port, cihazın uygulama listesindeki hızlı erişim simgesi için kullanılır |
protocol | Hayır | http (varsayılan), https, tcp veya udp |
remote_port_environment | Hayır | Yalnızca TCP ve UDP: cihaz ajanının tünelin uzak portunu REMOTE_PORT_FOR_<port> ile birlikte duyurduğu ek bir değişken adı. 0.19.8 öncesi cihaz ajanları portu yalnızca bu adla duyurur |
Enjekte Edilen Ortam Değişkenleri
Tanımladığınız her port için platform, kodunuzun servise gerçekte nereden erişilebileceğini — adresleri sabit kodlamadan — keşfedebilmesi için uygulamanızın konteynerlerine ortam değişkenleri enjekte eder:
| Değişken | Açıklama |
|---|---|
DEVICE_LAN_IP | Cihazın yerel ağdaki IP adresi |
DEVICE_PORT_FOR_<port> | Tanımladığınız portun yerel ağda yayınlandığı, cihaz üzerindeki port |
REMOTE_PORT_FOR_<port> | Tünel aktifken tünel sunucusu tarafından tahsis edilen genel port (TCP ve UDP; cihaz ajanı 0.19.8 ve sonrası). 0 henüz atanmadığı anlamına gelir |
REMOTE_PORT_FOR_<port>_CLOUD | Cihaz, tünelleri bulut üzerinden yönlendiren bir IronFlock instance’ında çalıştığında internete açık port (TCP ve UDP) |
TUNNEL_DOMAIN | Cihazın tünel URL’lerinin oluşturulduğu alan adı: bulutta app.ironflock.com, yerinde (on-premises) bir appliance’ta appliance’ın alan adı ve alan adı olmadan kurulmuş (düz mod) bir appliance’ın uç cihazında localhost |
INSTANCE_KEY | Yalnızca yerinde (on-premises) bir appliance’a (instance) ait bir cihazda ayarlanır: bulut üzerinden yönlendirilen tünel URL’lerinin taşıdığı anahtar |
<port>, port-template.yml dosyasında tanımladığınız port numarasıdır. Yukarıdaki Remote Desktop örneği için uygulama, DEVICE_PORT_FOR_5900 değişkenini ve — tüneli aktifken — REMOTE_PORT_FOR_5900 değişkenini alır. IronFlock SDK’ları bir portun uzaktan erişim URL’sini bu değişkenlerden getRemoteAccessUrlForPort ile oluşturur. Platform CLOUD_TUNNEL_DOMAIN değerini ayarlamaz: uygulamanız bu değişkeni kendisi ayarlamadıkça bulut üzerinden yönlendirilen URL’ler app.ironflock.com kullanır.
Tüneller yalnızca üretim kurulumları için vardır. Bir geliştirme (DEV) konteyneri kendine ait bir tünel ve uzak port almaz — ona bunun yerine cihazın yerel ağı üzerinden ulaşın (DEVICE_LAN_IP, DEVICE_PORT_FOR_<port>).
Uygulamalar aynı cihazda eşzamanlı olarak çalışabileceğinden, tanımlanan portlar cihazdaki boş bir porta otomatik olarak eşlenir. Yerel ağ adreslerini her zaman, tanımlanan portu varsaymak yerine enjekte edilen değerlerden oluşturun:
import os
lan_ip = os.environ.get("DEVICE_LAN_IP")
lan_port = os.environ.get("DEVICE_PORT_FOR_5900")
# servis, yerel ağda {lan_ip}:{lan_port} adresinden erişilebilirDeğişkenler konteyner başlatıldığında ayarlanır. Tünel portları uygulama çalışırken değişebilir (örneğin bir tünel yeniden bağlandığında); bu nedenle tünel portu değişkenleri (REMOTE_PORT_FOR_<port>, ona karşılık gelen _CLOUD değişkeni ve remote_port_environment ile belirlenen özel bir ad) ayrıca /data/env/<VARIABLE_NAME>.txt altındaki dosyalar olarak güncel tutulur — IronFlock SDK’ları bunları otomatik olarak okur. Diğer değişkenler yalnızca konteyner yeniden başlatıldığında değişir.
Cihaz ajanı, bulut portu ortadan kalktığında (bulut yönlendirmesi kapatıldığında) bir _CLOUD dosyasını kaldırır. Bu nedenle ajanın dosyaları mevcutken eksik veya boş bir _CLOUD dosyası bulut portu olmadığı anlamına gelir ve SDK’lar konteynerin başlarken aldığı eski değere geri dönmez.
Ajan /data/env dizinini yalnızca root tarafından okunabilir yapar. Başka bir kullanıcı olarak çalışan bir konteyner bu dosyaları okuyamaz: yalnızca başlarken aldığı değerleri görür — o zamandan beri değişen hiçbir tünel portunu görmez — ve SDK’lar bir kez uyarı kaydeder.
Protokoller Nasıl Çalışır
HTTP / HTTPS
Web tabanlı servisler için. IronFlock, tünel alan adında trafiği cihazın yerel portuna yönlendiren bir URL oluşturur. Kullanıcılar URL’yi tarayıcılarında açar. Bu URL özeldir: port Genel olarak ayarlanmadıkça yalnızca IronFlock’ta oturum açmış ve cihaza erişimi olan kullanıcılar onu açabilir.
TCP
VNC (Uzak Masaüstü) veya doğrudan soket bağlantıları gibi protokoller için. IronFlock, tünel sunucusunda bir uzak port tahsis eder ve bunu uygulamanıza REMOTE_PORT_FOR_<port> olarak açığa çıkarır; servis bundan sonra tcp://<TUNNEL_DOMAIN>:<remote port> adresinden erişilebilir.
UDP
LoRaWAN iletişimi veya VPN tünelleri gibi protokoller için. TCP’ye benzer şekilde — bir uzak port tahsis edilir ve REMOTE_PORT_FOR_<port> olarak açığa çıkarılır.
Board’lara Yerleştirme
Embed Widget kullanarak bir cihazın uzaktan erişim tünelini doğrudan bir board’a yerleştirebilirsiniz. Bu, kullanıcıların şunları yapabildiği sorunsuz bir deneyim oluşturur:
- Tüm cihazlardaki global verileri izleme
- Yerleşik web arayüzleri aracılığıyla bireysel cihazlarla etkileşim kurma
Hepsi aynı dashboard içinde.
Bir uygulamayı üretim cihazına kurmak,
port-template.ymldosyasındaki her portun tünelini açar. HTTP ve HTTPS tünelleri özel kalır — bir port Genel olarak ayarlanmadıkça yalnızca IronFlock’ta oturum açmış ve cihaza erişimi olan kullanıcılar bunları açabilir. TCP ve UDP tünelleri, tünel sunucusunda önünde oturum açma adımı olmayan ham portlardır; bu nedenle uygulama, istemcilerinin kimliğini kendisi doğrulamalıdır. Cihazda ağ ayrıcalığına sahip kullanıcılar tünelleri kapatıp yeniden açabilir; bkz. Tünel Yönetimi.