Node-RED на Ubuntu 24.04: пошаговая установка
Когда автоматизаций в Home Assistant становится больше десятка, YAML начинает разваливаться: вложенные условия читаются с трудом, а любая правка требует перезапуска и вдумчивого дебага логов. Node-RED решает это визуально — потоки собираются перетаскиванием узлов и видны целиком на экране. Ниже — рабочая установка на Ubuntu 24.04 с закрытым доступом, автозапуском и связкой с умным домом.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Node-RED и когда он оправдан
Node-RED — среда потокового программирования на Node.js, изначально сделанная в IBM для IoT-сценариев. Логика собирается из узлов (nodes): вход по таймеру или webhook, обработка через function-блок на JavaScript, выход в MQTT, HTTP-запрос, уведомление в Telegram. Каждый узел виден на холсте, а данные между ними бегут по проводам-соединениям — это буквально диаграмма, которая одновременно является работающим кодом.
Типичные сценарии: логика умного дома сложнее того, что удобно описывать в YAML-автоматизациях Home Assistant; связка нескольких API без написания отдельного сервиса; обработка данных с датчиков перед записью в базу; простые интеграционные боты и вебхуки. Если у вас три автоматизации на весь дом — Node-RED избыточен, штатных средств Home Assistant хватит. Если счёт идёт на десятки правил с ветвлениями и таймерами — визуальный редактор экономит часы отладки.
Отдельный вопрос — где его держать. Node-RED часто ставят на тот же Raspberry Pi, что и Home Assistant, и это работает, пока не упираешься в память и I/O SD-карты: движок Node-RED держит в памяти весь граф потоков плюс Node.js рантайм, и при активном использовании function-узлов с внешними npm-модулями потребление растёт быстро. Вынос на отдельный VPS с нормальным диском и 2 ГБ RAM снимает эту головную боль и даёт стабильный IP для входящих вебхуков извне.
Требования к серверу и подготовка Ubuntu 24.04
Для стабильной работы Node-RED с десятком-другим активных потоков и парой десятков npm-модулей в палитре хватает:
| Ресурс | Минимум | Комфортно |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 512 МБ | 2 ГБ |
| Диск | 5 ГБ SSD | 10-15 ГБ SSD |
| ОС | Ubuntu 24.04 LTS | Ubuntu 24.04 LTS |
Если рядом на том же сервере крутится Home Assistant или MQTT-брокер (Mosquitto), закладывайте RAM с запасом — 2 ГБ на весь стек будет тесно, комфортнее от 4 ГБ.
Начните с обновления системы и создания отдельного непривилегированного пользователя — Node-RED не должен работать от root, у него есть узлы exec и function с произвольным JavaScript, и компрометация процесса не должна означать компрометацию всей системы:
apt update && apt upgrade -y
adduser --system --group --home /home/nodered --shell /bin/bash nodered
Дальше вся установка выполняется от этого пользователя.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстанавливаем Node.js 20 LTS и Node-RED
Node-RED требует активную LTS-версию Node.js — на конец августа 2026 года это линейка 20.x или 22.x. Пакет из репозитория Ubuntu 24.04 обычно старее рекомендуемого, поэтому ставим через официальный репозиторий NodeSource:
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
node -v
npm -v
Проверьте, что версия действительно 20.x — если репозиторий NodeSource на момент установки уже переключился на другую LTS-ветку, это нормально, важно лишь чтобы Node.js был в списке поддерживаемых Node-RED версий (см. официальную документацию Node-RED — список сдвигается со временем).
Ставим сам Node-RED глобально через npm, с флагом --unsafe-perm — он нужен, потому что часть зависимостей Node-RED выполняет собственные install-скрипты:
npm install -g --unsafe-perm node-red
Установка занимает пару минут — тянется около сотни пакетов зависимостей. По завершении переключаемся на пользователя nodered и делаем тестовый запуск:
su - nodered
node-red
В логе должен появиться URL вида http://127.0.0.1:1880, а рабочая директория с потоками создастся в ~/.node-red. Останавливаем тестовый запуск через Ctrl+C — постоянную работу настроим через systemd.
Настраиваем systemd-сервис для автозапуска
Ручной запуск в терминале умирает при закрытии сессии SSH. Создаём unit-файл от root:
cat > /etc/systemd/system/nodered.service << 'EOF'
[Unit]
Description=Node-RED
After=network.target
[Service]
Type=simple
User=nodered
Group=nodered
WorkingDirectory=/home/nodered
Environment="NODE_OPTIONS=--max-old-space-size=256"
ExecStart=/usr/bin/node-red --max-old-space-size=256
Restart=on-failure
RestartSec=10
SyslogIdentifier=node-red
[Install]
WantedBy=multi-user.target
EOF
Флаг --max-old-space-size ограничивает память V8-движка — на VPS с 512 МБ-1 ГБ RAM это подстраховка от OOM-killer, если один из function-узлов начнёт копить данные в памяти. На сервере с 2+ ГБ можно поднять значение или убрать ограничение вовсе.
Включаем и запускаем сервис:
systemctl daemon-reload
systemctl enable --now nodered
systemctl status nodered
Логи в реальном времени смотрите через journalctl -u nodered -f. Проверьте, что редактор открывается на http://IP-сервера:1880 — на этом этапе он ещё полностью открыт для интернета, что нужно закрыть немедленно.
Защищаем редактор: пароль, HTTPS и firewall
Открытый порт 1880 без авторизации — это доступ к function-узлам с произвольным JavaScript-кодом на вашем сервере. Первым делом закрываем порт на уровне firewall и настраиваем аутентификацию в самом Node-RED.
Firewall через UFW — разрешаем только SSH и, если нужен внешний HTTPS-доступ, порты 80/443 для будущего reverse proxy, порт 1880 наружу не открываем вообще:
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
Подробный разбор правил и логики UFW — в статье про настройку firewall на Ubuntu 24.04.
Дальше — логин и пароль на сам редактор. Открываем ~/.node-red/settings.js и генерируем bcrypt-хеш пароля встроенной командой Node-RED:
node-red admin hash-pw
Команда запросит пароль дважды и выведет строку вида $2b$08$... — её и вставляем в конфиг. В settings.js находим (или добавляем) блок adminAuth:
adminAuth: {
type: "credentials",
users: [{
username: "admin",
password: "$2b$08$вставьте_сюда_свой_хеш",
permissions: "*"
}]
}
Там же полезно сразу выставить uiHost: "127.0.0.1" — тогда Node-RED слушает только локальный интерфейс, а наружу его отдаёт reverse proxy с HTTPS. Перезапускаем сервис:
systemctl restart nodered
Для HTTPS-домена перед Node-RED ставим Nginx как reverse proxy с автоматическим сертификатом Let's Encrypt — пошагово это разобрано в статье Nginx как reverse proxy на Ubuntu 24.04. Минимальный блок конфига проксирования на Node-RED, включая поддержку WebSocket — редактор активно его использует для live-обновления холста:
location / {
proxy_pass http://127.0.0.1:1880;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
Без правильной проброски Upgrade/Connection редактор будет открываться, но интерфейс начнёт заметно тормозить или терять соединение — WebSocket откатится на менее эффективный polling или вовсе не установится.
Подключаем Home Assistant, MQTT и первый поток
Если Node-RED стоит рядом или отдельно от Home Assistant на Ubuntu 24.04, самый частый мост между ними — палитра node-red-contrib-home-assistant-websocket. Она добавляет узлы для сущностей, состояний и сервисов HA прямо в редактор потоков. Ставится через встроенный менеджер палитр: в интерфейсе — меню (≡) → Manage palette → вкладка Install → поиск home-assistant-websocket → Install.
После установки в потоке появляется узел server — в нём указываете URL Home Assistant (http://ha-host:8123) и Long-Lived Access Token, который генерируется в профиле пользователя HA (Настройки → Профиль → Безопасность → Токены длительного доступа). Дальше состояния сущностей и вызовы сервисов HA доступны как обычные узлы на холсте — можно строить логику сложнее, чем позволяет YAML, и видеть весь граф целиком.
Второй частый сосед — MQTT-брокер (обычно Mosquitto). Узлы mqtt in и mqtt out идут в Node-RED из коробки, без установки дополнительных пакетов. Настройка сервера MQTT — общая для входящего и исходящего узла: адрес брокера, порт (обычно 1883, или 8883 для TLS), при необходимости логин и пароль. Дальше mqtt in с топиком home/+/temperature подписывается на показания всех датчиков сразу, а function-узел между входом и выходом фильтрует и трансформирует данные перед записью или отправкой уведомления.
Простой рабочий пример — уведомление в Telegram при превышении порога температуры: узел mqtt in (топик датчика) → function с проверкой if (msg.payload > 28) { return msg; } return null; → узел http request на Telegram Bot API с chatId и текстом сообщения. Три узла, никакого отдельного сервиса — и логика видна на экране целиком, в отличие от вложенных условий в YAML-автоматизации.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Node-RED заменяет автоматизации Home Assistant или дополняет их?
Дополняет. Простые правила («включить свет по датчику движения») удобнее держать в штатных автоматизациях HA — они ближе к остальной системе и переживают её обновления без правок. Node-RED имеет смысл подключать там, где логика реально сложная: несколько условий, внешние API, обработка данных перед записью.
Нужен ли отдельный VPS, если Home Assistant уже установлен?
Не обязательно — при 2+ ГБ RAM оба сервиса спокойно живут на одном сервере. Разносить стоит, если Node-RED нагружен внешними интеграциями и API-запросами, которые не должны конкурировать за ресурсы с recorder’ом Home Assistant.
Как обновить Node-RED до новой версии?
Останавливаем сервис, переустанавливаем пакет и запускаем заново: systemctl stop nodered && npm install -g --unsafe-perm node-red && systemctl start nodered. Перед обновлением стоит сделать бэкап ~/.node-red — потоки, credentials и установленные узлы палитры лежат именно там.
Как перенести потоки на другой сервер?
Достаточно скопировать файлы flows.json, flows_cred.json и settings.js из ~/.node-red — вместе с списком узлов из package.json в той же директории, чтобы на новом сервере через npm install в ~/.node-red подтянуть те же дополнительные ноды.
Почему после установки новых узлов в палитре они не появляются на холсте?
Node-RED требует перезапуска процесса после установки через Manage Palette в некоторых версиях, особенно если узел тянет нативные зависимости. Проверьте journalctl -u nodered -f на ошибки установки и перезапустите сервис.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →