Автозапуск node red windows

Обновлено: 06.07.2024

Node-RED — это flow-based инструмент, созданный для визуального программирования, разработанный IBM для совмещения вместе: устройств, API, онлайн-сервисов и IoT, используемый также совместно с известному нами IBM Watson.

Многие задаются вопросом: зачем вообще использовать Node-red и Home Assistant вместе, ведь они по факту оба являются центрами автоматизации со своими отдельными интерфейсами и зачастую замещают друг друга во многом.

Но как и во всем (вспоминается самый простой пример: совместное использование Apache и NGINX), хотя у обоих функциональностей есть что-то схожее, но у них есть также и сильные/слабые стороны.

При этом слабые стороны Home Assistant, которые всем известны: автоматизации на YAML (ох, без кучи примеров и бест-кейсов из интернета даже разбираться не стоит) и ужасный проброс в HomeKit — прекрасно покрываются Node-red, который как будто создан для написания автоматизаций, и т.к. использует более продвинутый HAP-nodeJS в отличие от используемого HAP-python в Home Assistant, намного стабильнее работает с HomeKit.

Кроме этого, используя Node-red для отправки устройств в HomeKit, у нас появляется возможность самим создавать устройства и настраивать их под себя.

Благодаря тому, что Node-red не совсем opensource продукт, то его установка на наш Raspberry Pi займет буквально несколько минут и потребует всего двух команд: первой мы его устанавливаем, второй добавляем в автозапуск.

    Соответственно, для установки Node-RED вам необходимо вбить данную команду

Отмечу также, что закрыв этот процесс (CTRL+C) node-red не погасится, как это обычно бывает с другими службами. Очень удобно.
Ну и также несколько команд для запуска логов и остановки вам в помощь:

После успешной установки Node-RED нам необходимо связать две системы.

  1. Заходим в интерфейс Node-red
  2. Открываем меню (справа вверху)
  3. Выбираем пункт Manage Palette
  4. Переходим на вкладку Install
  5. Вбиваем в поиск node-red-contrib-home-assistant-websocket
  6. Нажимаем на кнопку установить

После этого ждем установки данного модуля, для надежности в терминале можно открыть лог node-red для того, чтобы контролировать процесс. Пока наш новый модуль устанавливается перейдем к Home Assistant.

Возвращаемся обратно в Node-RED и заканчиваем настройку Home Assistant модуля.

После чего обновляем страницу с Node-RED и довольствуемся тем, что теперь все события из Home Assistant будут попадать в Node-RED, а значит теперь мы сможем воспользоваться полностью его функционалом.

Это вообще не то, что нужно настраивать в node.js, это исключительно ответственность ОС (Windows в вашем случае). Самый надежный способ добиться этого - использовать службу Windows.

Есть очень простой модуль, который устанавливает скрипт узла как службу Windows, он называется node-windows ( npm , github , документация ). Я использовал раньше и работал как шарм.

пс

Я нашел эту вещь настолько полезной, что построил вокруг нее еще более простую в использовании оболочку ( npm , github ).

Установка вашей службы:

Удаление вашей службы:

Я получил ошибку, но она сработала npm install qckwinsvc -g Не работает на win 10 pro. Средство просмотра событий: «Служба node-expjs-dev неожиданно прервана». Хм, как я могу отладить свое приложение без запроса? Я знаю, что инспектор узлов может помочь, но отладка с помощью CMD кажется более интуитивной. Я попытался установить приложение node express в качестве службы, и оно работает (я получаю вывод из вызовов console.log в файле * .out.log), но когда я пытаюсь получить ответ от сервера через свой веб-браузер , Я только что получил 404 обратно.

Если вы используете Linux, macOS или Windows pm2 - ваш друг. Это диспетчер процессов, который очень хорошо обрабатывает кластеры.

Вы устанавливаете его:

Запустите кластер, например, из 3 процессов:

И make pm2 запускает их при загрузке:

КЛАССНО

Зайдите на github и прочтите инструкцию . Он прост в использовании и очень удобен. Лучшее , что с тех пор навсегда .

Сэр, этот ответ заслуживает большего количества голосов. Спасибо. Также я хочу сказать, что pm2 startup нужен один из следующих параметров платформы:, <ubuntu|centos|gentoo|systemd> то есть: Это потрясающе и заслуживает того, чтобы быть лучшим ответом, а также получить больше голосов. Спасибо за это! @baptx Если вас устраивает systemd UX, главная привлекательность pm2 в том, что он более переносимый: дистрибутивы, не основанные на systemd, macOS и Windows.

Если я не ошибаюсь, вы можете запустить свое приложение из командной строки и, следовательно, также с помощью командного файла. В таком случае запустить его с входом в Windows не составит труда.

Вы просто создаете командный файл со следующим содержимым:

и сохраните его с расширением .bat. Здесь myapp.js - это ваше приложение, которое в этом примере находится на диске C: (укажите путь).

Теперь вы можете просто бросить командный файл в папку автозагрузки, которая находится в C: \ Users \% username% \ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ Startup.

Просто откройте его с помощью% appdata% в окне запуска dailog и найдите> Роуминг> Microsoft> Windows> Меню Пуск> Программы> Автозагрузка.

Пакетный файл будет выполнен во время входа в систему и запустит ваше приложение узла из cmd.

Если Node-RED установлен у вас как глобальный npm-пакет, то запустить его можно с помощью команды «node-red».

По ссылкам ниже – руководства по запуску Node-RED на разных аппаратных платформах:

Что дальше

Теперь вы можете создать свой первый поток.

Использование командной строки

  • -s, --settings FILE чтобы задать файл с настройками
  • -u, --userDir DIR чтобы задать пользовательскую директорию
  • -v чтобы включить расширенный вывод данных
  • -?, --help чтобы вызвать справку о команде

Локальный запуск (Linux и Mac OS X)

Если Node-RED расположена локально, то ее тоже можно запустить с помощью «node-red».

Если Node-RED была установлена с помощью npm, то скриптом для запуска будет «node_modules/node-red/bin/node-red» (путь зависит от папки, где вы запускали «npm install»). Если Node-RED была установлена из ZIP-файла, то скриптом для запуска будет «node-red-X.Y.Z/bin/node-red» (путь зависит от папки, куда вы распаковали ZIP-архив).

Сначала давайте сделаем скрипт для запуска Node-RED исполняемым:

Затем запускаем Node-RED с помощью этого скрипта:

Локальный запуск Node-RED (Windows)

На Windows запустите команду ниже из той же директории, где запускали «npm install» или где распаковали ZIP-архив с Node-RED:

Сохранение пользовательских данных

По умолчанию Node-RED сохраняет ваши данные в папку «$HOME/.node-red». Но если Node-RED обнаружит пользовательские данные в папке установки, то будет использовать именно их, а не те, что находятся в папке «$HOME/.node-red» (это сделано в целях обратной совместимости). О том, как переместить данные из папки установки Node-RED в другое место, см. в статье «Обновление».

Чтобы поменять используемую директорию, можно воспользоваться флагом «--userDir».

Передача аргументов базовому процессу Node.js

Бывают ситуации, когда базовому процессу Node.js нужно передать какие-то аргументы. К примеру, это может понадобиться при запуске Node-RED на устройствах вроде Raspberry Pi или BeagleBone Black, имеющих ограниченную память.

Для этого вместо «node-red» нужно воспользоваться скриптом «node-red-pi» (на Windows этот скрипт недоступен):

Кроме того, Node-RED можно запустить при помощи команды «node», но в этом случае аргументы для базового процесса Node.js нужно задать перед «red.js» и аргументами, которые вы хотите передать самой Node-RED.

Запуск Node-RED при загрузке

Есть много способов запуска, остановки и мониторинга приложений в момент загрузки. Если вы пользователь Raspberry Pi, настоятельно рекомендую прочесть вот это руководство.

Если вы пользователь Debian-версии Linux (вроде Ubuntu, Mint, Debian и т.д.), рекомендую прочесть вот этот раздел из руководства по Raspberry Pi, но вам также нужно будет отредактировать загруженный файл «/lib/systemd/system/nodered.service», чтобы его данные соответствовали вашим ID пользователя и окружению.

На наш взгляд, для подавляющего большинства пользователей проще будет воспользоваться методом, описанным в разделе ниже – в нем задействован PM2. На Windows PM2 не автозапускает Node-RED как службу, и вам, возможно, лучше сделать это с помощью NSSM (ссылку на соответствующее руководство см. ниже, в разделе «Альтернативные способы»).

При помощи PM2

PM2 – это диспетчер процессов для Node.js. Он упрощает запуск и – если понадобится – перезапуск приложений при загрузке.

Примечание: PM2 распространяется по лицензии GNU-AGPL-3.0, поэтому перед использованием рекомендую ознакомиться с правилами этой лицензии.

Устанавливаем PM2

Примечание: Команда «sudo» нужна для запуска с помощью пользователя non-root на Linux и OS X. Если у вас Windows, команду выше нужно вызывать в командной оболочке от лица администратора, но без «sudo».

Примечание: Кроме того, если у вас Windows, в пути также должно быть указано «tail.exe».

Определяем локацию установки команды «node-red»

Если Node-RED была установлена как глобальный пакет, то на Linux и OS X командой будет, скорее всего, «/usr/bin/node-red» или «/usr/local/bin/node-red». Чтобы проверить локацию установки, можно воспользоваться командой «which node-red».

Если вы устанавливали Node-RED локально, то командой будет «node_modules/node-red/bin/node-red» (начало пути зависит от того, где вы запускали «npm install»).

Говорим PM2 запустить Node-RED

Команда ниже говорит PM2 запустить Node-RED («/usr/bin/node-red» – это место, где находится команда «node-red»).

Аргумент «--» должен стоять перед всеми аргументами, которые вы хотите передать Node-RED.

Примечание: Если вы работаете с устройством вроде Raspberry Pi или BeagleBone Black, имеющим ограниченную память, то вам нужно будет указать дополнительный аргумент:

Примечание: Если вы хотите запустить Node-RED от лица root-пользователя, вам также нужно указать флаг «--userDir», чтобы задать место, где Node-RED будет хранить ваши данные.

Команда выше запустит Node-RED в фоновом режиме. Чтобы просматривать информацию об этом процессе и его логи, воспользуйтесь командами ниже:

Более подробно об управлении процессами с помощью PM2 читайте тут.

Говорим PM2 запустить Node-RED при загрузке

При помощи PM2 можно сгенерировать и настроить скрипт для запуска Node-RED на разных платформах.

Запустите команды ниже и следуйте инструкциям, которые появятся после этого:

Если у вас более новая версия Linux, где используется systemd, воспользуйтесь вот этой командой:

Примечание (временное): На GitHub открыто обсуждение о проблеме PM2, из-за которой пользователям Linux нужно вручную редактировать сгенерированный файл «/etc/init.d/pm2-init.sh», а также заменить.

. чтобы задать правильную директорию.

Делаем перезагрузку

Наконец, перезагружаемся и проверяем, запускается ли Node-RED как нужно.

Альтернативные способы

Есть много других альтернативных способов запуска Node-RED. Ниже – несколько способов, созданных участниками сообщества:

Node-RED – это конфигуратор Интернета вещей (Internet of Things, IoT), графический инструмент, который поможет вам создать простую схему для объединения любимых приложений, веб-сайтов и аппаратного обеспечения. Node-RED часто сравнивают с IFTTT и поздним Yahoo Pipes, однако этот инструмент обладает большей производительностью, а также поддерживается широким открытым сообществом, которое разрабатывает ноды для взаимодействия с разнообразными приложениями и сервисами.

Данное руководство поможет:

Требования

1: Установка Node.js и npm

Ubuntu 16.04 позволяет быстро установить LTS релиз Node.js из официального репозитория системы:

sudo apt-get install nodejs-legacy

Команда установит Node.js v4.2.x LTS (эта версия будет поддерживаться компанией Node.js Foundation в течение 30 месяцев с момента выхода 12 октября 2015 года).

Примечание: Обязательно нужно установить версию –legacy, как показано в команде, поскольку стартовые скрипты Node-RED требуют, чтобы бинарный файл Node.js назывался node, а не nodejs. В противном случае возникнет конфликт имён.

Убедитесь, что установка прошла успешно:

Команда вернёт номер версии Node.js:

Пакетный менеджер npm (Node Package Manager) позволяет устанавливать и управлять пакетами Node.js. С его помощью можно установить и Node-RED. Установите npm:

sudo apt-get install npm

Убедитесь, что установка прошла успешно, запросив версию npm:

Если команда вернула номер версии, а не ошибку, можно переходить к следующему этапу.

2: Установка Node-RED

Установите Node-RED и вспомогательную утилиту node-red-admin.

sudo npm install -g --unsafe-perm node-red node-red-admin

Установка займёт некоторое время, после чего вы вернётесь в обычную командную строку. Пора протестировать установку.

Для начала откройте порт в брандмауэре.

По умолчанию Node-RED использует порт 1880.

sudo ufw allow 1880

Теперь попробуйте запустить Node-RED.

Примечание: Не забудьте заменить условный домен.

На экране появится интерфейс администратора Node-RED.

Если всё работает должным образом, нажмите CTRL+C, чтобы остановить Node-RED и вернуться в командную строку.

3: Настройка автозапуска Node-RED

Чтобы приложение Node-RED автоматически запускалось во время загрузки сервера, нужно создать файл node-red.service, поскольку Ubuntu 16.04 является первым LTS релизом, который использует систему инициализации systemd.

Откройте пустой service файл по имени node-red.service.

sudo nano /etc/systemd/system/node-red.service

Скопируйте и вставьте в него следующий код, внеся соответствующие коррективы.

Примечание: Подробнее о service-файлах рассказано в статье Основы Systemd: управление сервисами и журналирование.

Рассмотрим файл по частям.

[Unit] Description=Node-RED
After=syslog.target network.target

Этот раздел описывает сервис и сообщает, что он должен быть запущен после syslog и network.

[Service] ExecStart=/usr/local/bin/node-red-pi --max-old-space-size=128 -v
Restart=on-failure
KillSignal=SIGINT

Директива ExecStart содержит команду, с помощью которой запускается сервис. Она вызовет node-red-pi вместо node-red, что позволяет применить некоторые опции Node.js для экономии памяти. Такая команда запустит Node-RED на сервере любого разумного размера (возможность запуска зависит от количества потоков Node-RED). Restart=on-failure попробует перезапустить Node-RED в случае сбоя, а KillSignal подберёт лучший способ закрыть Node-RED, если станет необходимо выключить или перезапустить процесс.

Этот раздел создаёт метку для логирования и регистрирует все выходные данные.

Приложение Node-RED будет запущено с помощью не-root пользователя и его группы в домашнем каталоге.

Теперь нужно включить service-файл.

sudo systemctl enable node-red

Чтобы убедиться, что сервис работает, запустите его вручную:

sudo systemctl start node-red

Откройте Node-RED в браузере и убедитесь, что всё работает. Чтобы остановить сервис, введите:

sudo systemctl stop node-red

4: Настройка Nginx

Создайте новый конфигурационный файл Nginx:

Скопируйте и вставьте в него такой код:

server listen 80;
listen 443 ssl http2;
server_name node-red.example.com;
ssl_certificate /etc/letsencrypt/live/node-red.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/node-red.example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers On;
ssl_session_cache shared:SSL:128m;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8;
location / if ($scheme = http) return 301 https://$server_name$request_uri;
>
proxy_pass http://localhost:1880;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
>
location '/.well-known/acme-challenge' root /var/www/html;
>
>

Примечание: Откорректируйте конфигурацию, указав имя своего сервера и правильный путь к сертификату.

Сохраните и закройте файл.

Первые три строки указывают порты, которые будет слушать Nginx, и доменное имя, на которое он должен отвечать.

Блок location / определяет параметры проксирования Node-RED.

Эта строка указывает на сервис Node-RED, который доступен на localhost и порте 1880. Остальные строки блока задают дополнительные заголовки, необходимые для корректного проксирования. Особенно важны заголовки Upgrade и Connection, они обрабатывают соединения сокетов Node-RED.

location '/.well-known/acme-challenge' root /var/www/html;
>

Чтобы обновить настройки, перезапустите Nginx.

sudo systemctl reload nginx

Для проверки снова запустите Node-RED.

sudo systemctl start node-red

Снова откройте ссылку:

5: Защита Node-RED

Теперь нужно защитить доступ к интерфейсу Node-RED с помощью пароля. Хешируйте пароль, прежде чем добавлять его в конфигурационный файл.

Команда запросит пароль. Введите его, нажмите Enter, и на экране появится хеш пароля. Скопируйте его и добавьте в файл настроек Node-RED:

Найдите и раскомментируйте строку adminAuth (удалите // в начале строки). В строке username укажите имя администратора, а в строку password добавьте хеш пароля.

adminAuth: type: "credentials",
users: [ username: "admin",
password: "$2a$08$Ab9prIr1M8a5a1/Zx8.B9.uIOCPe.v90ZGuZc2kAATp6BHJ/WV5KS",
permissions: "*"
>]

Также нужно раскомментировать строку uihost:

Теперь Node-RED будет прослушивать только локальный интерфейс, и никто не сможет получить доступ к приложению в интернете (только через прокси-сервер Nginx). Сохраните и закройте файл.

Снова обновите настройки брандмауэра:

sudo ufw deny 1880

sudo systemctl restart node-red

Перейдите по ссылке:

На экране появится форма входа.

Заключение

Теперь у вас есть надёжная установка Node-RED. Подробную информацию о приложении можно найти на сайте Node-RED.

Читайте также: