PLCのデバイス情報をNode-RED経由でクラウドにアップロードしブラウザから参照できるようにしてみます。
ロードマップ
構成要素 | 機器 | 備考 |
センサ/PLC | 三菱PLC | データはラズパイが取得 |
ゲートウェイ | Raspberry Pi | PLCのデータをクラウドへ送信 |
クラウド | さくらの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円弱)
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 ls
や which 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経由で起動しようとしたが、実行ファイルのパスが正しくなくて起動できなかった という典型的なパターンです。
バージョン指定を見直しましょう
ここまででクラウド側の環境設定は完了です。お疲れ様でした。
コメント