Skip to Content
원격 접근포트 구성

포트 구성

.ironflock/ 디렉토리에 port-template.yml 파일을 생성하여 앱이 원격 접근을 위해 노출하는 서비스를 정의합니다.

기본 예시

ports: - name: Web Interface port: 5000 main: true protocol: https

이를 통해 포트 5000이 원격 접근에 사용 가능하게 됩니다. 프로덕션 디바이스에 앱을 설치하면 해당 터널이 켜지며, network 권한이 있는 사용자는 디바이스의 앱 설정에서 터널을 껐다가 다시 켤 수 있습니다.

전체 예시

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

필드 참조

필드필수설명
name예디바이스 앱 설정에 표시되는 레이블
port예서비스가 수신 대기하는 로컬 포트 번호
main아니오true이면 디바이스 앱 목록의 빠른 접근 아이콘에 이 포트가 사용됨
protocol아니오http(기본값), https, tcp, 또는 udp
remote_port_environment아니오TCP 및 UDP 전용: 디바이스 에이전트가 REMOTE_PORT_FOR_<port>와 함께 터널의 원격 포트를 알리는 추가 변수 이름. 0.19.8 이전의 디바이스 에이전트는 이 이름으로만 알립니다

주입되는 환경 변수

선언한 모든 포트에 대해 플랫폼이 앱의 컨테이너에 환경 변수를 주입하므로, 주소를 하드코딩하지 않고도 코드에서 서비스가 실제로 접근 가능한 위치를 확인할 수 있습니다:

변수설명
DEVICE_LAN_IP로컬 네트워크에서의 디바이스 IP 주소
DEVICE_PORT_FOR_<port>선언한 포트가 로컬 네트워크에 게시되는 디바이스의 포트
REMOTE_PORT_FOR_<port>터널이 활성화된 동안 터널 서버가 할당하는 공개 포트 (TCP 및 UDP, 디바이스 에이전트 0.19.8 이상). 0은 아직 할당되지 않았음을 의미합니다
REMOTE_PORT_FOR_<port>_CLOUD디바이스가 클라우드를 통해 터널을 전달하는 IronFlock 인스턴스에서 실행될 때의 인터넷 연결 포트 (TCP 및 UDP)
TUNNEL_DOMAIN디바이스의 터널 URL을 구성하는 데 쓰이는 도메인: 클라우드에서는 app.ironflock.com, 온프레미스 어플라이언스에서는 어플라이언스의 도메인, 도메인 없이 설치된 어플라이언스(일반 모드)의 엣지 디바이스에서는 localhost
INSTANCE_KEY온프레미스 어플라이언스(인스턴스)에 속한 디바이스에서만 설정됩니다: 해당 디바이스의 클라우드를 통해 전달되는 터널 URL에 포함되는 키

<port>는 port-template.yml에 선언한 포트 번호입니다. 위의 Remote Desktop 예시의 경우, 앱은 DEVICE_PORT_FOR_5900을 받고 터널이 활성화된 동안에는 REMOTE_PORT_FOR_5900도 받게 됩니다. IronFlock SDK는 getRemoteAccessUrlForPort로 이 변수들에서 포트의 원격 접근 URL을 구성합니다. 플랫폼은 CLOUD_TUNNEL_DOMAIN을 설정하지 않습니다: 앱이 이 변수를 직접 설정하지 않는 한, 클라우드를 통해 전달되는 URL은 app.ironflock.com을 사용합니다.

터널은 프로덕션 설치에만 존재합니다. 개발(DEV) 컨테이너에는 자체 터널도 원격 포트도 없습니다 — 대신 디바이스의 로컬 네트워크에서 접근하십시오(DEVICE_LAN_IP, DEVICE_PORT_FOR_<port>).

여러 앱이 동일한 디바이스에서 동시에 실행될 수 있으므로, 선언된 포트는 디바이스의 사용 가능한 포트에 자동으로 매핑됩니다. 선언한 포트가 그대로 사용된다고 가정하지 말고, 항상 주입된 값으로 로컬 네트워크 주소를 구성하세요:

import os lan_ip = os.environ.get("DEVICE_LAN_IP") lan_port = os.environ.get("DEVICE_PORT_FOR_5900") # 서비스는 로컬 네트워크에서 {lan_ip}:{lan_port}로 접근할 수 있습니다

이 변수들은 컨테이너가 시작될 때 설정됩니다. 터널 포트는 앱 실행 중에 변경될 수 있으므로(예: 터널 재연결 시), 터널 포트 변수(REMOTE_PORT_FOR_<port>, 이에 대응하는 _CLOUD 변수, 사용자 지정 remote_port_environment 이름)는 /data/env/<VARIABLE_NAME>.txt 파일로도 항상 최신 상태로 유지되며, IronFlock SDK가 이를 자동으로 읽습니다. 그 밖의 변수는 컨테이너가 재시작될 때만 바뀝니다.

클라우드 포트가 사라지면(클라우드 전달이 꺼진 경우) 디바이스 에이전트는 _CLOUD 파일을 제거합니다. 따라서 에이전트의 파일이 있는 동안 _CLOUD 파일이 없거나 비어 있다는 것은 클라우드 포트가 없다는 뜻이며, SDK는 컨테이너가 시작될 때의 오래된 값으로 폴백하지 않습니다.

에이전트는 /data/env를 root만 읽을 수 있게 합니다. 다른 사용자로 실행되는 컨테이너는 이 파일들을 읽을 수 없습니다: 시작할 때의 값만 볼 수 있고 — 그 이후 바뀐 터널 포트는 볼 수 없으며 — SDK는 경고를 한 번 기록합니다.

프로토콜 작동 방식

HTTP / HTTPS

웹 기반 서비스를 위한 프로토콜입니다. IronFlock이 디바이스의 로컬 포트로 트래픽을 프록시하는 터널 도메인의 URL을 생성합니다. 사용자가 브라우저에서 URL을 엽니다. 이 URL은 비공개이며, 포트를 Public으로 전환하지 않는 한 IronFlock에 로그인하고 디바이스에 대한 접근 권한이 있는 사용자만 열 수 있습니다.

TCP

VNC(원격 데스크톱) 또는 직접 소켓 연결과 같은 프로토콜을 위한 것입니다. IronFlock이 터널 서버에 원격 포트를 할당하고 이를 REMOTE_PORT_FOR_<port>로 앱에 노출하며, 그러면 서비스는 tcp://<TUNNEL_DOMAIN>:<remote port>에서 접근할 수 있습니다.

UDP

LoRaWAN 통신 또는 VPN 터널과 같은 프로토콜을 위한 것입니다. TCP와 유사하게 원격 포트가 할당되고 REMOTE_PORT_FOR_<port>로 노출됩니다.

보드에 임베드

Embed Widget을 사용하여 디바이스의 원격 접근 터널을 보드에 직접 임베드할 수 있습니다. 이를 통해 다음이 가능한 원활한 경험을 만들 수 있습니다:

  • 모든 디바이스에서 글로벌 데이터 모니터링
  • 임베드된 웹 UI를 통해 개별 디바이스와 상호 작용

모두 동일한 대시보드 내에서.

프로덕션 디바이스에 앱을 설치하면 port-template.yml에 있는 모든 포트의 터널이 켜집니다. HTTP 및 HTTPS 터널은 비공개로 유지되어, 포트를 Public으로 전환하지 않는 한 IronFlock에 로그인하고 디바이스에 대한 접근 권한이 있는 사용자만 열 수 있습니다. TCP 및 UDP 터널은 앞단에 로그인이 없는 터널 서버의 원시 포트이므로 앱이 클라이언트를 직접 인증해야 합니다. 디바이스에 대한 network 권한이 있는 사용자는 터널을 껐다가 다시 켤 수 있습니다. 터널 관리를 참조하십시오.

Last updated on