Node-RED on OpenShift Workshop starter (日本語版)

[Node-RED MiniShift Workshop starter](https://github.com/IBMDeveloperUK/node-red-workshop-starter/blob/master/README-ja.md) の OpenShift 環境向けの改変コンテンツです。某ワークショップ用に急ぎ準備しました。ちなみに、元文書の訳者も私です。

# Node-RED on OpenShift Workshop starter

IBM Cloud を使用して、OpenShift on IBM Cloud を使用して、またはローカルで、Node-RED を実行する方法を紹介します。

**事前準備**

ワークショップに必要なサービスを作成するため、環境をセットアップする前に IBM Cloud アカウントが必要です。まだお持ちでない場合には以下の手順で作成してください。

1. [こちらでアカウントを作成します](https://cloud.ibm.com/registration)
2. 送信されたメールのリンクをクリックして、アカウントの確認を実施してください

## IBM Cloud 上で Node-RED を実行する

1. ご自身の [IBM Cloud アカウント](http://cloud.ibm.com) で IBM Cloud にログインします
2. 右上にある "Catalog (カタログ)" をクリック
3. "Node-RED Starter" を探してクリック
4. アプリケーションにユニークな名前を設定して "Create (作成)" をクリック
5. いったんアプリが作成されたら [resource list (リソースの表示)](https://cloud.ibm.com/resources) からアクセスできるようになります

**訳者注:** 以下の日本語のインストール情報も参考になります
* [IBMクラウドで実行する](https://nodered.jp/docs/getting-started/ibmcloud)
* [Node-RED で遊んでみる第一歩: Web ページを表示してみる](https://qiita.com/yamachan360/items/e3c552c1d2e83e5bf602)

【2020年2月7日追記】Node-RED Starter が利用できなくなり、Node-RED App になりました。手順等大きく変更されていますので、ご注意ください(近いうちに新しい作り方を投稿したいと思っています)。

## OpenShift 上で Node-RED を実行する

IBM Cloud 上で OpenShift クラスタが作成済みの状態から開始します。サービス名をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/4832c9c8-6ea2-184c-3849-c435ace39601.png)
未作成の場合には以下の3分間ビデオを参照してください。

* [OpenShiftクラスターを作成する](https://www.youtube.com/watch?v=UJ2frartWFk&list=PLzpeuWUENMK28zoOXBcf4t8KLlIkteOmz&index=47&t=0s)
* [OpenShiftクラスターに対してocコマンドでアクセスする](https://www.youtube.com/watch?v=1OoaERn1HGc&list=PLzpeuWUENMK28zoOXBcf4t8KLlIkteOmz&index=47)
* [OpenShiftクラスターにHelloWorldアプリをデプロイしてみよう](https://www.youtube.com/watch?v=Q7yaXIEAOZo&list=PLzpeuWUENMK28zoOXBcf4t8KLlIkteOmz&index=48)

### OpenShift におけるノードの現状

OpenShift の `nodejs` カートリッジのドキュメントは、以下の場所にあります:

http://openshift.github.io/documentation/oo_cartridge_guide.html#nodejs

### 1. CLI 環境の準備

OpenShift サービスの「アクセス」タブを開き、未導入の場合は CLI ツールを導入します。その後「OpenShift Webコンソール」をクリックして起動。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/b540bdd7-dba8-c05b-6d0a-722e063a945e.png)

OpenShift Webコンソールの右上にあるユーザー名をクリックして、表示される [Copy Login Command] をクリックしてクリップボードにコピー。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/9d8e6f07-49cd-b9c1-7bcf-700316ade74f.png)
それを CLI 環境でペーストして実行すればログイン完了です。たとえばこんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/c21148f8-c4ac-553b-8248-6d5bb132a084.png)


ワークショップなどに参加されていて、IBM Cloud Shell for Workshop 環境が利用できる場合は、PC への CLI ツールの導入は不要です。講師の指示に従ってください。

また Docker 環境のある方は、以下のように実行しても CLI 環境は用意できます。(この環境だけだと git など幾つかツールが足りませんので組み合わせて)

```
docker pull openshift/origin-cli:v3.11
docker run -it openshift/origin-cli:v3.11
```

### 2. OpenShift-Node-RED の入手

**リポジトリのクローン**

先ほどの CLI 環境上で：
1) [starter リポジトリ](https://github.com/emarilly/openshift-node-red) を以下のコマンドでクローンします:

```
git clone https://github.com/emarilly/openshift-node-red
```

2) ディレクトリ (フォルダ) を ``OpenShift-noe-red`` に変更します

```
cd openshift-node-red
```

こんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/be8b9af5-d75a-e644-35c7-bd0d04215633.png)

### 3. ファイルの修正

【2020年2月7日追記】以下で説明した鉛筆アイコンが存在しない環境が確認されています。その場合は補足にあるように vi エディタを用いるか、より簡単に使える [nano エディタ](http://dotnsf.blog.jp/archives/1066662653.html) が用意されていますので使用してください。

#### package.json ファイルの更新

お好きな IDE もしくはテキスト編集ソフトを使用して、`package.json` ファイルを開いて編集します:
1) Node.js エンジンのバージョンを [現在の LTS](https://nodejs.org/en/download/) (`>=10.0.0`) に変更します
2) 上記の Node の LTS にあわせて NPM エンジンのバージョンを (`>= 6.0.0`) に変更します
3) Node-RED の dependency を現在のバージョンにあわせ (`>= 1.0`) に変更します
4) 以下の scripts セクションを追加します

```
  "scripts": {
    "build": "true",
    "start": "node server.js"
  },
```

私は CLI 上の vi でサクっと修正してしまいましたが、Windows や Mac で使い慣れたテキストエディタを利用して修正すればokです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/b317bc28-21a0-f645-63be-a918480851c6.png)
IBM Cloud Shell for Workshop 環境が使えている方は、右の鉛筆マークをクリックして Theia IDE を用いて修正するのが簡単です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/15ab4a86-9620-f638-5544-10865ab321b1.png)

#### server.js ファイルの更新

次に `server.js` ファイルを開いて編集します:
1) basic authentication (BASIC認証) をセットアップしている部分をコメントアウトします

```
//setup basic authentication
//var basicAuth = require('basic-auth-connect');
//self.app.use(basicAuth(function(user, pass) {
//    return user === 'test' && pass === atob('dGVzdA==');
//}));
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/99408576-81c2-de86-2154-7ee42411be9f.png)
2) ローカルポートのデフォルト値を `8080` に変更します

```
self.port      = process.env.OPENSHIFT_NODEJS_PORT || 8080;
```

3) デフォルトの IP アドレスを "0.0.0.0" に変更します

```
self.ipaddress = process.env.OPENSHIFT_NODEJS_IP || "0.0.0.0";
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/8ab43ddd-191d-6195-9f12-484daec39950.png)
4) これらがすべて完了したら、CLI環境に戻って、次のコマンドを実行します:

```
npm install
```

こんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/e1caf7b5-5080-6ebd-96d2-75aa8016ef2e.png)

### 4. Node-RED を OpenShift にプッシュする

1) 名前を付けて新しいアプリケーションを作成します (名前の例: myfirst-node-red)
※ この実行はビルドが失敗します

```
oc new-app nodejs~./ --name=myfirst-node-red
```

2) アプリケーションのビルドを開始します

```
oc start-build myfirst-node-red --from-dir=./
```

3) ``oc status`` コマンドを使用して、いつでもステータスを確認できます

4) ビルドが完了したら、次のコマンドを実行してサービスを取得します

```
oc get service myfirst-node-red
```

5) 以下のコマンドを使用してホスト名でサービスを公開します:

```
oc expose service myfirst-node-red
```

これで完了です! 以下のコマンドを実行し、その結果を参照して、OpenShift で実行されている Node-RED アプリケーションにアクセスできます。

```
oc get route/myfirst-node-red
```

```
NAME               HOST/PORT                                        PATH      SERVICES           PORT       TERMINATION   WILDCARD
myfirst-node-red   myfirst-node-red-node-red.<aaa.bbb.ccc.ddd>.nip.io             myfirst-node-red   8080-tcp                 None
```
6) 表示された URL にブラウザでアクセスしてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/e2235797-03fc-bcad-18ea-6d8c196ba960.png)
OpenShift on IBM Cloud 環境で Node-RED アプリが起動しました！

## ローカル環境で Node-RED を実行する

[Node-RED User Group Japan ウェブサイト](https://nodered.jp/docs/getting-started/local) の指示に従ってください

これで準備完了です！ ワークショップのページに戻って、指示に従ってください。


## トラブルシューティング

1. Minishift でアプリをビルドする場合、最初のビルドでビルドが失敗することがあります。次のコマンドをもう一度実行してください `oc start-build myfirst-node-red --from-dir=./`