Node-RED: クイックスタート

Node-REDの始め方

👋 Stackheroのドキュメントへようこそ!

Stackheroは、数多くの利点を提供する、すぐに使えるNode-REDクラウドソリューションを提供しています。

  • MQTTサーバーが含まれています(Mosquitto)。
  • Node-RED管理UIへのフルアクセス。
  • Node-RED ダッシュボードが含まれています。
  • 無制限で専用のSMTP メールサーバーが含まれています。
  • ワンクリックで簡単にアップデート
  • HTTPSで保護されたカスタマイズ可能なドメイン名(例: https://node-red.your-company.com)。
  • プライベートで専用のVMによる最適なパフォーマンスと強力なセキュリティ

時間を節約し、生活を簡素化しましょう: StackheroのNode-REDクラウドホスティングソリューションを試すのに5分しかかかりません!

Stackheroの各Node-REDインスタンスには専用のメールサーバーが付属しています。このサーバーを使用すると、無制限のメール通知を数クリックで送信できます。

Node-REDインスタンスからメールを送信するには、フローに「email」ノードを追加します。ノードリストには2つのメールノードが表示されます。右側にメールアイコンがあるものを選択してください。追加すると、ノードは自動的に「Stackhero integrated email server」と命名され、事前に設定されています。

メールノードをダブルクリックし、「To:」フィールドにメールアドレスを入力します。他の設定は変更しない方が良いです。

次に、フローに「inject」ノードを追加し、メールノードに接続します。injectノード(デフォルトでは「timestamp」と命名)をダブルクリックし、ペイロードタイプとして「string」を選択し、「This is an email from Node-RED」と入力します。

ノードの設定を確認し、フローをデプロイして、injectノードのアクションアイコンをクリックします。その後、Node-REDから送信されたメールを確認するためにメール受信箱をチェックしてください!

ヒント: 「To:」フィールドで各メールをセミコロンで区切ることで、複数の受信者にメールを送信できます。

Node-REDの関数内でNode.jsネイティブモジュールを直接requireしようとすると、ReferenceError: require is not definedというエラーが発生します。これは、Node-REDが関数内でNode.jsモジュールを直接requireすることを許可していないためです。

これを解決するために、これらのモジュールはNode-REDのグローバルコンテキストに統合されています。context.globalを使用してアクセスできます。

例えば、cryptoモジュールが必要な場合は、次のように宣言します。

const { crypto } = context.global;

利用可能なNode.jsモジュールは次の通りです: util, buffer, child_process, crypto, fs, os, http, http2, https, zlib

MySQL 8の新しい認証システム「Caching SHA2 Password」とMariaDBに完全に対応したMySQLサーバーに接続するためのノードを開発しました。

MySQL/MariaDBノードMySQL/MariaDBノード

詳細については、公式リポジトリをご覧ください。このノードをNode-REDインスタンスにインストールするには、Node-REDダッシュボードのパレット管理セクションでstackheroを検索してください。

InfluxDB v2データベースに接続するために設計されたノードを提供しています。このノードを使用すると、データを書き込んだり、Flux言語を使用してクエリを実行したりできます。

InfluxDb-v2ノードInfluxDb-v2ノード

追加情報は公式リポジトリで入手できます。Node-REDインスタンスに追加するには、パレット管理セクションでstackheroを検索してください。

時折、ノードがエラーを生成することがあります。これらのエラーを監視するために「catch all debug」フローを設定するのが実用的な解決策です。

Node-REDエラーキャッチフローの例Node-REDエラーキャッチフローの例

これを設定するには、catchノードを追加し、debugノードに接続します。debugノードを完全なmsgオブジェクトを出力するように設定します。この設定により、フローで生成された各エラーがNode-REDのデバッグウィンドウに記録されます。

Node-REDノードエラーキャッチの例Node-REDノードエラーキャッチの例

catchノードは同じフロー内のノードからのエラーによってのみトリガーされます。複数のフロー(またはタブ)を使用している場合は、各フローにcatchおよびdebugノードを追加する必要があります。

Stackhero for Node-REDは、ノードがファイルを保存できるローカルストレージを提供します。このストレージは/persistent/storage/ディレクトリにあります。

警告 ローカルストレージの宛先として/persistent/storage/のサブディレクトリ以外を使用しないでください。 別のディレクトリを使用すると、Node-REDの更新を適用した際にデータが失われます!

この例では、node-red-node-sqliteノードを使用します。このノードはデータを保存するためのディレクトリを必要とします。

/persistent/storage/ディレクトリにファイルを定義する必要があります。例えば、/persistent/storage/myDatabase.sqliteです。

Node-REDでのSQLite設定の例Node-REDでのSQLite設定の例

ローカルにデータを保存する必要がある場合、/persistent/storage/ディレクトリにファイルを書き込むことができます。このディレクトリにはすでにNode-REDデータが存在する可能性があります。競合を避けるために、例えば/persistent/storage/myFlowDataのようなサブディレクトリを使用してファイルを保存することをお勧めします。

Node.jsを使用してこのディレクトリを作成するには、ノードで次のコードを実行します。

fs.mkdirSync('/persistent/storage/myFlowData', { recursive: true });

注意 数ファイル以上を保存する予定がある場合は、オブジェクトストレージサーバーを使用することをお勧めします。オブジェクトストレージサーバーは、S3プロトコルのようにAPIを介してファイルを管理、共有、アクセスしやすくします。この目的のために、Stackheroで利用可能なS3互換のオブジェクトストレージサーバーを2分で提供するMinIOサービスを検討してください。

iFrameを使用してHTTPノード経由でコンテンツを要求する場合、デフォルトのヘッダーX-Frame-Options: SAMEORIGINがページの表示を妨げる可能性があります。Node-REDバージョン1.2.2-0以降、このデフォルトヘッダーを上書きすることができます。

これを行うには、HTTPレスポンスノードでヘッダーX-Frame-Optionsnullに設定します。例えば:

msg.headers = { "X-Frame-Options": null };

X-Frame-Optionsヘッダーを設定するノードの例X-Frame-Optionsヘッダーを設定するノードの例

このフロー例をダウンロードして、Node-REDインスタンスにインポートして機能をテストできます。

また、Content-Security-Policy: frame-ancestors <source>またはX-Frame-Options: ALLOW-FROM <source>ヘッダーを使用して許可されたドメインを制限することもできます。

管理ダッシュボードにアクセスする際に502エラーが発生した場合、まずインスタンスのログを確認してください。これらのログは、Node-REDサービスを選択した後、Stackheroダッシュボードの「ログ」タブで見つけることができます。

ログには、Node-REDが正しく起動できないエラーが含まれている可能性があります。フローのデバッグを支援するために、できるだけ多くの情報を収集してください。

ログを確認した後、Stackheroダッシュボードのサービス設定に移動し、「セーフモード」オプションを有効にします。セーフモードでは、Node-REDはフローを自動的に開始せずに再起動します。

これにより、管理ダッシュボードにアクセスしてフローエラーを修正し、変更をデプロイできます。すべてが正常に動作するようになったら、Node-REDの再起動時にフローが自動的に開始されるように、サービス設定でセーフモードを無効にすることを忘れないでください。

パレットマネージャーを使用してノードをインストールしようとした際に、バージョンがNPMのものより古いことに気付いた場合、それはおそらくノードの作成者がNode-REDウェブサイトでバージョンを更新していないことを意味します。

以前は、ノードバージョンはNPMに公開されたバージョンを反映するように自動的に更新されていましたが、現在はそうではありません。

良いニュースは、Node-REDウェブサイトにバージョンを更新するよう促すことができることです。単にhttps://flows.nodered.org/add/nodeにアクセスし、NPMモジュール名(例:node-red-contrib-xxx)を入力し、「Add」ボタンをクリックします。完了したら、Node-REDダッシュボードに戻り、パレットマネージャーを開きます。更新されたバージョンが表示され、インストールの準備が整っているはずです。

メール送信時にこのエラーが表示される場合、メールノード設定で「Use secure connection」オプションを選択したためである可能性があります。

StackheroメールサーバーとNode-REDサーバーは同じインスタンス上で動作しているため、ローカルで通信します。そのため、TLS(SSL)暗号化を使用する必要はありません。セキュア接続オプションを有効にすると、Node-REDがメールサーバーと通信するためにTLSを使用し、「wrong version number」に関するSSLエラーが発生します。

受信サーバーが暗号化をサポートしている場合、メールは自動的にTLSで暗号化されることに注意してください。これは事前に設定されています。