[Node-RED]第1章:VPSの契約と設定

PLCのデバイス情報をNode-RED経由でクラウドにアップロードしブラウザから参照できるようにしてみます。

ロードマップ

構成要素機器備考
センサ/PLC三菱PLCデータはラズパイが取得
ゲートウェイRaspberry PiPLCのデータをクラウドへ送信
クラウドさくらのVPSクラウドデータベース
ダッシュボードNode-REDユーザー用画面

1章:さくらのVPSの契約と設定(Node-RED常駐まで)

2章:VPSのNode-REDプログラミング

3章:Raspberry Piのセットアップ・Node-REDプログラミング

4章:VPSのNode-REDにてダッシュボード構築

5章:PLCとの通信

開発の全体図

[PLC] ──(MCプロトコル)──> [Raspberry Pi] ──(MQTT/HTTP)──> [クラウド] ──> [可視化画面(スマホ・PC)]

ステップ1:さくらのVPSの契約と設定

VPSを契約しましょう。今回は比較的人気なさくらのVPSを契約してみます。

1Gまたは2Gプランを契約(月額1000円弱)

VPS(仮想専用サーバー)|さくら...
VPS(仮想専用サーバー)|さくらインターネット さくらのVPS(仮想専用サーバー)のご案内です。全プランSSD対応・root権限付き!

OSは Ubuntu 22.04 を選択(GUI不要)

契約完了後、固定IPアドレスSSH情報が発行される

ローカルPCからSSH接続(例:Tera Term, Windows Terminal, macOSのターミナル)

Rootのパスワードを聞かれるが、おそらくここまでのセットアップでrootのパスワードは設定していないと思います。

なのでこのままではrootでログインはできません。

なので、VNCコンソールから一旦初期に設定したユーザーでログインして以下のコマンドを入力してパスワードを変更します。

ユーザーでログイン後、以下のコマンドを実行:
sudo passwd root

以下のような表示になります:
Enter new UNIX password: (ここで新しいrootパスワードを入力)
Retype new UNIX password: (もう一度同じパスワードを入力)
passwd: password updated successfully

これで root のパスワードが設定されます。

rootログインを有効にする(念のため)

UbuntuのSSH設定では、初期状態で root ログインが禁止されていることがあるため、以下のファイルを確認・修正します。
sudo nano /etc/ssh/sshd_config

以下の行を探してください:
#PermitRootLogin prohibit-password

これを次のように変更:
PermitRootLogin yes

変更したら Ctrl + O → Enter → Ctrl + X で保存して、SSHを再起動します:

ssh root@xxx.xxx.xxx.xxx(契約したVPSのアドレス)
先ほど設定したrootパスワードを入力すればログインできます。

補足:推奨される方法

セキュリティ上、rootログインではなく「ubuntuユーザー + sudo」で運用するのが一般的です。
ただし、学習目的や初期構築段階では root ログインでも構いません。

ステップ2:クラウド上にNode.js と Node-RED のインストール(推奨:nvmを使用)

 ① 必要パッケージの更新
apt update && apt upgrade -y

② nvm(Node Version Manager)のインストール
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

完了後、以下を実行してnvmを使えるようにします:
source ~/.bashrc


③ Node.js(LTS版)のインストール
nvm install --lts

インストール確認:
node -v
npm -v
バージョンが表示されればOK

④ Node-RED のインストール ダッシュボードなどの互換性を考えて1.0系でバージョン指定
npm install node-red-dashboard@2.30.0

Step 3:Node-RED を起動してみる

一度起動して動作確認します:
node-red

以下のような表示が出れば成功です:
...
Server now running at http://127.0.0.1:1880/

ブラウザから確認
別PCのブラウザで http://<VPSのアドレス>:1880 にアクセス

Node-REDの画面が表示されればOK!

NOTE!もしも画面が表示されない場合

さくらのVPSコントロールパネルにログイン

該当VPS → 「パケットフィルタ」タブ

下記のように 「1880番ポート」または「全許可」ルール を追加

例:許可:TCP / ポート: 1880 / ソース: 任意 or 自分のIP

※ 最初は「パケットフィルタOFF」にして試すのもOKです。

これで改善しない場合は次の確認

Node-REDの設定ファイルを編集:
nano ~/.node-red/settings.js

次の行を探します:
//uiHost: "127.0.0.1",

これを以下のように修正して コメントアウトを外し、全IPにバインド:
uiHost: "0.0.0.0",

保存してNode-REDを再起動:
pkill node-red
node-red

再度、ブラウザで http://<VPSのIP>:1880 にアクセスしてみてください。

Step 4:Node-RED を常時稼働させる(systemdでサービス化)

node-redが起動している場合は停止
停止:[Ctrl + C]
以下のコマンドでサービスファイルを作成します。

nano /etc/systemd/system/nodered.service

中身を以下のように記述(ExecStart のパスは which node-red で確認):

[Unit]
Description=Node-RED
After=network.target

[Service]
ExecStart=/root/.nvm/versions/node/v22.15.1/bin/node-red
Restart=on-failure
User=root
Environment=PATH=/root/.nvm/versions/node/v22.15.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

[Install]
WantedBy=multi-user.target

※ バージョンは nvm lswhich node-red で正しいパスに修正してください

見るべきポイント
コマンド:
nvm ls

出力例:
root@os3-371-18523:~# nvm ls

->     v22.15.1
default -> lts/* (-> v22.15.1)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v22.15.1) (default)
stable -> 22.15 (-> v22.15.1) (default)
lts/* -> lts/jod (-> v22.15.1)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.12 (-> N/A)
lts/fermium -> v14.21.3 (-> N/A)
lts/gallium -> v16.20.2 (-> N/A)
lts/hydrogen -> v18.20.8 (-> N/A)
lts/iron -> v20.19.2 (-> N/A)
lts/jod -> v22.15.1

見るべきポイントはココ!
->     v22.15.1

この「->」がついているバージョンが 「現在アクティブなNode.jsのバージョン」 です。

なぜこれを見るのか?
Node-RED の systemd サービスを作るときに、以下のような記述が必要です:
ExecStart=/root/.nvm/versions/node/**v22.15.1**/bin/node-red
このパスの v22.15.1 の部分に、nvm ls で表示されたアクティブバージョンを使う必要があります。

また以下のパスの途中に数値も同様にあわせます。
Environment=PATH=/root/.nvm/versions/node/v22.15.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin


もし出力に「-> N/A」と出た場合:
これは、Node.jsが選択されていない状態です。以下で再指定してください:
nvm use <バージョン番号>
例:
nvm use v22.15.1

保存後:

systemctl daemon-reexec
systemctl enable nodered
systemctl start nodered

Step 5:ファイアウォール(UFW)設定

必要なポートを許可します:

ufw allow ssh
ufw allow 1880/tcp
ufw enable

Step 6:自動起動できているか確認

sudo reboot

再度sshでログイン

systemctl status nodered


出力例(正常時):

● nodered.service - Node-RED
   Loaded: loaded (/etc/systemd/system/nodered.service; enabled; vendor preset: enabled)
   Active: active (running) since ...(← ✅ここが重要)
状態意味
active (running)Node-REDが起動中 ✅
inactive (dead)起動していない(サービス失敗か未起動) ❌
failedエラーで起動できなかった ❌

こんなエラーが出た場合

× nodered.service - Node-RED
     Loaded: loaded (/etc/systemd/system/nodered.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Sat 2025-05-17 23:19:48 JST; 1min 3s ago
    Process: 554 ExecStart=/root/.nvm/versions/node/v22.15.1/bin/node-red (code=exited, status=127)
   Main PID: 554 (code=exited, status=127)
        CPU: 1ms

May 17 23:19:48 os3-371-18523 systemd[1]: nodered.service: Scheduled restart job, restart counter is at 5.
May 17 23:19:48 os3-371-18523 systemd[1]: Stopped Node-RED.
May 17 23:19:48 os3-371-18523 systemd[1]: nodered.service: Start request repeated too quickly.
May 17 23:19:48 os3-371-18523 systemd[1]: nodered.service: Failed with result 'exit-code'.
May 17 23:19:48 os3-371-18523 systemd[1]: Failed to start Node-RED.

このエラーは、Node-REDが systemd経由で起動しようとしたが、実行ファイルのパスが正しくなくて起動できなかった という典型的なパターンです。

バージョン指定を見直しましょう

ここまででクラウド側の環境設定は完了です。お疲れ様でした。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする