Polski
Zacznij

← Wszystkie szablony · Automatyzacja

Wdróż Node-RED jednym kliknięciem

Przepływy low-code, które łączą API, urządzenia i usługi online

Alternatywa dla Zapier i IFTTT, hostowana u siebie.

Czym jest Node-RED?

Node-RED to narzędzie open source do programowania low-code aplikacji sterowanych zdarzeniami, często używane zamiast Zapiera albo IFTTT. W jego edytorze w przeglądarce przeciągasz węzły na kanwę i łączysz je w przepływy: wiadomość przychodzi z żądania HTTP, tematu MQTT, webhooka albo timera, przechodzi przez węzły, które ją zmieniają, filtrują albo kierują dalej, i trafia do bazy danych, API albo czatu. Węzeł Function uruchamia twój własny JavaScript tam, gdzie żaden węzeł nie pasuje, a biblioteka społeczności ma ponad 6000 węzłów do zainstalowania prosto z edytora.

Node-RED powstał w IBM w 2013 roku, a dziś jest projektem OpenJS Foundation. Używa się go do automatyki domowej, często obok Home Assistanta, do danych z IoT i przemysłu oraz jako spoiwa między usługami webowymi, a hostuje u siebie, żeby automatyzacje działały całą dobę bez opłat za każde uruchomienie. Ten szablon otwiera edytor tylko dla podanej nazwy użytkownika i hasła. Haczyk: trasy węzłów HTTP In są publiczne, więc endpoint, który ma być prywatny, wymaga httpNodeAuth w settings.js albo własnej weryfikacji.

Hosting Node-RED na Pethost

  1. Logujesz się do Pethost kluczem dostępu, przez GitHub albo Google. Nie masz jeszcze maszyny? Wybierasz plan, a link czeka, aż będzie gotowa.
  2. Okno „Nowy projekt” otwiera się na aplikacji Node-RED. Wypełniasz to, o co prosi, i klikasz „Utwórz projekt”: Nazwa użytkownika, Hasło administratora.
  3. Za minutę czy dwie aplikacja Node-RED działa pod własnym adresem z HTTPS. Jej sekrety są tworzone losowo, a dane trafiają do nocnego backupu.
  4. To projekt jak każdy inny: ty albo twój agent możecie go zmienić, cofnąć do wcześniejszej wersji albo przywrócić.

Pytania o Node-RED

Czy Node-RED jest darmowy?

Tak. Node-RED to open source na licencji Apache 2.0 i nic nie kosztuje, bez względu na liczbę przepływów czy wiadomości. Jest projektem OpenJS Foundation.

Jak zainstalować nowe węzły w Node-RED?

Otwórz menu główne, wybierz Manage palette i szukaj w zakładce Install, która pokazuje węzły z biblioteki społeczności. Zainstalowane węzły są przechowywane w wolumenie data, więc przetrwają restarty i kolejne wdrożenia.

Czy Node-RED współpracuje z Home Assistantem?

Tak. Węzły node-red-contrib-home-assistant-websocket komunikują się z Home Assistantem przez jego API WebSocket i REST, żeby reagować na jego zdarzenia i wywoływać jego usługi. Twój Home Assistant musi być osiągalny z maszyny, na której działa Node-RED.

Jak zrobić dashboard w Node-RED?

Zainstaluj @flowfuse/node-red-dashboard przez Manage palette: jego węzły rysują przyciski, wykresy i formularze na stronie, którą udostępnia Node-RED. Starszy node-red-dashboard jest oznaczony jako przestarzały od czerwca 2024 roku.

Jak zabezpieczyć endpointy HTTP w przepływach Node-RED?

Edytor wymaga logowania, ale trasy węzłów HTTP In odpowiadają każdemu. Ustaw httpNodeAuth z użytkownikiem i hashem bcrypt w /data/settings.js, żeby objąć je wszystkie jednym hasłem, albo sprawdzaj token w samym przepływie.

Ile pamięci i miejsca na dysku potrzebuje Node-RED?

Node-RED ma małe wymagania: około 100 MB pamięci; przepływy zajmują kilobajty, a instalowane węzły po kilka megabajtów każdy. Na Pethost wystarczy mu plan Starter, z miejscem na inne aplikacje obok.

Node-RED: plik Docker Compose

Szablon to ten compose.yaml i zmienne zapisywane do .env projektu przy jego tworzeniu. Pethost uruchamia plik dokładnie tak, jak jest napisany.

Kontenery: node-red (nodered/node-red:5).

Wolumeny, w nocnym backupie: 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:

Więcej w kategorii Automatyzacja