Node-RED 自托管部署指南:打造可视化 IoT 自动化平台

Node-RED 自托管部署指南:打造可视化 IoT 自动化平台 Node-RED 自托管部署指南打造可视化 IoT 自动化平台Node-RED 是 IBM 开源的流程化编程平台通过拖拽节点的方式将各种 API、设备、数据库连接起来无需复杂编码即可构建强大的自动化工作流。从 IoT 设备数据采集到家庭自动化从 HTTP Webhook 处理到 MQTT 消息路由Node-RED 都是理想的选择。本文详细介绍如何在 Linux 服务器上通过 Docker Compose 部署 Node-RED并介绍常用工作流构建方法。前置要求操作系统Ubuntu 22.04 LTS 或 Debian 12已安装 Docker 和 Docker Compose基本 Linux 命令行操作能力开放 1880 端口服务器配置Node-RED 基于 Node.js 构建资源占用极低即使是树莓派也能流畅运行。推荐使用雨云服务器 rainyun-com部署注册填2026off领 5 折1 核 1GB 机型Node.js极轻量树莓派都能跑完全满足 Node-RED 的运行需求入门价格极低适合个人 IoT 和自动化项目。配置建议资源建议规格CPU1 核内存1 GB硬盘10 GB SSD带宽5 Mbps安装 Docker 和 Docker Compose# 安装 Dockercurl-fsSLhttps://get.docker.com|bash-sdocker# 添加当前用户到 docker 组免 sudosudousermod-aGdocker$USERnewgrpdocker# 安装 Docker Composesudoaptinstall-ydocker-compose-plugin# 验证安装docker--versiondockercompose versionDocker Compose 部署 Node-RED创建 Node-RED 工作目录mkdir-p~/nodered/datacd~/nodered创建docker-compose.yml文件nano~/nodered/docker-compose.yml写入以下内容version:3.8services:node-red:image:nodered/node-red:latestcontainer_name:node-redrestart:unless-stoppedports:-1880:1880volumes:# 持久化 Node-RED 数据流程、配置、已安装节点-./data:/dataenvironment:-TZAsia/Shanghai# 设置时区-NODE_RED_ENABLE_PROJECTStrue# 启用项目功能user:1000:1000# 使用非 root 用户运行networks:-nodered-netnetworks:nodered-net:driver:bridge启动 Node-RED# 设置数据目录权限sudochown-R1000:1000 ~/nodered/data# 启动服务dockercompose up-d# 查看运行状态dockercomposepsdockercompose logs-fnode-red启动后访问http://YOUR_SERVER_IP:1880即可进入 Node-RED 编辑界面。配置 settings.js认证与安全Node-RED 默认不开启认证生产环境务必配置用户名密码# 生成密码哈希dockerexec-itnode-rednode-e const bcrypt require(bcryptjs); bcrypt.hash(YourPassword123, 8, function(err, hash) { console.log(hash); });将生成的哈希值填入配置文件nano~/nodered/data/settings.js找到并修改adminAuth部分module.exports{// 管理员认证配置adminAuth:{type:credentials,users:[{username:admin,password:$2b$08$YourGeneratedHashHere,// 填入生成的 bcrypt 哈希permissions:*},{username:viewer,password:$2b$08$AnotherHashForViewer,permissions:read}]},// 启用项目功能Git 版本控制editorTheme:{projects:{enabled:true}},// 日志设置logging:{console:{level:info,metrics:false,audit:false}},// 流程文件位置flowFile:flows.json,// 允许的上下文存储contextStorage:{default:{module:memory},file:{module:localfilesystem}}}修改配置后重启容器dockercompose restart node-red使用 Caddy 配置反向代理可选建议使用 Caddy 为 Node-RED 配置 HTTPSsudoaptinstall-ycaddysudonano/etc/caddy/Caddyfile写入nodered.yourdomain.com { reverse_proxy localhost:1880 }sudosystemctl restart caddy构建第一个工作流HTTP 端点以下是一个接收 HTTP POST 请求并返回 JSON 响应的简单示例在编辑界面从左侧节点库拖入HTTP in节点双击配置Method POSTURL /api/hello拖入Function节点写入以下 JavaScript// Function 节点代码constbodymsg.payload;constnamebody.name||World;msg.payload{message:Hello,${name}!,timestamp:newDate().toISOString(),received:body};returnmsg;拖入HTTP response节点设置状态码 200将三个节点连接HTTP in → Function → HTTP response点击右上角「部署」按钮测试curl-XPOST http://YOUR_SERVER_IP:1880/api/hello\-HContent-Type: application/json\-d{name: Node-RED}示例MQTT 订阅 IoT 数据流模拟 IoT 传感器数据采集流程拖入MQTT in节点配置 Broker 地址和订阅 Topicsensors/#拖入JSON节点自动解析 JSON 字符串拖入Switch节点根据msg.payload.type字段分流温度数据 → 写入数据库告警数据 → 发送通知拖入Debug节点查看消息内容连接MQTT in → JSON → Switch → Debug示例定时任务触发器每天早上 8 点推送天气预报拖入Inject节点配置定时每天 08:00:00拖入HTTP request节点配置天气 API 地址拖入Function节点解析天气数据constweathermsg.payload;msg.payload{to:youremail.com,subject:今日天气${weather.city},body:温度${weather.temp}°C天气${weather.desc}};returnmsg;拖入Email节点发送邮件需安装node-red-node-email安装社区节点Node-RED 拥有丰富的社区节点库通过编辑界面安装点击右上角菜单 → 「节点管理」搜索并安装需要的节点常用社区节点推荐# 通过命令行安装进入容器dockerexec-itnode-redbash# 在容器内执行cd/datanpminstallnode-red-dashboard# 可视化仪表盘npminstallnode-red-contrib-influxdb# InfluxDB 时序数据库npminstallnode-red-contrib-mqtt-broker# 内置 MQTT Brokernpminstallnode-red-node-email# 发送邮件npminstallnode-red-contrib-home-assistant-websocket# 接入 Home Assistantnode-red-dashboard 图表示例安装 Dashboard 后可构建可视化界面安装node-red-dashboard节点拖入gauge仪表盘节点配置 Tab 和 Group将 MQTT 数据流连接到 gauge 节点访问http://YOUR_SERVER_IP:1880/ui查看仪表盘流程导入导出Node-RED 支持导出流程为 JSON 文件方便备份和迁移# 导出在编辑器中选择流程 → 右上角菜单 → Export → 复制 JSON# 命令行备份cp~/nodered/data/flows.json ~/flows_backup_$(date%Y%m%d).json# 导入右上角菜单 → Import → 粘贴 JSON常见问题排查容器启动失败# 检查日志dockercompose logs node-red# 常见问题数据目录权限sudochown-R1000:1000 ~/nodered/data节点无法安装# 检查网络连接dockerexec-itnode-redcurlhttps://registry.npmjs.org# 清除 npm 缓存dockerexec-itnode-rednpmcache clean--force界面无法访问# 检查端口是否开放sudoufw allow1880/tcpsudoufw reload