Express
IoT
node-red
PORTDay 12

Node Redの紹介

Node-REDの紹介

自宅オンプレミスでCIサーバーを作りたかったので、色々調べたときに、ふと見つけたOSSを紹介します。

注意

信頼境界の概念を
セキュリティは最低限行いましょう

Node-REDとは?

  • もともとはIoT用として作られた

なぜ、そのようなものを作ろうかと思ったのか?

  • Mac環境を使ったセキュアな自作CIサーバーが欲しかった
  • electronのビルドに必要
  • 原因は不明だが、何故かうまくいかない
    • travis ci 仮装mac環境
    • circle ci 仮装mac環境 <=お金かかるのでしていない

どんなことに使えるか

  • slackで通知されたら、ローカルであるプログラムを起動したい
  • 私設サーバーに機密情報をおきたくない
  • IoTを使って、温度などを定期的に取りたい
  • 情報のフローを頻繁に変えたい
  • めんどくさいプログラミングしたくない
  • 速さよりも機能

使ってみて感じたこと

  • マイナーバージョンリリースではあるが使えるユースケースは多そう
  • 初期設定では、セキュリティ機能は一切ないので、第3者からいじり放題
    • サーバーにおセキュリティを自分ですべてしなければならない
    • https化、dockerとか (結構敷居高い)
    • 専門の人にやってもらったほうがいいかも

遭遇したバグ

Node-REDのセキュリティ関連の機能は、nginxプロキシをさせると、一部がバグる(パレッド画面に移動しないなど)
名称未設定ファイル.png (44.4 kB)

Node-REDの起動方法

$ mkdir -p $HOME/Desktop/nodered/data
$ docker run -it --rm \
-p 1880:1880 \
-v $HOME/Desktop/nodered/data:/data \
--name app-nodered \
nodered/node-red-docker
  • -p 1880:1880
  • $HOME/Desktop/nodered/data
    • Node-Redの設定ファイル、プログラミング情報が保存されている

$HOME/Desktop/nodered/dataが自動的に作られる
ディレクトリ構成はこんな感じ
スクリーンショット 2017-11-08 08.29.19.png (27.2 kB)

http://localhost:1880/ 」にアクセスしてて

画面のパーツの説明

パーツは大きく分けて、3つに別れる

名称未設定ファイル (1).png (41.8 kB)

実際に触れてみよう

  1. プログラミングを行うには、「左の flow メニュー」からドラッグ&ドロップで要素を選ぶ
    名称未設定ファイル (2).png (37.2 kB)

  2. 要素をダブルクリック。各flowに詳細設定を行う(なんのURLをトリガとするか)
    スクリーンショット 2017-11-08 08.51.54.png (84.1 kB)

  • 各項目の説明
    • メソッド(どのメソッドをトリガとするか)
    • URL (どのパスから来たものをイベントとしてトリガーするか)
    • 名前 (Node Red内部で使う、ラベルのようなもの)

プログラミングしてみよう

最小構成

httpで/testにGETでアクセスすると、何かしらのデータが入ってくるものを作る

スクリーンショット 2017-11-08 09.00.56.png (25.7 kB)

flowの設定を書き換える

スクリーンショット 2017-11-08 08.54.26.png (20.7 kB)

デプロイボタンでデプロイ

スクリーンショット 2017-11-08 09.01.05.png (4.8 kB)

$ curl http://localhost:1880/test\?payload\=messages
{"payload":"messages"}%

slackとの連携

slack との連携をするには、plaginが必要になる

プラグインのインストール

名称未設定ファイル (4).png (45.8 kB)

コレ選択。右下の「ノードを追加」をクリックすると、インストールができる
名称未設定ファイル (5).png (35.0 kB)

slackのflowが使えるようになります。

スクリーンショット 2017-11-08 11.02.50.png (23.6 kB)

slackbotのapi tokenを使用することで、slack簡単に連携することができます。

名称未設定ファイル (6).png (16.4 kB)

slackを用いた、全体的なフロー図はこのようにしました

名称未設定ファイル (3).png (64.3 kB)

セキュリティについて

Node-REDには、セキュリティ機能として、ユーザ管理機能が一応実装されている(詳しくはここを見よう)

(といっても、ハードコーディングなのだが)
スクリーンショット 2017-11-08 08.34.29.png (80.3 kB)