Saudações.
O Node-Red é um sistema simples de programar um fluxo de trabalho (workflow) simples, pontual e flexível.
Pré-requisitos (constam em outros artigos aqui do blog):
- Instalação do Linux (Debian);
- Internet no servidor;
- Docker CE instalado;
1 – Apresentando o Node-Red
O Node-Red é mantido pela IBM por meio da OpenJS Foundation, foi criado em 2013 e possui uma maturidade elevadíssima.
É totalmente OpenSource e gratuito, sem limitações de software, sem licença, sem custo adicional com software.
O foco principal é provar uma maneira LowCode (desenhavel) de criar automações para IoT, hardware e dispositivos.
Seu diferencial é a flexibilidade de criação de nodes personalizados para integraçãom com APIs modernas (HTTP, gRPC, ND-JSON).
É possível e fácil criar nodes próprios em Javascript/Typescript (NodeJS).
Ele conta com uma vasta biblioteca online oficial de nodes da comunidade.
Node-RED é ideal para:
- Desenvolvedores que trabalham com IoT e dispositivos conectados;
- Automação residencial (Home Assistant, Raspberry Pi);
- Integração com sensores, PLCs e protocolos industriais (MQTT, OPC-UA, Modbus);
- Edge computing e ambientes industriais (IIoT);
Sites:
- Site oficial: https://nodered.org/
- Workflows: https://flows.nodered.org/
- Criar nodes próprios: https://nodered.org/docs/creating-nodes/
- Componentes da comunidade: https://www.npmjs.com/search?q=node-red
Explore e descubra coisas incríveis!
2 – Instalando no Docker
O Node-Red roda um servidor web na porta HTTP 1880 para edição e gerenciamento de fluxos.
2.1 – Execução simples
Para rodar em Docker para uso imediato:
# Preparar diretorio do volume com permissao correta
mkdir -p /storage/node-red;
chown -R 1000:1000 /storage/node-red;
# Rodar:
docker run -d \
--name node-red \
-h node-red.intranet.br \
-p 1880:1880 \
-e TZ=America/Sao_Paulo \
-v /storage/node-red:/data \
nodered/node-red:latest;
2.2 – Execução com Traefik
Para rodar em nome de DNS (FQDN) público com certificado, instale previamente o Traefik (consta em outros tutoriais do site).
Modo “docker run“
#!/bin/sh
# Variaveis
NAME=node-red;
FQDN="$NAME.$(hostname -f)";
IMAGE=nodered/node-red:latest;
TZ="America/Sao_Paulo";
DATADIR="/storage/$NAME";
# Preparar pasta do volume e ajustar permissoes
mkdir -p $DATADIR;
chown 1000:1000 $DATADIR;
# Obter imagem atualizada
docker pull $IMAGE;
# Rodar/Renovar
# n8n_main1
docker rm -f $NAME 2>/dev/null;
docker run -d \
--name $NAME \
-h $NAME.intranet.br \
\
--network network_public \
--ip=10.249.1.11 \
--ip6=2001:db8:10:249::1:11 \
--mac-address 02:cd:02:49:01:11 \
\
-e TZ=$TZ \
\
-v ${DATADIR}:/data \
\
--label "traefik.enable=true" \
--label "traefik.http.routers.$NAME.rule=Host(\`$FQDN\`)" \
--label "traefik.http.routers.$NAME.entrypoints=web,websecure" \
--label "traefik.http.routers.$NAME.tls=true" \
--label "traefik.http.routers.$NAME.tls.certresolver=letsencrypt" \
--label "traefik.http.services.$NAME.loadbalancer.server.port=1880" \
\
$IMAGE;
Stack para Docker Compose (para quem gosta de Portainer)
services:
node-red:
image: nodered/node-red:latest
container_name: node-red
hostname: node-red.intranet.br
restart: always
tmpfs:
- /run:rw,noexec,nosuid,size=2m
cpus: "8.0"
mem_limit: 4g
memswap_limit: 4g
environment:
- TZ=America/Sao_Paulo
volumes:
- /storage/node-red:/data
networks:
network_public:
ipv4_address: 10.249.1.11
ipv6_address: 2001:db8:10:249::1:11
mac_address: 02:cd:02:49:01:11
labels:
- traefik.enable=true
- traefik.http.routers.node-red.rule=Host(`node-red.seu-site.com.br`)
- traefik.http.routers.node-red.entrypoints=web,websecure
- traefik.http.routers.node-red.tls=true
- traefik.http.routers.node-red.tls.certresolver=letsencrypt
- traefik.http.services.node-red.loadbalancer.server.port=1880
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:1880"]
interval: 30s
timeout: 10s
retries: 3
networks:
network_public:
driver: bridge
enable_ipv6: true
ipam:
config:
- subnet: 10.249.0.0/16
gateway: 10.249.255.254
- subnet: 2001:db8:10:249::/64
gateway: 2001:db8:10:249::ffffObs.: O redirecionamento de portas é opcional ao usar com o Traefik. Deixei a instrução “ports: 1880:1880” mas recomendo que remova quando o acesso pelo Traefik funcionar.
3 – Adicionando nodes da comunidade
Nodes da comunidade aumentam significativamente o poder da sua automação, resumindo em um node o que antes precisaria de uma rede enorme de nós.
Alguns nodes famosos:
- node-red-contrib-influxdb: Integração com InfluxDB (banco de dados de séries temporais), amplamente usado em projetos IoT e monitoramento;
- node-red-contrib-modbus: Suporte completo para Modbus TCP, UDP e Serial, essencial para automação industrial;
- node-red-contrib-telegrambot: Integração com Telegram para bots e notificações, muito usado em projetos de automação residencial;
- node-red-contrib-home-assistant-websocket: Integração com Home Assistant, popular em projetos de casa inteligente;
- node-red-contrib-uibuilder: Cria interfaces web personalizadas sem limitações do Dashboard, suporta Vue, React e outros frameworks;
- node-red-node-mysql: Conecta Node-RED a bancos de dados MySQL/MariaDB, essencial para persistência de dados;
- node-red-contrib-moment: Manipulação avançada de datas e horários usando Moment.js, suporte a timezone, DST e locale;
- node-red-node-mongodb: Integração com MongoDB, popular para aplicações NoSQL;
- node-red-contrib-bigtimer: Timer avançado com suporte a nascer/pôr do sol, muito usado em automação baseada em tempo;
Top nodes mais baixados:
- node-red-dashboard (agora @flowfuse/node-red-dashboard): dashboard melhorada;
- node-red-contrib-cron-plus: Nó de agendamento flexível (cron, eventos solares, datas fixas) com controle dinâmico completo e suporte a fusos horários;
- node-red-contrib-zigbee2mqtt e node-red-contrib-zigbee2mqtt-devices: Integração com dispositivos Zigbee através do Zigbee2MQTT, controlar lâmpadas, sensores e dispositivos Zigbee (Ikea Trådfri, Philips Hue, Xiaomi Aqara, etc.);
- node-red-contrib-aedes: Servidor MQTT broker completo rodando dentro do Node-RED para criar um broker MQTT local sem necessidade de Mosquitto ou outro servidor externo;
- node-red-node-pushbullet / node-red-contrib-pushbell: Enviar notificações push para smartphones e desktops, alertas e notificações de automação residencial, monitoramento de sistemas;
- node-red-contrib-sendgrid / node-red-node-email: Envio de emails através de SMTP ou API do SendGrid, envia alertas por email, relatórios automatizados, notificações de eventos;
- node-red-contrib-http-request: Node HTTP aprimorado com suporte otimizado para proxy, requisições HTTP/HTTPS com recursos avançados, alternativa ao node HTTP nativo quando precisa de recursos adicionais, suporte a proxy HTTPS via CONNECT, conexões persistentes, e mais opções de configuração;
Top nodes de IA/LLM:
- node-red-contrib-ai-agent: Agente de IA que permite processamento de linguagem natural com memória, integração de ferramentas (HTTP e Functions), encadeamento de múltiplos agentes, persistência de memória em arquivo;
- node-red-contrib-ollama: módulo que encapsula a biblioteca ollama.js, ideal para rodar LLMs localmente., oferecendo funcionalidades como nós configuráveis para fácil integração em fluxos (chat, generate, embed, list/pull/push de modelos);
- node-red-contrib-openai: biblioteca que fornece acesso conveniente à API OpenAI, suportando qualquer plataforma compatível com OpenAI API, suporta MCP, endpoint de responses API, compabibilidade com OpenRouter, Groq, etc);
- node-red-ai-toolkit: coleção de nós e fluxos para desenvolvimento low-code interativo de aplicações usando tecnologias de IA, recursos:
- Catálogo de modelos testados;
- Tool Store para expandir agentes;
- Recipe Store para guiar agentes;
- Key-Value e Vector Stores;
- Busca na web (Brave, Startpage);
- LangChain/LangGraph: é possível usar LangGraph importando as bibliotecas diretamente nos function nodes, criando agentes com ferramentas como TavilySearchResults e mantendo histórico de conversação com MemorySaver;
Instalando via repositório NPM:
# Garantir as permissoes do volume para o usuario node-red (UID 1000)
mkdir -p /storage/node-red;
chown -R 1000:1000 /storage/node-red;
# Funcao mais rapida:
nodered_install(){
#USER=root;
USER=node-red;
docker exec \
--user $USER \
-it node-red bash -c \
"npm install $1";
};
# Instalar todos os top-nodes:
nodered_install node-red-contrib-uibuilder;
nodered_install node-red-contrib-moment;
nodered_install node-red-contrib-bigtimer;
nodered_install node-red-contrib-cron-plus;
#nodered_install node-red-contrib-http-request; < vulneravel
# Instalar modulos de banco de dados
nodered_install node-red-contrib-postgresql;
nodered_install node-red-contrib-redis;
nodered_install node-red-node-mysql;
nodered_install node-red-node-mongodb;
# Instalar nodes de IA/LLM:
nodered_install node-red-contrib-ai-agent;
nodered_install node-red-contrib-ollama;
nodered_install node-red-contrib-openai;
# Instalar bibliotecas adicionais de IA/LLM
nodered_install node-red-contrib-ml-rag;
# Instalar langchain:
nodered_install langchain; # Pacote principal
nodered_install @langchain/core; # Principais funcoes
nodered_install @langchain/anthropic; # Para Claude
nodered_install @langchain/google-genai; # Para Gemini
nodered_install @langchain/langgraph; # LangGraph (visual)
nodered_install @langchain/openai; # OpenAI (GPT-4, GPT-3.5, etc)
nodered_install @langchain/google-vertexai; # Google Vertex AI
nodered_install @langchain/google-vertexai-web; # Google Vertex AI
nodered_install @langchain/mistralai; # Mistral AI
nodered_install @langchain/aws; # AWS (Bedrock)
nodered_install @langchain/azure-openai; # Azure OpenAI
nodered_install @langchain/groq; # Groq
nodered_install @langchain/cerebras; # Cerebras
nodered_install @langchain/cloudflare; # Cloudflare Workers AI
nodered_install @langchain/ollama; # Ollama (modelos locais)
nodered_install @langchain/together; # Together AI
nodered_install @langchain/fireworksai; # Fireworks AI
nodered_install @langchain/baidu-qianfan; # Baidu Qianfan
nodered_install @langchain/yandex; # Yandex
# - vector store
nodered_install @langchain/pinecone; # Pinecone
nodered_install @langchain/qdrant; # Qdrant
nodered_install @langchain/weaviate; # Weaviate
nodered_install @langchain/redis; # Redis
nodered_install @langchain/mongodb; # MongoDB Atlas
nodered_install @langchain/milvus; # Milvus
# Conferindo modulos:
docker exec -it --user node-red node-red bash -c 'npm audit';
# Fixar permissoes novamente
# Garantir as permissoes do volume para o usuario node-red (UID 1000)
mkdir -p /storage/node-red;
chown -R 1000:1000 /storage/node-red;
Reinicie o Node-Red para aplicar as novas bibliotecas:
# Reiniciar node-red
docker restart node-red;
Use e abuse, sempre faça backup das suas automações.
4 – Exemplos
Alguns exemplos para ajudar os iniciantes a verem as coisas acontecendo!
4.1 – Webhook/HttpServer com HTML Hello-World
Automação com servidor http (node Network -> http-in), HTML de Hello-World (node Function -> template) e resposta da requisição (node Network -> http response), acesso via https://node-red.seu-dominio.com.br/v1/test01

[
{
"id": "2e065a883bd6c062",
"type": "tab",
"label": "Teste-01",
"disabled": false,
"info": "",
"env": []
},
{
"id": "d88736d783dcec0e",
"type": "http in",
"z": "2e065a883bd6c062",
"name": "test01",
"url": "/v1/test01",
"method": "get",
"upload": false,
"skipBodyParsing": false,
"swaggerDoc": "",
"x": 170,
"y": 240,
"wires": [
[
"8172d84ce8b74fa4"
]
]
},
{
"id": "c468c08b6b68667d",
"type": "http response",
"z": "2e065a883bd6c062",
"name": "reply",
"statusCode": "",
"headers": {},
"x": 550,
"y": 240,
"wires": []
},
{
"id": "8172d84ce8b74fa4",
"type": "template",
"z": "2e065a883bd6c062",
"name": "",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "<!DOCTYPE html>\n<html>\n<head>\n <title>Hello World</title>\n</head>\n<body>\n <h1>Hello World!</h1>\n <p>Esta página foi criada com Node-Red.</p>\n</body>\n</html>",
"output": "str",
"x": 360,
"y": 240,
"wires": [
[
"c468c08b6b68667d"
]
]
}
]“A vida é como uma caixa de chocolates. Você nunca sabe o que vai encontrar.“
Autor: Forest Gump
Terminamos por hoje!
Patrick Brandão, patrickbrandao@gmail.com
