Configurando Portas
Defina quais serviços seu app expõe para acesso remoto criando um arquivo port-template.yml no diretório .ironflock/.
Exemplo Básico
ports:
- name: Web Interface
port: 5000
main: true
protocol: httpsIsso torna a porta 5000 disponível para acesso remoto. Os usuários podem ativar o túnel nas configurações do app no dispositivo.
Exemplo 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: udpReferência de Campos
| Campo | Obrigatório | Descrição |
|---|---|---|
name | Sim | Rótulo exibido nas configurações do app no dispositivo |
port | Sim | Número da porta local em que o serviço escuta |
main | Não | Se true, esta porta é usada para o ícone de acesso rápido na lista de apps do dispositivo |
protocol | Não | http (padrão), https, tcp ou udp |
Variáveis de Ambiente Injetadas
Para cada porta que você declara, a plataforma injeta variáveis de ambiente nos containers do seu app, para que seu código possa descobrir onde o serviço está realmente acessível — sem endereços fixos no código:
| Variável | Descrição |
|---|---|
DEVICE_LAN_IP | O endereço IP do dispositivo na rede local |
DEVICE_PORT_FOR_<port> | A porta no dispositivo em que sua porta declarada é publicada na rede local |
REMOTE_PORT_FOR_<port> | A porta pública alocada pelo servidor de túnel enquanto o túnel está ativo (TCP e UDP) |
REMOTE_PORT_FOR_<port>_CLOUD | A porta voltada à internet quando o dispositivo roda em uma instância IronFlock que encaminha túneis através da nuvem (TCP e UDP) |
<port> é o número da porta que você declarou em port-template.yml. Para o exemplo de Remote Desktop acima, o app receberia DEVICE_PORT_FOR_5900 e — enquanto seu túnel estiver ativo — REMOTE_PORT_FOR_5900.
Apps podem rodar simultaneamente no mesmo dispositivo, portanto as portas declaradas são mapeadas automaticamente para uma porta livre no dispositivo. Sempre componha os endereços de rede local a partir dos valores injetados, em vez de assumir a porta declarada:
import os
lan_ip = os.environ.get("DEVICE_LAN_IP")
lan_port = os.environ.get("DEVICE_PORT_FOR_5900")
# o serviço está acessível na rede local em {lan_ip}:{lan_port}As variáveis são definidas quando o container inicia. As portas de túnel podem mudar enquanto o app está rodando (por exemplo, quando um túnel reconecta), então os valores atuais também são mantidos atualizados como arquivos em /data/env/<VARIABLE_NAME>.txt — os SDKs do IronFlock leem esses arquivos automaticamente.
Como os Protocolos Funcionam
HTTP / HTTPS
Para serviços baseados na web. O IronFlock cria uma URL pública que faz proxy do tráfego para a porta local do dispositivo. Os usuários abrem a URL no navegador.
TCP
Para protocolos como VNC (Remote Desktop) ou conexões de socket diretas. O IronFlock aloca uma porta remota no servidor de túnel e a expõe ao seu app como REMOTE_PORT_FOR_<port>.
UDP
Para protocolos como comunicação LoRaWAN ou túneis VPN. Semelhante ao TCP — uma porta remota é alocada e exposta como REMOTE_PORT_FOR_<port>.
Incorporando em Boards
Você pode incorporar o túnel de acesso remoto de um dispositivo diretamente em um board usando o Embed Widget. Isso cria uma experiência integrada em que os usuários podem:
- Monitorar dados globais de todos os dispositivos
- Interagir com dispositivos individuais por meio de interfaces web incorporadas
Tudo dentro do mesmo dashboard.
Configurar o acesso remoto em
port-template.ymlnão ativa túneis automaticamente. Apenas usuários com privilégios podem ativar ou desativar túneis em seus dispositivos.