×

NVMによるNode.jsとNode-REDのインストール方法

2019-07-10

こんにちは、Lazuriteの開発者一号です。
nvmでNode.jsのバージョンを管理しつつ、Node-REDをインストールし、さらにそれをdaemonで起動する方法を調べていたらできたので、その方法をまとめました。動かない場合も自己責任でお願いします。

nvmのインストールはnvmの公式サイトを参照してください。
ここでインストールしたNode.jsのバージョンでNode-REDを動かして、さらにdaemon起動できる状態にしていきます。

Node-REDのインストール

インストールはこれだけ

[code language=”bash”]
npm install node-red
[/code]

Node-REDの起動方法

Raspberry Piの場合、Node-REDの起動は以下のコマンドで実行できます。

[code language=”bash”]
node –max-old-space-size=128 /home/pi/node_modules/node-red/red.js
[/code]

.bash_aliasなどに以下の一文を追加しておくと、通常通り使用できます。

[code language=”bash”]
alias node-red=’node –max-old-space-size=128 node_modules/node-red/red.js’
[/code]

daemon起動をする設定

通常、daemon起動をすると管理者権限で実行されます。nvmではpiユーザにしか設定をしませんので、通常のnodered.serviceを読み込ませると、「npmコマンドが見つかりません」というメッセージが表示され、「パレットの管理」のメニューが表示されません。

[code language=”bash”]
Jul 9 17:40:25 raspberrypi Node-RED[6405]: 9 Jul 17:40:25 – [info] パレットエディタを無効化 : npmコマンドが見つかりません
[/code]

rootにもnvmをインストールすれば解決するのですがスマートではないので、systemctlが参照するPATHに、npmがインストールされているPATHを参照させます。

以下のようなコマンドでPATHを出力して、PATHの指定をするファイルを作成します。

[code language=”bash”]
echo $PATH
[/code]

作成したファイルがこちら

[code language=”bash”]
PATH=/home/pi/.config/versions/node/v10.16.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games

[/code]

作成したPATHの設定ファイルを、nodered.serviceのEnvironmentFileのパラメータで指定します。

[code language=”bash” file=”/etc/systemd/system/nodered.service”]
[Unit]
After=network-online.target
Documentation=http://nodered.org/

[Service]
Environment="NODE_OPTIONS=–max-old-space-size=128"
#Environment="NODE_RED_OPTIONS=-v"
EnvironmentFile=/home/pi/pi.conf
ExecStart=/home/pi/.config/versions/node/v10.16.0/bin/node $NODE_OPTIONS /home/pi/node_modules/node-red/red.js $NODE_RED_OPTIONS
WorkingDirectory=/home/pi/.node-red/
User=pi
Group=pi
Nice=10
SyslogIdentifier=Node-RED
StandardOutput=syslog
Restart=on-failure
KillSignal=SIGINT

[Install]
WantedBy=network-online.target

[/code]

sudo systemctl start noderedでdaemon起動すれば、npmのPATHも設定されているので、正常に動作します。

Raspberry Piを起動時にnode-redを起動したい時:

sudo systemctl enable nodered

手動でnode-redをdaemon起動したい時:

sudo systemctl start nodered