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. Instalar o app em um dispositivo de produção ativa o túnel dessa porta; usuários com o privilégio de rede podem desativá-lo e ativá-lo novamente 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 |
remote_port_environment | Não | Apenas TCP e UDP: um nome de variável adicional sob o qual o agente de dispositivo anuncia a porta remota do túnel, além de REMOTE_PORT_FOR_<port>. Agentes de dispositivo anteriores à 0.19.8 a anunciam apenas sob este nome |
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; agente de dispositivo 0.19.8 e posteriores). 0 significa ainda não atribuída |
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) |
TUNNEL_DOMAIN | O domínio sobre o qual as URLs de túnel do dispositivo são compostas: app.ironflock.com na nuvem, o domínio do appliance em um appliance on-premises, e localhost em um dispositivo de borda de um appliance instalado sem domínio (modo simples) |
INSTANCE_KEY | Definida apenas em um dispositivo que pertence a um appliance on-premises (instância): a chave que as URLs de túnel dele encaminhadas pela nuvem carregam |
<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. Os SDKs do IronFlock compõem a URL de acesso remoto de uma porta a partir dessas variáveis com getRemoteAccessUrlForPort. A plataforma não define CLOUD_TUNNEL_DOMAIN: as URLs encaminhadas pela nuvem usam app.ironflock.com, a menos que o seu app defina essa variável por conta própria.
Túneis existem apenas para instalações de produção. Um container de desenvolvimento (DEV) não recebe túnel nem porta remota próprios — acesse-o pela rede local do dispositivo (DEVICE_LAN_IP, DEVICE_PORT_FOR_<port>).
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 as variáveis de porta de túnel (REMOTE_PORT_FOR_<port>, sua variável _CLOUD correspondente e um nome personalizado definido em remote_port_environment) também são mantidas atualizadas como arquivos em /data/env/<VARIABLE_NAME>.txt — os SDKs do IronFlock leem esses arquivos automaticamente. As demais variáveis só mudam quando o container reinicia.
O agente de dispositivo remove um arquivo _CLOUD quando a porta na nuvem deixa de existir (encaminhamento pela nuvem desligado). Enquanto os arquivos do agente estão presentes, um arquivo _CLOUD ausente ou vazio significa, portanto, que não há porta na nuvem, e os SDKs não recorrem ao valor desatualizado com que o container iniciou.
O agente torna /data/env legível apenas pelo root. Um container que roda como outro usuário não consegue ler esses arquivos: ele vê apenas os valores com que iniciou — nenhuma porta de túnel que tenha mudado desde então — e os SDKs registram um aviso uma única vez.
Como os Protocolos Funcionam
HTTP / HTTPS
Para serviços baseados na web. O IronFlock cria uma URL no domínio do túnel que faz proxy do tráfego para a porta local do dispositivo. Os usuários abrem a URL no navegador. Ela é privada: apenas usuários autenticados no IronFlock com acesso ao dispositivo podem abri-la, a menos que a porta seja alternada para Public.
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>; o serviço fica então acessível em tcp://<TUNNEL_DOMAIN>:<remote 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.
Instalar um app em um dispositivo de produção ativa o túnel de cada porta do seu
port-template.yml. Túneis HTTP e HTTPS permanecem privados — apenas usuários autenticados no IronFlock com acesso ao dispositivo podem abri-los — a menos que uma porta seja alternada para Public. Túneis TCP e UDP são portas brutas no servidor de túnel, sem login na frente, então o app precisa autenticar seus clientes por conta própria. Usuários com o privilégio de rede no dispositivo podem desativar os túneis e ativá-los novamente; veja Gerenciando Túneis.