IoT|Node-REDの外部アクセス(マルチユーザ環境)

Arduino開発

はじめに

Node-REDを複数人でそれぞれ別々のフローを作成したい場合には,ポート番号を変更してNode-REDを起動します。また,コマンドラインからのNode-REDの起動では,エラー発生時にサービスが停止してしまうため,Node-REDをpm2のサービスとして起動します。

方法

Node-REDをコマンドラインから起動するには,次のように入力します。ただし,これはNode-REDデフォルト設定の起動となり,このままではポート番号が重複するため複数のNode-REDを起動できません。そこで,Node-REDの設定ファイルと起動オプションを変えて,複数のNode-REDを起動します。

$ node-red &
$ node-red &

Node-RED起動時のポートを変更するには,設定ファイル(setting.js)を用意してuiPortポート番号を変更します。ここでは,1880番ポートに設定しています。

[setting.js]
module.exports = {
    // the tcp port that the Node-RED web server is listening on
    uiPort: process.env.PORT || 1880,
...

この設定ファイルをコピーして,uiPortポート番号を1882に変更して設定ファイル(setting1.js)として保存します。

[setting1.js]
module.exports = {
   // the tcp port that the Node-RED web server is listening on
   uiPort: process.env.PORT || 1882,
...

各ユーザのNode-RED用ディレクトリを作成します。ここに,作成したフロー等が保存されます。

# mkdir /home/node-red/user01
# mkdir /home/node-red/user02

これで準備が整いました。次のコマンドで起動すると,user01用のNode-REDはポート1880番,user02用のNode-REDはポート1882番でそれぞれ起動します。

$ node-red -u /home/node-red/user01 -s /home/node-red/setting.js &
$ node-red -u /home/node-red/user02 -s /home/node-red/setting1.js &

Node-REDログイン時のユーザ名がデフォルトでは,adminなので,[setting.js]admin->user01, [setting1.js]admin->user02に変更しておくと便利です。

[setting.js]
...
    adminAuth: {
        type: "credentials",
        users: [{
            username: "user01",
            password: "<password>",
            permissions: "*"
        }]
    },
...

この要領で,設定ファイルとユーザを増やすと複数のNode-REDが起動できます。ただし,コマンドラインからの起動では,エラー発生時にサービスが停止します。そこで,Node-REDを起動サービスとして登録します。

Node-REDをサービスとして起動

Node-REDをサービスとして起動するため,pm2をインストールします。

# npm install -g pm2

pm2は,Node.jsのアプリをサーバに常駐させるためのツールです。

先ほどの設定を使って,コマンドラインから次のように入力します。pm2に登録するサービス名(name)は,my01,my02としています。サービスを起動・停止・削除するときに必要になります。

# pm2 start /usr/local/bin/node-red --name my01 -- -v -u /home/node-red/user01 -s /home/node-red/user01/setting.js  &
# pm2 start /usr/local/bin/node-red --name my02 -- -v -u /home/node-red/user02 -s /home/node-red/user02/setting01.js &

pm2サービスの状態を確認するには,次のコマンドを入力します。status を確認すると良いでしょう。

# pm2 list

サービスの詳細は,pm2 info <service name>でわかります。サービス起動時のログは,pm2 logs <service name>で調べられます。

# pm2 info my01
# pm2 logs my02

起動に問題なければ,システムに起動サービスとして登録します。

# pm2 save
# pm2 startup

systemdによるサービスの場合は,次のコマンドで起動サービスとして登録できます。

# pm2 startup systemd

pm2を管理するログファイルなどは,環境変数PM2_HOMEの指定場所に保存されます。デフォルトでは/root/.pm2のため,都合の悪い場合は,保存場所を変更しておきます。次のように,環境変数をセットします。

# export PM2_HOME="/var/log/pm2"

まとめ

Node-REDをポート番号をかえて複数起動,複数のユーザでそれぞれ異なるフローを作成できる環境の作り方を示しました。本格的には,ユーザ毎にポートフォワーディングする方法が考えられますが,取り急ぎローカルで使用する場合やサーバが1台しかない場合などには有効な方法だと思います。

  • フローは1つでユーザが複数の場合,設定ファイルにログイン認証を追加して,ユーザを追加すると良いでしょう。ユーザ権限もpermissionで設定できます。
  • デフォルトでは,フロー作成画面やNode-REDによって生成されたページにパスワードがかかっていません。セキュリティのため,ユーザ認証(adminAuth), ページ認証(httpNodeAuth, httpStaticAuth)にパスワードを設定しておくと良いでしょう。

参考

Node-REDの設定:https://nodered.jp/docs/user-guide/runtime/configuration

ブート時にNode-REDを起動:https://nodered.jp/docs/faq/starting-node-red-on-boot

 

コメント

タイトルとURLをコピーしました