После перезагрузки сервера или Raspberry Pi потоки Node-RED перестают работать до тех пор, пока кто-то вручную не выполнит команду node-red в терминале — это главный признак того, что автозапуск не настроен. Проверить состояние можно командой systemctl status nodered: если сервис выводит inactive (dead) или вовсе не найден, платформа стартует только вручную.
Ниже разберём рабочие способы автозапуска для Linux (включая Raspberry Pi OS), Windows и альтернативный вариант через менеджер процессов PM2. Каждый метод завершается проверкой, чтобы вы сразу видели результат, а не гадали, применилась ли настройка.
Почему Node-RED не стартует сам после перезагрузки
При стандартной установке через npm install -g node-red создаётся только исполняемый файл — никакой службы в системе не появляется. Операционная система ничего не знает о том, что при загрузке нужно поднять среду выполнения потоков, поэтому после ребута процесс просто отсутствует.
Другое дело — официальный скрипт установки для Debian-based систем, который предлагает создать systemd-сервис. Но даже в этом случае службу нужно явно включить командой enable, иначе она запустится один раз и не переживёт перезагрузку.
Третья частая причина — сервис создан, но падает при старте: неверный путь к Node.js, права доступа к каталогу ~/.node-red или конфликт порта 1880. В таких случаях автозапуск формально включён, а по факту интерфейс недоступен.
Способ 1: автозапуск через systemd (Linux, Raspberry Pi)
Это рекомендуемый метод для Ubuntu, Debian и Raspberry Pi OS. Сначала убедитесь, что Node-RED установлен глобально и узнайте путь к исполняемым файлам:
which node-red
which node
Если вы использовали официальный установочный скрипт, unit-файл уже существует. Достаточно включить и запустить службу:
sudo systemctl enable nodered.service
sudo systemctl start nodered.service
sudo systemctl status nodered.service
Если сервиса нет, создайте его вручную. Откройте файл sudo nano /etc/systemd/system/nodered.service и добавьте конфигурацию, подставив свои пути и имя пользователя:
[Unit]
Description=Node-RED
After=network.target
[Service]
Type=simple
User=pi
Environment=NODE_OPTIONS=--max_old_space_size=256
ExecStart=/usr/bin/env node-red
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
После сохранения перечитайте конфигурацию и активируйте службу:
sudo systemctl daemon-reload
sudo systemctl enable nodered.service
sudo systemctl start nodered.service
☑️ Проверка автозапуска через systemd
⚠️ Внимание: параметр User= в unit-файле должен совпадать с пользователем, в чьём домашнем каталоге находится папка ~/.node-red с потоками. Если указать другого пользователя, Node-RED стартует с пустым набором потоков или упадёт из-за прав доступа.
Способ 2: автозапуск через PM2
Менеджер процессов PM2 удобен, если на машине уже крутятся другие Node.js-приложения: он даёт единый интерфейс, логи и автоматический перезапуск при падении. Установка выполняется глобально:
sudo npm install -g pm2
Затем запустите Node-RED под управлением PM2 и сохраните список процессов:
pm2 start $(which node-red) -- -v
pm2 save
pm2 startup
Последняя команда выведет строку, которую нужно скопировать и выполнить — она регистрирует PM2 в системе инициализации. После перезагрузки все сохранённые процессы поднимутся автоматически.
Способ 3: автозагрузка в Windows
В Windows нет systemd, поэтому используются другие механизмы. Самый простой — ярлык в папке автозагрузки, но он срабатывает только после входа пользователя в систему. Для серверного сценария это неприемлемо.
Более надёжные варианты:
- 🗔 nssm (Non-Sucking Service Manager) — регистрирует Node-RED как полноценную службу Windows, стартующую до входа пользователя.
- 📅 Планировщик заданий — задача с триггером «При запуске системы» и командой запуска
node-red. - 🔁 pm2-windows-service — обвязка вокруг PM2, создающая службу Windows для сохранённых процессов.
Для nssm последовательность выглядит так: скачайте утилиту с официального сайта, откройте командную строку от имени администратора и выполните nssm install Node-RED. В появившемся окне укажите путь к node-red.cmd (обычно в каталоге глобальных пакетов npm) и рабочую папку. После установки служба появится в оснастке services.msc, где ей можно задать тип запуска «Автоматически».
⚠️ Внимание: NSSM — сторонняя утилита, загружайте её только с официального сайта nssm.cc. Перед настройкой службы убедитесь, что Node-RED корректно стартует вручную из командной строки тем же пользователем, под которым будет работать служба.
Сравнение способов автозапуска
Выбор метода зависит от платформы и того, что ещё работает на машине:
| Способ | Платформа | Старт до входа пользователя | Перезапуск при сбое |
|---|---|---|---|
| systemd | Linux, Raspberry Pi | Да | Да (Restart=on-failure) |
| PM2 + pm2 startup | Linux | Да | Да |
| Папка автозагрузки | Windows | Нет | Нет |
| nssm (служба) | Windows | Да | Настраивается |
Проверка и диагностика проблем
Настройка считается завершённой только после реальной перезагрузки. Выполните sudo reboot, подождите пару минут и откройте в браузере http://адрес-устройства:1880. Если интерфейс загрузился без ручного запуска — автозапуск работает.
Когда после ребута сервис не поднялся, смотрите логи:
sudo systemctl status nodered.service
journalctl -u nodered.service -n 50 --no-pager
Типичные причины сбоя и их признаки:
- 🔍 Неверный путь к node или node-red — в логах ошибка Exec format error или «No such file or directory»; сверьте
ExecStartс выводомwhich. - 👤 Конфликт пользователя — сервис стартует от root, а потоки лежат у другого пользователя; проверьте директиву
User=. - 🔌 Порт 1880 занят — второй экземпляр Node-RED уже запущен вручную или другим сервисом; проверьте
sudo ss -tlnp | grep 1880. - 🧠 Нехватка памяти на Raspberry Pi — процесс убивается OOM-killer; снизьте лимит через
NODE_OPTIONS.
Автозапуск Node-RED в Docker
Если Node-RED работает в контейнере, настраивать systemd внутри не нужно. Достаточно запустить контейнер с политикой перезапуска: docker run -d --restart unless-stopped -p 1880:1880 --name nodered nodered/node-red. Политика unless-stopped поднимает контейнер после перезагрузки хоста, если только вы сами его не остановили.
Автозапуск на Raspberry Pi: нюансы
На Raspberry Pi OS официальный скрипт установки Node-RED сам создаёт сервис nodered.service с пользователем, под которым выполнялась установка. Это самый беспроблемный путь: после скрипта остаётся только включить службу через sudo systemctl enable nodered.
Учтите, что на старых моделях Pi полная загрузка системы занимает заметное время, и Node-RED стартует не мгновенно. Директива After=network.target гарантирует, что сервис поднимется после инициализации сети, но дайте устройству минуту-две, прежде чем делать вывод о неисправности.
Часто задаваемые вопросы
Как отключить автозапуск Node-RED?
Для systemd выполните sudo systemctl disable nodered.service и остановите службу командой sudo systemctl stop nodered.service. Для PM2 — pm2 delete node-red и затем pm2 save, чтобы изменения сохранились после перезагрузки.
Node-RED запускается, но потоки пустые — что случилось?
Скорее всего, служба стартует от другого пользователя, чем тот, под которым вы работали. Потоки хранятся в файле flows.json в каталоге ~/.node-red конкретного пользователя. Проверьте директиву User= в unit-файле и при необходимости скопируйте файлы потоков.
Можно ли настроить автозапуск без прав root?
Да, systemd поддерживает пользовательские сервисы: unit-файл размещается в ~/.config/systemd/user/, а управление выполняется через systemctl --user. Чтобы сервис стартовал без входа пользователя, дополнительно потребуется включить lingering командой loginctl enable-linger имя_пользователя.
Что выбрать: systemd или PM2?
Если на машине только Node-RED — достаточно systemd, это штатный механизм системы. PM2 оправдан, когда под управлением одного менеджера нужно держать несколько Node.js-приложений с общим мониторингом и логами.
Как узнать, включён ли автозапуск прямо сейчас?
Выполните systemctl is-enabled nodered.service. Ответ enabled означает, что служба стартует при загрузке; disabled — автозапуск выключен; masked — служба принудительно заблокирована, и её нужно разблокировать командой sudo systemctl unmask nodered.service.