Vagrant で Node-Red を利用する時の忘備録

# 概要
Node-Red 自分の PC の Vagrant (Virtual BOX)で、動作させる時の忘備録です。


# Vagrant で Node-Red が動作する仮想マシンをセットアップする
Vagrant の仮装マシンとして、Ubuntu を選択しました。

~~~
imac:Node_Red maho$ vagrant box list
ubuntu14            (virtualbox, 0)
~~~

Ubuntu14 を利用するとして、ディレクトリ Node_Red を mkdir して、初期化します。

~~~
imac:Node_Red maho$ vagrant init ubuntu14
~~~
仮装マシンを起動します。

~~~
imac:Node_Red maho$ vagrant up 
Bringing machine 'default' up with 'virtualbox' provider...
~~~
仮装マシンへログインします。

~~~
imac:Node_Red maho$ vagrant ssh
~~~


# Node-Redに適した Node.jsのバージョンの環境を作る
最初に、OSを最新の状態に更新します。

~~~
sudo apt-get update
~~~
Node-Redを起動する為に、Node.js と npm をインストールします。

~~~
vagrant@vagrant-ubuntu-trusty-64:~$ sudo apt-get install npm nodejs
~~~
node.jsのバージョンをチェックします。　（古いので利用できない。。。）

~~~
vagrant@vagrant-ubuntu-trusty-64:~$ nodejs --version
v0.10.25
~~~
Node-Redをインストールします。

~~~
vagrant@vagrant-ubuntu-trusty-64:~$ sudo npm install -g node-red
~~~
試しに node-red を起動してみます。

~~~
vagrant@vagrant-ubuntu-trusty-64:~$ node-red
/usr/bin/env: node: No such file or directory
~~~

起動すると、node-redの起動スクリプトのインタプリタの設定がnodeになっているので nodejsに変更して起動します。

~~~
vagrant@vagrant-ubuntu-trusty-64:~$ sudo vi /usr/local/bin/node-red
vagrant@vagrant-ubuntu-trusty-64:~$ node-red
31 Jan 08:47:54 - [info] 

Welcome to Node-RED
===================

31 Jan 08:47:54 - [info] Node-RED version: v0.16.2
31 Jan 08:47:54 - [info] Node.js  version: v0.10.25
31 Jan 08:47:54 - [error] *****************************************************************
31 Jan 08:47:54 - [error] * Unsupported version of Node.js. Requires: >=4 Found: v0.10.25 *
31 Jan 08:47:54 - [error] *****************************************************************
~~~

Node.jsのバージョンが古くて、サポートされないバージョンとの事で、ndenvを入れて、node を最新のバージョンをインストールできる様します。


# Node.jsのバージョンを設定できるndenvを導入する
ndenvを導入するために、git を導入します。

~~~
vagrant@vagrant-ubuntu-trusty-64:~$ sudo apt-get install git
~~~
ndenvの環境をホームディレクトリの.ndenvにクローンします。

~~~
vagrant@vagrant-ubuntu-trusty-64:~$ git clone https://github.com/riywo/ndenv ~/.ndenv
~~~
ログインシェルに、以下の設定を追加して、ndenvが実行される様にします。

~~~
vagrant@vagrant-ubuntu-trusty-64:~$ echo 'export PATH="$HOME/.ndenv/bin:$PATH"' >> ~/.bashrc 
vagrant@vagrant-ubuntu-trusty-64:~$ echo 'eval "$(ndenv init -)"' >> ~/.bashrc
vagrant@vagrant-ubuntu-trusty-64:~$ exec $SHELL -l
vagrant@vagrant-ubuntu-trusty-64:~$ ndenv -v
ndenv 0.4.0-4-ga339097
~~~
ndenvのプラグインを導入して、機能を追加します。

~~~
vagrant@vagrant-ubuntu-trusty-64:~$ git clone https://github.com/riywo/node-build.git ~/.ndenv/plugins/node-build
~~~
下記のコマンドで、インスール可能なnode.jsのリストが表示されます。

~~~
vagrant@vagrant-ubuntu-trusty-64:~$ ndenv install -l
~~~
Node.jaに v7.4.0 を選んで、インストールします。

~~~
vagrant@vagrant-ubuntu-trusty-64:~$ ndenv install v7.4.0
vagrant@vagrant-ubuntu-trusty-64:~$ ndenv global v7.4.0
vagrant@vagrant-ubuntu-trusty-64:~$ ndenv version
~~~


# BOXホストマシンから、アクセス可能なIPアドレスを設定する
仮装マシンのIPアドレスを自PCから、アクセスできる様に、仮装マシンにIPアドレスを追加していきます。
仮装マシンをシャットダウンします。

~~~
imac:Node_Red maho$ vagrant halt
~~~
Vagrantfileを編集します。

~~~
imac:Node_Red maho$ vi Vagrantfile 

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  config.vm.network "private_network", ip: "192.168.33.11"
~~~
再び、仮装マシンを起動します。

~~~
imac:Node_Red maho$ vagrant up
~~~
アクセスできるか、疎通を確認します。

~~~
imac:OpenWhisk maho$ ping 192.168.33.11
PING 192.168.33.11 (192.168.33.11): 56 data bytes
64 bytes from 192.168.33.11: icmp_seq=0 ttl=64 time=204.895 ms
64 bytes from 192.168.33.11: icmp_seq=1 ttl=64 time=0.277 ms
64 bytes from 192.168.33.11: icmp_seq=2 ttl=64 time=0.246 ms
~~~

# 起動後の確認
再びログインして、node-redを起動します。

~~~
imac:Node_Red maho$ vagrant ssh
~~~
起動して、エラーメッセージが無いことを確認します。

~~~
vagrant@vagrant-ubuntu-trusty-64:~$ node-red
31 Jan 09:09:29 - [info] 

Welcome to Node-RED
===================

31 Jan 09:09:29 - [info] Node-RED version: v0.16.2
31 Jan 09:09:29 - [info] Node.js  version: v7.4.0
31 Jan 09:09:29 - [info] Linux 3.13.0-55-generic x64 LE
31 Jan 09:09:30 - [info] Loading palette nodes
~~~

これで、自PCの Virtual BOX 上で動作する Node-Redが起動できました。
ブラウザから http://(Vagrantfileで付与したIPアドレス:1880/　をアクセスすることで、以下の画面を表示できます。

![スクリーンショット 2017-01-31 18.12.18.png](https://qiita-image-store.s3.amazonaws.com/0/42829/687741af-5b2c-773c-194d-5d9ec5d024bf.png)


# Watson と Cloudant の処理ノードを追加

## メモリの増量

Watsonの処理ノードを追加するには、Virtual BOXのメモリが足りないので、増強してから、作業を行います。
vagrant の仮装マシンからログアウトして、以下のコマンドでシャットダウンします。

~~~
# vagrant halt 
~~~

仮装サーバーが止まったら、Vagrantfile を編集します。 次の様にコメントのマーク# を３箇所外して、RAMのサイズを 1024 MB にします。

~~~
  config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
    vb.memory = "1024"
  end
~~~

編集したら再び起動します。

~~~
# vagrant up
~~~

再びログインして、メモリが増えている事を確認します。

~~~
# vagrant ssh
~~~
メモリの量を確認します。

~~~
$ cat /proc/meminfo 
MemTotal:        1017828 kB
<省略>
~~~


## Watson と Cloudant の処理フローを追加
追加する処理ノードは、http://flows.nodered.org/ のウェブページから探してきます。 
追加操作を実行する前に、Node-REDの設定ディレクトリへ移動します。　

~~~
vagrant@vagrant-ubuntu-trusty-64:~$ cd .node-red
~~~
次のコマンドで、Watsonの処理ノードを追加します。 
参考リンク http://flows.nodered.org/node/node-red-node-watson

~~~
$ npm install node-red-node-watson
~~~
さらに、Cloudant の処理ノードを追加します。 
参考リンク http://flows.nodered.org/node/node-red-node-cf-cloudant

~~~
$ npm install node-red-node-cf-cloudant
~~~

これで Node-RED を起動するば完了です。

追加後は、Bluemix の ボイラーテンプレートから作った Node-REDと同じ様になっています。

![スクリーンショット 2017-02-05 22.10.12.png](https://qiita-image-store.s3.amazonaws.com/0/42829/4da20c96-f49e-a897-16a9-1ad35a759f6e.png)