Русский
Начать

← Все шаблоны · Автоматизация

Задеплойте Node-RED в один клик

Low-code потоки, которые связывают API, устройства и онлайн-сервисы

Альтернатива Zapier и IFTTT на вашей машине.

Что такое Node-RED?

Node-RED — инструмент с открытым кодом для low-code программирования событийно-ориентированных приложений. Его часто запускают вместо Zapier или IFTTT. В его редакторе в браузере вы перетаскиваете узлы на рабочую область и соединяете их в потоки: сообщение приходит из HTTP-запроса, топика MQTT, вебхука или таймера, проходит через узлы, которые меняют, фильтруют или направляют его дальше, и уходит в базу данных, API или чат. Узел Function выполняет ваш собственный JavaScript там, где не подходит ни один узел, а в библиотеке сообщества больше 6000 узлов, которые устанавливаются прямо из редактора.

Node-RED появился в IBM в 2013 году, а сейчас это проект OpenJS Foundation. Его используют для умного дома, часто вместе с Home Assistant, для IoT и промышленных данных и как связующее звено между веб-сервисами, а хостят у себя, чтобы автоматизации работали круглосуточно и без платы за каждый запуск. Этот шаблон пускает в редактор только с заданными именем пользователя и паролем. Подвох: маршруты узлов HTTP In публичны, поэтому эндпоинту, который должен быть закрытым, нужен httpNodeAuth в settings.js или собственная проверка.

Хостинг Node-RED на Pethost

  1. Вы входите в Pethost — с passkey, через GitHub или Google. Машины еще нет? Вы выбираете тариф, и ссылка ждет, пока машина не будет готова.
  2. Окно «Новый проект» открывается на приложении Node-RED. Вы заполняете то, что оно просит, и нажимаете «Создать проект»: Имя пользователя, Пароль администратора.
  3. Через минуту-две Node-RED работает по своему адресу с HTTPS. Секреты создаются случайно, а данные попадают в ночной бэкап.
  4. Это проект как любой другой: вы или ваш агент можете его изменить, откатить или восстановить.

Вопросы про Node-RED

Node-RED бесплатный?

Да. Node-RED распространяется с открытым кодом под лицензией Apache 2.0 и ничего не стоит, сколько бы ни было потоков или сообщений. Это проект OpenJS Foundation.

Как установить новые узлы в Node-RED?

Откройте главное меню, выберите «Управление палитрой» и воспользуйтесь поиском на вкладке «Установить», где перечислены узлы библиотеки сообщества. Установленные узлы хранятся в томе data, поэтому переживают перезапуски и новые деплои.

Работает ли Node-RED с Home Assistant?

Да. Узлы node-red-contrib-home-assistant-websocket общаются с Home Assistant через его WebSocket и REST API: реагируют на его события и вызывают его сервисы. Ваш Home Assistant должен быть доступен с сервера, на котором работает Node-RED.

Как сделать дашборд в Node-RED?

Установите @flowfuse/node-red-dashboard через «Управление палитрой»: его узлы рисуют кнопки, графики и формы на странице, которую отдает Node-RED. Старый node-red-dashboard с июня 2024 года считается устаревшим.

Как защитить HTTP-эндпоинты потоков в Node-RED?

Редактор Node-RED требует входа, а вот маршруты узлов HTTP In отвечают кому угодно. Чтобы закрыть их все одним паролем, задайте httpNodeAuth с пользователем и bcrypt-хешем в /data/settings.js или проверяйте токен в самом потоке.

Сколько памяти и диска нужно Node-RED?

Node-RED: небольшие требования — около 100 MB памяти; потоки занимают килобайты, а каждый установленный узел — несколько мегабайт. На Pethost ему хватит тарифа Starter, и рядом останется место для других приложений.

Node-RED: файл Docker Compose

Шаблон — это этот compose.yaml и переменные, которые пишутся в .env проекта при его создании. Pethost запускает файл так, как он написан.

Контейнеры: node-red (nodered/node-red:5).

Тома, в ночном бэкапе: data.

services:
  node-red:
    image: nodered/node-red:5
    restart: unless-stopped
    environment:
      TZ: ${TZ:-UTC}
      ADMIN_USERNAME: ${ADMIN_USERNAME}
      ADMIN_PASSWORD: ${ADMIN_PASSWORD}
    # The editor would be open to anyone with the address. Node-RED starts with the settings of
    # /data/settings.js, which are yours to edit, and with the username and password of the
    # project's .env as its only sign-in, unless settings.js sets adminAuth itself.
    entrypoint: ["/bin/bash", "-c"]
    command:
      - |
        # The first start: settings.js to edit, and no flow, where the image's would warn of a
        # missing volume, which the project has.
        if [ ! -f /data/settings.js ]; then
          cp node_modules/node-red/settings.js /data/settings.js
          rm -f /data/flows.json
        fi
        cat > /tmp/settings.js <<'END'
        const { createHash, timingSafeEqual } = require("node:crypto");
        const settings = require("/data/settings.js");
        const digest = (text) => createHash("sha256").update(String(text)).digest();
        const user = (username) => (username === process.env.ADMIN_USERNAME ? { username, permissions: "*" } : null);
        settings.adminAuth ??= {
          type: "credentials",
          users: async (username) => user(username),
          authenticate: async (username, password) =>
            timingSafeEqual(digest(password), digest(process.env.ADMIN_PASSWORD)) ? user(username) : null
        };
        module.exports = settings;
        END
        exec ./entrypoint.sh --settings /tmp/settings.js
    volumes:
      - data:/data

volumes:
  data:

Еще в категории «Автоматизация»