[Node-RED]第1章:VPSの契約とUbuntuのセットアップ

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のターミナル)

ubuntuはそれぞれのユーザー名に変更してください。

ssh ubuntu@<VPSのIP>

もしrootでログインする場合は、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を再起動します:
sudo /etc/init.d/ssh restart 

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 のインストール 
npm install -g --unsafe-perm node-red

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でサービス化)

インストールされているNVMのバージョンを確認します。

nvm lswhich node-red で正しいパスに修正してください

見るべきポイント
コマンド: which node-red
出力例:/home/ubuntu/.nvm/versions/node/v22.16.0/bin/node-red

なぜこれを見るのか?
Node-RED の systemd サービスを作るときに、以下のような記述が必要です。ここに出力されたパスを設定します。
ExecStart=/home/ubuntu/.nvm/versions/node/v22.16.0/bin/node-red


また以下のパスの途中のnvmのバージョン値も同様にあわせます。
Environment=PATH=/home/ubuntu/.nvm/versions/node/v22.16.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin



もしnvm -ls として、出力に「-> N/A」と出た場合:
これは、Node.jsが選択されていない状態です。以下で再指定してください:
nvm use <バージョン番号>
例:
nvm use v22.15.1
node-redが起動している場合は停止
停止:[Ctrl + C] または
# プロセスIDを確認してkill
sudo pkill -f node-red

以下のコマンドでサービスファイルを作成します。
nano /etc/systemd/system/nodered.service

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

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

[Service]
ExecStart=/home/ubuntu/.nvm/versions/node/v22.16.0/bin/node-red --max-old-space-size=128 --userDir /home/ubuntu/.node-red
Restart=on-failure
RestartSec=20
KillMode=process

# ユーザーとグループを指定
User=ubuntu
Group=ubuntu

# 作業ディレクトリ
WorkingDirectory=/home/ubuntu

# 環境変数(NVMのNode.jsを使用するため)
Environment=NODE_ENV=production
Environment=PATH=/home/ubuntu/.nvm/versions/node/v22.16.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Environment=HOME=/home/ubuntu

[Install]
WantedBy=multi-user.target

rootユーザーの場合は以下のように設定します。

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

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

[Install]
WantedBy=multi-user.target

保存後:

サービスファイルの権限設定
sudo chmod 644 /etc/systemd/system/nodered.service

systemdの設定を再読み込み
sudo systemctl daemon-reload
# サービスを有効化(自動起動設定)
sudo systemctl enable nodered
# サービスを開始
sudo systemctl start nodered

# サービスの状態確認
sudo systemctl status nodered

# ログの確認
sudo journalctl -u nodered -f

# 自動起動が有効になっているか確認
sudo systemctl is-enabled 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経由で起動しようとしたが、実行ファイルのパスが正しくなくて起動できなかった という典型的なパターンです。

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

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

おまけ:便利なコマンド

# サービス停止
sudo systemctl stop nodered

# サービス開始
sudo systemctl start nodered

# サービス再起動
sudo systemctl restart nodered

# リアルタイムログ表示
sudo journalctl -u nodered -f

# 自動起動を無効化
sudo systemctl disable nodered


もしサービス開始でエラーが出た場合:
# 詳細なログ確認
sudo journalctl -u nodered --no-pager

# Node-REDのパスが正しいか確認
which node-red
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする