Intern

さくらVPSでNode-REDを動かす(11日目)

はじめに

今回はさくらVPSというサーバーをレンタルし、そのサーバー上でNode-REDを立ち上げた
また、ホストマシーンで起動しているNode-REDでデータを取得し、サーバー上のMQTTBrokerでデータを送信、サーバー上のNode-REDで受信、サーバ上のInfluxDBにデータを格納後、Grafanaで可視化させる。

さくらVPSとは

引用元:https://00m.in/ttlmR

さくらVPS(Virtual Private Server)は、さくらインターネット株式会社が提供する仮想専用サーバーサービスである。このサービスは、高いパフォーマンスと自由度を兼ね備えた仮想サーバーをリーズナブルな価格で利用できることから、個人から企業まで幅広いユーザーから支持されている。

さくらサーバーのインストール・起動手順

①下記のリンクを開き、「さくらのVPS お申込みはこちら」を押す

さくらのVPS「お試し期間」仕様変更のお知らせ – さくらのVPSニュース (sakura.ad.jp)

➁Linuxから選ぶ → OS選択(今回はRockyLinuxを選択)

➂サーバーの詳細設定(今回は以下の環境で設定)

  ・プラン:メモリ1Gプラン
  ・リージョン:石狩第1
  ・パスワード:任意のパスワードを設定
  ・SSHキー設定/サーバーの名前は任意で設定
  ・スタートアップスクリプト:ここで以前はNodeREDを選択できたと思われる…

 ➃お支払方法等の設定を行う

無料でレンタルする場合は、無料2週間レンタルを選択する

 ➄さくらインターネットの会員登録とログインを行う

  ログイン画面:https://secure.sakura.ad.jp/auth/login

 ➅契約中のサービス一覧→サーバーのコントロールパネルを開く

 ⑦「電源操作」→「起動する」を選択する

サーバー上でNode-REDを立ち上げる

・接続ポートの設定
 →「サーバー」→「パケットフィルター設定」→「パケットフィルターを設定

・パケットフィルターを追加し以下の設定を行う

 フィルターの種類:「カスタム
 ポート番号:「1880

・「CMD」等で以下のコードを入力する

 ・サーバーログイン
  ・今回はrockyLinuxを使用しているため、管理者名は「rocky」となっている
  ・”your_host_name”はサーバーの基本情報から確認可能
   →パスワードを要求されるのでサーバーの設定で指定したパスワードを入力

ssh rocky@"your_host_name"

サーバーを起動していないとログインできないので注意

・サーバー更新

sudo dnf update

サーバー上の環境設定

1. Node-REDのインストール


・Node.js 18.xのインストール (Node-REDで使用するため)

curl -sL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo dnf install -y nodejs

・以下のコマンドでバージョン確認

node -v
npm -v

・Node-REDのインストール

sudo npm install -g --unsafe-perm node-red

・Node-RED起動

node-red

2. Mosquittoのインストール

依存関係のインストール

最初に、Mosquittoのインストールに必要な依存関係をインストールする

sudo dnf install epel-release

Mosquittoのインストール

EPELリポジトリからMosquittoをインストールする
→「y/N」と聞かれるので「y」を入力して「Enter」

sudo dnf install mosquitto mosquitto-clients

Mosquittoサービスの起動

Mosquittoサービスを起動する

sudo systemctl start mosquitto

Mosquitto設定ファイルの編集

Mosquittoの設定ファイルを vi で開く

sudo vi /etc/mosquitto/mosquitto.conf

 ・「i」を押してノーマルモードから編集モードに切り替える
 ・設定ファイル内の「Listenersセクションを探す
 ・以下の画像の通りに中身を書き加える
  →この設定でMosquittoはどのIPアドレスからの接続も受け付けるようになる
 ・「Escキー」を押した後に「:wq」を入力して設定ファイルを保存して終了

listener 1883.0.0.0.0 # This line allows listening on all interfaces on port 1883

# Allow anonymous connections.
allow_anonymous true # This line allows anonymous clients to connect

 ・最後にMosquittoの再起動を行う

sudo systemctl restart mosquitto

 ・以下の画像で1883ポートの接続が可能となったことが分かる

・Mosquittoサービスが正常に動作しているか確認

sudo systemctl status mosquitto

3. InfluxDBのインストールと設定

InfluxDBのリポジトリを作成

InfluxDataの公式リポジトリをシステムに追加する
→ 常に最新バージョンを取得することができる

sudo tee /etc/yum.repos.d/influxdb.repo <<EOF
[influxdb]
name = InfluxDB Repository - Stable
baseurl = https://repos.influxdata.com/rhel/8/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdata-archive_compat.key
EOF

InfluxDBのダウンロードとインストール

公式リポジトリから最新のInfluxDB 2.xをインストールする

sudo dnf install influxdb2

InfluxDBの起動

InfluxDBを起動する

sudo systemctl start influxdb

・InfluxDBが正常に動作しているか確認

sudo systemctl status influxdb

4. Grafanaのインストールと設定

Grafanaのリポジトリを作成

Grafanaの公式リポジトリをシステムに追加する
→ 常に最新バージョンを取得することができる

sudo tee /etc/yum.repos.d/grafana.repo <<EOF
[grafana]
name=Grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
EOF

Grafanaのダウンロードとインストール

公式リポジトリから最新のGrafana11.1.0をインストールする

sudo dnf install grafana

Grafanaの起動

次に、Grafanaを起動する

sudo systemctl start grafana-server

・Grafanaが正常に動作しているか確認

sudo systemctl status grafana-server

Node-REDのフロー作成

1. 準備

Node-RED(サーバー側)にアクセス

 ・”your_server_IP”はサーバーの基本情報から確認可能

http://"your_server_IP":1880

 ・右上のメニューを押して、「パレットの管理」を開く
  「ノードを追加」タブで「node-red-contrib-influxdb」を追加する

InfluxDBにアクセス

 ・”your_server_IP”はサーバーの基本情報から確認可能

http://"your_server_IP":8086

 ・初回起動時はセットアップが必要
  ・ユーザー名、パスワード、組織名、バケット名を入力する

 ・InfluxDB内で「バケット」と「APIトークン」を作成する

2. サーバー側のフロー作成

・全体像

MQTT Inノードの編集

・サーバ:「mqtt://localhost」
・トピック:任意の名前で設定

Influxdb Outノードの編集

Organization(組織名):Influxdbセットアップで設定したもの
Bucket:新規で作成したバケット
Measurement:任意の物を指定
URL:「http://localhost:8086
Token:コピーしたAPIトークンを入力

3. ホストマシーン側のフロー作成

・全体像

MQTT Outノードの編集

・サーバー側で設定したものと同じ「トピック」を設定する
・「サーバ」の項目に以下の内容を入力する

mqtt://"your_server_IP"

・デバッグノードでデータが取得できていることを確認

・「MQTT out」ノードが「接続済み」になっていることを確認

InfluxDBで確認

・「Data Explorer」を開き、作成したバケット・Measurmentを選択、
  適当なFieldを選び、AGGREGATE FUNCTIONのmeanをオフに設定する

・画像のように正常にデータが取得できていれば成功

Grafanaで可視化

Grafanaにアクセス

 ・”your_server_IP”はサーバーの基本情報から確認可能

http://"your_server_IP":3000

GrafanaとInfluxdbを接続

 ・「Connections」→「Data Sources」→「Influxdb」で接続設定を行う

  ・Query Language:Fluxを使用
  ・URL:「http://”your_server_IP”:8086」
  ・Organization:設定した組織名
  ・Token:作成したAPIトークン
  ・Bucket:作成・設定したバケット

Dashboardsで可視化

 ・「Dashboards」→「Create dashboard」→「Add visualization
   →「Influxdb」を選択

 ・クエリに以下のコードを入力
   →「my-bucket」「my-measurement」は自身で設定したものを入力する
   → 最後に「Apply」を押してグラフが表示されれば成功

from(bucket: "my-bucket")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "my-measurement")