Node-RED: Primeiros passos

Como começar com o Node-RED

👋 Bem-vindo à documentação da Stackhero!

A Stackhero oferece uma solução Node-RED cloud pronta a usar que proporciona uma série de benefícios, incluindo:

  • Servidor MQTT incluído (Mosquitto).
  • Acesso completo à interface de administração do Node-RED.
  • Dashboard do Node-RED incluído.
  • Servidor de email SMTP ilimitado e dedicado incluído.
  • Atualizações sem esforço com apenas um clique.
  • Nome de domínio personalizável seguro com HTTPS (por exemplo, https://node-red.sua-empresa.com).
  • Desempenho ótimo e segurança robusta alimentados por uma VM privada e dedicada.

Poupe tempo e simplifique a sua vida: leva apenas 5 minutos para experimentar a solução de hospedagem em cloud Node-RED da Stackhero!

Cada instância do Node-RED na Stackhero vem com seu próprio servidor de email dedicado. Este servidor permite enviar notificações por email ilimitadas com apenas alguns cliques.

Para começar a enviar emails a partir da sua instância do Node-RED, adicione um nó "email" ao seu fluxo. Notará dois nós de email na lista de nós. Escolha aquele com o ícone de correio à direita. Uma vez adicionado, o nó será automaticamente nomeado "Stackhero integrated email server" e vem pré-configurado.

Dê um duplo clique no nó de email e insira o seu endereço de email no campo "To:". É melhor deixar o resto das configurações inalteradas.

Em seguida, adicione um nó "inject" ao seu fluxo e conecte-o ao nó de email. Dê um duplo clique no nó inject (nomeado "timestamp" por padrão), selecione "string" como tipo de payload, e insira "This is an email from Node-RED" como payload.

Revise as suas configurações de nós, implemente o seu fluxo, e clique no ícone de ação no nó inject. Depois, verifique a sua caixa de entrada para ver o email enviado do Node-RED!

Dica: Pode enviar emails para vários destinatários separando cada email com um ponto e vírgula no campo "To:".

Nas funções do Node-RED, tentar requerer um módulo nativo do Node.js diretamente resulta no erro ReferenceError: require is not defined. Isto ocorre porque o Node-RED não permite requerer um módulo do Node.js diretamente dentro de uma função.

Para resolver isto, estes módulos foram integrados no contexto global do Node-RED. Pode aceder a eles usando context.global.

Por exemplo, se precisar do módulo crypto, declare-o assim:

const { crypto } = context.global;

Os seguintes módulos do Node.js estão disponíveis: util, buffer, child_process, crypto, fs, os, http, http2, https, e zlib.

Desenvolvemos um nó para conectar a um servidor MySQL que é totalmente compatível com o novo sistema de autenticação do MySQL 8, "Caching SHA2 Password", bem como com o MariaDB.

Nó MySQL/MariaDBNó MySQL/MariaDB

Para mais detalhes, visite o repositório oficial. Para instalar este nó na sua instância do Node-RED, basta procurar por stackhero na seção Gerir paleta do seu painel do Node-RED.

Oferecemos um nó projetado para conectar a uma base de dados InfluxDB v2. Este nó permite escrever dados e realizar consultas usando a linguagem Flux.

Nó InfluxDb-v2Nó InfluxDb-v2

Informações adicionais estão disponíveis no repositório oficial. Para adicioná-lo à sua instância do Node-RED, procure por stackhero na seção Gerir paleta.

Às vezes, os nós podem gerar erros. Uma solução prática é configurar um fluxo "catch all debug" para monitorizar esses erros.

Exemplo de fluxo de captura de erros do Node-REDExemplo de fluxo de captura de erros do Node-RED

Para configurar isto, adicione um nó catch e conecte-o a um nó debug. Configure o nó debug para exibir o objeto msg completo. Esta configuração regista cada erro gerado no fluxo na janela de debug do Node-RED.

Exemplo de erro de nó do Node-RED capturadoExemplo de erro de nó do Node-RED capturado

Um nó catch é apenas acionado por erros de nós dentro do mesmo fluxo. Se usar múltiplos fluxos (ou abas), precisará adicionar os nós catch e debug a cada fluxo.

A Stackhero para Node-RED oferece armazenamento local onde os seus nós podem armazenar ficheiros. Este armazenamento está localizado no diretório /persistent/storage/.

alerta Nunca use outro destino para o seu armazenamento local além de um subdiretório de /persistent/storage/. Se usar outro diretório, perderá os seus dados ao aplicar uma atualização do Node-RED!

Neste exemplo, usaremos o nó node-red-node-sqlite. Este nó requer um diretório para armazenar os seus dados.

Precisará definir um ficheiro no diretório /persistent/storage/, por exemplo, /persistent/storage/myDatabase.sqlite.

Exemplo de configuração SQLite no Node-REDExemplo de configuração SQLite no Node-RED

Se precisar armazenar dados localmente, pode escrever ficheiros no diretório /persistent/storage/. Alguns dados do Node-RED podem já estar presentes neste diretório. Para evitar conflitos, é recomendado usar subdiretórios, por exemplo, /persistent/storage/myFlowData, para armazenar os seus ficheiros.

Para criar este diretório usando Node.js, execute o seguinte código no seu nó:

fs.mkdirSync('/persistent/storage/myFlowData', { recursive: true });

aviso Se planeia armazenar mais do que alguns ficheiros, recomendamos usar um servidor de armazenamento de objetos. Servidores de armazenamento de objetos facilitam a gestão, partilha e acesso a ficheiros via uma API, como com o protocolo S3. Considere o serviço MinIO disponível na Stackhero para este propósito, que lhe oferece um servidor de armazenamento de objetos compatível com S3 em apenas 2 minutos.

Ao usar um iFrame para solicitar conteúdo via um nó HTTP, o cabeçalho padrão X-Frame-Options: SAMEORIGIN pode impedir a exibição da página. A partir da versão 1.2.2-0 do Node-RED, pode substituir este cabeçalho padrão.

Para fazer isso, defina o cabeçalho X-Frame-Options como null no seu nó de resposta HTTP. Por exemplo:

msg.headers = { "X-Frame-Options": null };

Exemplo de um nó definindo o cabeçalho X-Frame-OptionsExemplo de um nó definindo o cabeçalho X-Frame-Options

Pode baixar este exemplo de fluxo e importá-lo na sua instância do Node-RED para testar a funcionalidade.

Note que também pode restringir os domínios permitidos usando os cabeçalhos Content-Security-Policy: frame-ancestors <source> ou X-Frame-Options: ALLOW-FROM <source>.

Se encontrar um erro 502 ao aceder ao seu painel de administração, comece por verificar os logs da sua instância. Pode encontrar estes logs no painel da Stackhero sob a aba "Logs" após selecionar o seu serviço Node-RED.

Os logs podem conter erros do Node-RED que o impedem de iniciar corretamente. Recolha o máximo de informações possível para ajudar a depurar os seus fluxos.

Após rever os seus logs, vá à configuração do seu serviço no painel da Stackhero e ative a opção "Modo seguro". No modo seguro, o Node-RED reiniciará sem iniciar automaticamente os seus fluxos.

Isto permite-lhe aceder ao painel de administração, corrigir os seus erros de fluxo e implementar as suas alterações. Uma vez que tudo esteja a funcionar corretamente, não se esqueça de desativar o modo seguro na configuração do seu serviço para que os seus fluxos iniciem automaticamente ao reiniciar o Node-RED.

Se tentar instalar um nó usando o Gestor de Paleta mas notar que a versão é mais antiga do que a do NPM, provavelmente significa que o criador do nó não atualizou a versão no site do Node-RED.

Anteriormente, as versões dos nós eram automaticamente atualizadas para refletir a versão publicada no NPM. Isto já não é o caso.

A boa notícia é que pode solicitar ao site do Node-RED que atualize a versão. Basta ir a https://flows.nodered.org/add/node, inserir o nome do módulo NPM (por exemplo, node-red-contrib-xxx), e clicar no botão "Add". Uma vez concluído, volte ao seu painel do Node-RED e abra o Gestor de Paleta. A versão atualizada deve agora estar visível e pronta para instalação.

Se vir este erro ao enviar um email, é provável que tenha selecionado a opção "Use secure connection" na configuração do seu nó de email.

Como o servidor de email da Stackhero e o servidor do Node-RED funcionam na mesma instância, eles comunicam localmente, por isso não precisa usar encriptação TLS (SSL). Ativar a opção de conexão segura faz com que o Node-RED use TLS para comunicar com o servidor de email, levando ao erro SSL sobre um "wrong version number".

Por favor, note que se o servidor destinatário suportar encriptação, o email será automaticamente encriptado com TLS. Isto foi pré-configurado para si.