MAATRIX / Блог / Node-RED на Ubuntu 24.04: пошаговая установка

Node-RED на Ubuntu 24.04: пошаговая установка

MAATRIX

Когда автоматизаций в 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-модулей в палитре хватает:

РесурсМинимумКомфортно
CPU1 vCPU2 vCPU
RAM512 МБ2 ГБ
Диск5 ГБ SSD10-15 ГБ SSD
ОСUbuntu 24.04 LTSUbuntu 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 ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →