はじめに
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
コメント