ラベル Node-Red の投稿を表示しています。 すべての投稿を表示
ラベル Node-Red の投稿を表示しています。 すべての投稿を表示

2022年4月4日月曜日

k3sでNode-Redを配備する

Node-Redを使用してフロー図によるプログラム開発を行うことができます。k3sでNode-Redを配備するには、以下の手順を実行します。データはlocal永続ボリュームに保存します。

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
sudo mkdir -p /var/nodered-data

sudo chown 1000:1000 /var/nodered-data

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
cat << EOF > local-nodered-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-nodered-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/nodered-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-nodered-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
cat << EOF > local-nodered-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-nodered-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-nodered-pv
EOF

sudo k3s kubectl apply -f ./local-nodered-pvc.yml

4. Node-REDのDeploymentの作成
以下のコマンドでNode-REDのDeploymentを作成します。
cat << EOF > nodered-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nodered-deployment
  labels:
    app: nodered
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nodered
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nodered
    spec:
      containers:
      - name: nodered
        image: nodered/node-red:latest
        env:
        - name: TZ
          value: Asia/Tokyo
        ports:
        - containerPort: 1880
        volumeMounts:
        - name: nodered-data
          mountPath: /data
      volumes:
      - name: nodered-data
        persistentVolumeClaim:
          claimName: local-nodered-pvc
EOF

sudo k3s kubectl apply -f ./nodered-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > nodered-service.yml
apiVersion: v1
kind: Service
metadata:
  name: nodered-service
spec:
  selector:
    app: nodered
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx # 外部からアクセスできるk3sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 1880
EOF

sudo k3s kubectl apply -f ./nodered-service.yml

ブラウザからhttp://<ホスト名またはIP:8080>/ にアクセスします。

2022年3月9日水曜日

MinikubeでNode-Redを配備する

Node-Redを使用してフロー図によるプログラム開発を行うことができます。MinikubeでNode-Redを配備するには、以下の手順を実行します。データはlocal永続ボリュームに保存します。

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
minikube ssh

sudo mkdir -p /var/nodered-data

sudo chown 1000:1000 /var/nodered-data

exit

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
cat << EOF > local-nodered-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-nodered-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/nodered-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - minikube
EOF

kubectl apply -f ./local-nodered-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
cat << EOF > local-nodered-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-nodered-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-nodered-pv
EOF

kubectl apply -f ./local-nodered-pvc.yml

4. Node-REDのDeploymentの作成
以下のコマンドでNode-REDのDeploymentを作成します。
cat << EOF > nodered-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nodered-deployment
  labels:
    app: nodered
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nodered
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nodered
    spec:
      containers:
      - name: nodered
        image: nodered/node-red:latest
        env:
        - name: TZ
          value: Asia/Tokyo
        ports:
        - containerPort: 1880
        volumeMounts:
        - name: nodered-data
          mountPath: /data
      volumes:
      - name: nodered-data
        persistentVolumeClaim:
          claimName: local-nodered-pvc
EOF

kubectl apply -f ./nodered-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > nodered-service.yml
apiVersion: v1
kind: Service
metadata:
  name: nodered-service
spec:
  selector:
    app: nodered
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 1880
EOF

kubectl apply -f ./nodered-service.yml

6. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/nodered-service 8080:8080 
ブラウザからhttp://<Minikubeをインストールしたホスト名またはIP>:8080/ にアクセスしてワークフローを作成します。

2022年2月18日金曜日

Microk8sでNode-Redを配備する

Node-Redを使用してフロー図によるプログラム開発を行うことができます。Microk8sでNode-Redを配備するには、以下の手順を実行します。データはlocal永続ボリュームに保存します。

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
sudo mkdir -p /var/nodered-data

sudo chown 1000:1000 /var/nodered-data

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
cat << EOF > local-nodered-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-nodered-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/nodered-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-nodered-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
cat << EOF > local-nodered-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-nodered-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-nodered-pv
EOF

microk8s kubectl apply -f ./local-nodered-pvc.yml

4. Node-REDのDeploymentの作成
以下のコマンドでNode-REDのDeploymentを作成します。
cat << EOF > nodered-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nodered-deployment
  labels:
    app: nodered
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nodered
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nodered
    spec:
      containers:
      - name: nodered
        image: nodered/node-red:latest
        env:
        - name: TZ
          value: Asia/Tokyo
        ports:
        - containerPort: 1880
        volumeMounts:
        - name: nodered-data
          mountPath: /data
      volumes:
      - name: nodered-data
        persistentVolumeClaim:
          claimName: local-nodered-pvc
EOF

microk8s kubectl apply -f ./nodered-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > nodered-service.yml
apiVersion: v1
kind: Service
metadata:
  name: nodered-service
spec:
  selector:
    app: nodered
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 1880
EOF

microk8s kubectl apply -f ./nodered-service.yml

ブラウザからhttp://<ホスト名またはIP:8080>/ にアクセスします。

2021年2月24日水曜日

CentOS 8-StreamにNode-REDをインストールする

Node-Redを使用してフロー図によるプログラム開発を行うことができます。

〇Node-REDの画面
ブラウザからhttp://<ホスト名またはIPアドレス>:1880/ にアクセスします。

インストール方法

以下のコマンドを実行します。
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/rpm/update-nodejs-and-nodered)

Would you like to add Node-RED port 1880 to the firewall public zone ? [y/N] ?
※yを入力します

This script will do an install of node.js, Node-RED and the service packages to auto-run Node-RED

Are you really sure you want to do this ? [y/N] ?
※yを入力します

sudo systemctl enable nodered

sudo systemctl start nodered

関連情報

・Node-REDに関する情報はこちらを参照してください。

2020年12月30日水曜日

CentOS8.2にNode-REDをインストールする

Node-Redを使用してフロー図によるプログラム開発を行うことができます。

〇Node-REDの画面
ブラウザからhttp://<ホスト名またはIPアドレス>:1880/ にアクセスします。

インストール方法

以下のコマンドを実行します。
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/rpm/update-nodejs-and-nodered)

Would you like to add Node-RED port 1880 to the firewall public zone ? [y/N] ?
※yを入力します

This script will do an install of node.js, Node-RED and the service packages to auto-run Node-RED

Are you really sure you want to do this ? [y/N] ?
※yを入力します

sudo systemctl enable nodered

sudo systemctl start nodered

関連情報

・Node-REDに関する情報はこちらを参照してください。

2020年5月18日月曜日

Raspberry Pi(Raspbian Buster)/Debian 10(Buster)/Ubuntu 20.04にNode-REDをインストールする

Node-Redを使用してフロー図によるプログラム開発を行うことができます。

〇Node-REDの画面

ブラウザからhttp://<ホスト名またはIPアドレス>:1880/ にアクセスします。

〇インストール方法
以下のコマンドを実行します。
sudo apt-get update

sudo apt-get -y install build-essential git curl

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

Are you really sure you want to do this ? [y/N] ?
※yを入力します

Would you like to install the Pi-specific nodes ? [y/N] ? 
※Raspberry Piであればy、それ以外はNを入力します

sudo systemctl enable nodered

sudo systemctl start nodered

2020年4月7日火曜日

VagrantでNode-RedとPostgreSQL12をインストールした仮想マシン(Debian Buster/10)を構築する

Node-Redを使用してフロー図による開発を行うことができます。

〇Node-Redの画面
〇構築方法
以下のVagrantfileで、Node-RedとPostgreSQL12をインストールした仮想マシン(Debian Buster/10)を構築する事ができます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-10"
  config.vm.hostname = "db10node12noderedpg12"
config.vm.network "public_network", ip:"192.168.1.103", :netmask => "255.255.255.0"
config.vm.network "private_network", ip: "192.168.55.103", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db10node12noderedpg12"
     vbox.gui = true
     vbox.cpus = 2
     vbox.memory = 2048
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get -y install task-japanese gawk
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
update-locale LANG=ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
timedatectl set-timezone Asia/Tokyo

# install postgresql
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list
apt-get -y install wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt-get update
apt-get -y install postgresql-12

echo "listen_addresses='*'" >> /etc/postgresql/12/main/postgresql.conf

echo "host    all         all         127.0.0.1/32          password" >> /etc/postgresql/12/main/pg_hba.conf
echo "host    all         all         192.168.1.0/24          password" >> /etc/postgresql/12/main/pg_hba.conf
echo "host    all         all         192.168.55.0/24          password" >> /etc/postgresql/12/main/pg_hba.conf

systemctl restart postgresql.service
su - postgres << EOF
createdb -T template0 --locale=ja_JP.UTF-8 --encoding=UTF8 test
psql -c "
alter user postgres with password 'postgres';
create user test with password 'test';
grant all privileges on database test to test;
"
EOF
export PGPASSWORD=test
psql -h localhost -d test -U test -c "
create table messages (message_id integer not null, message varchar(100));
insert into messages values (1, 'hello world.');
insert into messages values (2, 'test message.');
"
EOF
echo "postgres:postgres" | chpasswd
systemctl restart postgresql.service

# install nodejs
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

# install Node-Red and Node-Red-Dashboard
sudo apt-get -y install build-essential
npm init --yes
npm install -g --unsafe-perm node-red
npm install -g node-red-dashboard
npm install -g node-red-contrib-postgres-multi

mkdir -p /root/.node-red
cat << EOF > /etc/systemd/system/node-red.service
[Unit]
Description=Node-Red
[Service]
Environment="NODE_OPTIONS=--max-old-space-size=128"
Environment="NODE_RED_OPTIONS=-v"
ExecStart=/usr/bin/node $NODE_OPTIONS /usr/lib/node_modules/node-red/red.js $NODE_RED_OPTIONS
WorkingDirectory=/root/.node-red/
User=root
Group=root
Restart=on-failure
KillSignal=SIGINT

[Install]
WantedBy=multi-user.target
EOF
systemctl enable node-red.service
systemctl start node-red.service

echo 'access to http://192.168.1.103:1880 or http://192.168.1.103:1880/ui'

SHELL
end

2019年7月28日日曜日

VagrantでNode-RedとRedisをインストールした仮想マシン(Debian Buster/10)を構築する

Node-Redを使用してフロー図による開発を行うことができます。

〇Node-Redの画面


〇構築方法
以下のVagrantfileで、Node-RedとRedisをインストールした仮想マシン(Debian Buster/10)を構築する事ができます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-10"
  config.vm.hostname = "db10noderedredis"
config.vm.network "public_network", ip:"192.168.1.103", :netmask => "255.255.255.0"
config.vm.network "private_network", ip: "192.168.55.103", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db10noderedredis"
     vbox.gui = true
     vbox.cpus = 2
     vbox.memory = 2048
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get -y install task-japanese gawk
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
update-locale LANG=ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
timedatectl set-timezone Asia/Tokyo


# install redis serrver
apt-get -y install redis-server

# change bind address.
sed -i -e 's/bind 127.0.0.1 ::1/bind 0.0.0.0/' /etc/redis/redis.conf

systemctl restart redis

# wait until port 6379 is opened.
while netstat -lnt | awk '$4 ~ /:6379$/ {exit 1}'; do sleep 10; done
sleep 10


redis-cli -h 192.168.55.103 << EOF
publish mykey 'hello, world!'
EOF


# install nodejs
cd /opt
wget https://nodejs.org/dist/v10.16.0/node-v10.16.0-linux-x64.tar.xz
tar xf node-v10.16.0-linux-x64.tar.xz
export PATH=$PATH:/opt/node-v10.16.0-linux-x64/bin
echo 'export PATH=$PATH:/opt/node-v10.16.0-linux-x64/bin/' >> /root/.profile

sudo ln -s /opt/node-v10.16.0-linux-x64/bin/node /usr/bin/node
sudo ln -s /opt/node-v10.16.0-linux-x64/bin/npm /usr/bin/npm
sudo ln -s /opt/node-v10.16.0-linux-x64/bin/bin/npx /usr/bin/npx

# install Node-Red and Node-Red-Dashboard
npm install -g --unsafe-perm node-red
npm install node-red-dashboard
npm install node-red-contrib-redis

mkdir -p /root/.node-red
cat << EOF > /etc/systemd/system/node-red.service
[Unit]
Description=Node-Red
[Service]
Environment="NODE_OPTIONS=--max-old-space-size=128"
Environment="NODE_RED_OPTIONS=-v"
ExecStart=/opt/node-v10.16.0-linux-x64/bin/node $NODE_OPTIONS /opt/node-v10.16.0-linux-x64/lib/node_modules/node-red/red.js $NODE_RED_OPTIONS
WorkingDirectory=/root/.node-red/
User=root
Group=root
Restart=on-failure
KillSignal=SIGINT

[Install]
WantedBy=multi-user.target
EOF
systemctl enable node-red.service
systemctl start node-red.service

echo 'access to http://192.168.1.103:1880 or http://192.168.1.103:1880/ui'

SHELL
end

〇サンプルのワークフロー
指定されたチャネルをsubscribeして、メッセージを表示するサンプルです。
[{"id":"5b0ecbcc.d26de4","type":"redis-in","z":"82f74431.6f13d","server":"ea10aa06.b80e38","command":"subscribe","name":"redis","topic":"mykey","timeout":"0","x":110,"y":220,"wires":[["8e667b99.c15058"]]},{"id":"ea10aa06.b80e38","type":"redis-config","z":"","host":"192.168.1.103","port":"6379","dbase":"0","pass":""}]

2019年7月27日土曜日

VagrantでNode-RedとMariaDBをインストールした仮想マシン(Debian Buster/10)を構築する

Node-Redを使用してフロー図による開発を行うことができます。

〇Node-Redの画面


〇構築方法
以下のVagrantfileで、Node-RedとMariaDBをインストールした仮想マシン(Debian Buster/10)を構築する事ができます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-10"
  config.vm.hostname = "db10noderedmariadb"
config.vm.network "public_network", ip:"192.168.1.103", :netmask => "255.255.255.0"
config.vm.network "private_network", ip: "192.168.55.103", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db10noderedmariadb"
     vbox.gui = true
     vbox.cpus = 2
     vbox.memory = 2048
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get -y install task-japanese gawk
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
update-locale LANG=ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
timedatectl set-timezone Asia/Tokyo


# install mariadb
echo "mariadb-server-10.0 mysql-server/root_password password root" | sudo debconf-set-selections
echo "mariadb-server-10.0 mysql-server/root_password_again password root" | sudo debconf-set-selections
apt-get -y install mariadb-server
mysql -uroot -proot -e "CREATE DATABASE test DEFAULT CHARACTER SET utf8;"
mysql -uroot -proot -e "CREATE USER test@localhost IDENTIFIED BY 'test';"
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON test.* TO 'test'@'localhost';"
mysql -uroot -proot -e "FLUSH PRIVILEGES;"

mysql -utest -ptest -e "CREATE TABLE message (message_id INTEGER NOT NULL, message_text varchar(100)); INSERT INTO message VALUES (1, 'Hello, World!');" test



# install nodejs
cd /opt
wget https://nodejs.org/dist/v10.16.0/node-v10.16.0-linux-x64.tar.xz
tar xf node-v10.16.0-linux-x64.tar.xz
export PATH=$PATH:/opt/node-v10.16.0-linux-x64/bin
echo 'export PATH=$PATH:/opt/node-v10.16.0-linux-x64/bin/' >> /root/.profile

sudo ln -s /opt/node-v10.16.0-linux-x64/bin/node /usr/bin/node
sudo ln -s /opt/node-v10.16.0-linux-x64/bin/npm /usr/bin/npm
sudo ln -s /opt/node-v10.16.0-linux-x64/bin/bin/npx /usr/bin/npx

# install Node-Red and Node-Red-Dashboard
npm install -g --unsafe-perm node-red
npm install node-red-dashboard
npm install node-red-node-mysql

mkdir -p /root/.node-red
cat << EOF > /etc/systemd/system/node-red.service
[Unit]
Description=Node-Red
[Service]
Environment="NODE_OPTIONS=--max-old-space-size=128"
Environment="NODE_RED_OPTIONS=-v"
ExecStart=/opt/node-v10.16.0-linux-x64/bin/node $NODE_OPTIONS /opt/node-v10.16.0-linux-x64/lib/node_modules/node-red/red.js $NODE_RED_OPTIONS
WorkingDirectory=/root/.node-red/
User=root
Group=root
Restart=on-failure
KillSignal=SIGINT

[Install]
WantedBy=multi-user.target
EOF
systemctl enable node-red.service
systemctl start node-red.service

echo 'access to http://192.168.1.103:1880 or http://192.168.1.103:1880/ui'

SHELL
end

〇サンプルのワークフロー
インジェクションボタンをクリックするとMariaDBにクエリを実行し、デバッグ表示するサンプルです。
[{"id":"93fe20b2.f6a328","type":"tab","label":"フロー 1","disabled":false,"info":""},{"id":"11991ce9.f4ee83","type":"mysql","z":"93fe20b2.f6a328","mydb":"c12f3242.9d8cb8","name":"testdb","x":170,"y":220,"wires":[["ec768b10.fb5e68"]]},{"id":"5bcb36f5.48bb78","type":"inject","z":"93fe20b2.f6a328","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":120,"y":80,"wires":[["f1ea45eb.dc289"]]},{"id":"ec768b10.fb5e68","type":"debug","z":"93fe20b2.f6a328","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":220,"y":340,"wires":[]},{"id":"f1ea45eb.dc289","type":"function","z":"93fe20b2.f6a328","name":"","func":"msg.topic = \"SELECT message_text FROM message where message_id=1;\"\nreturn msg;","outputs":1,"noerr":0,"x":120,"y":160,"wires":[["11991ce9.f4ee83"]]},{"id":"c12f3242.9d8cb8","type":"MySQLdatabase","z":"","host":"127.0.0.1","port":"3306","db":"test","tz":""}]

2019年7月21日日曜日

VagrantでNode-RedとPostgreSQL11をインストールした仮想マシン(Debian Buster/10)を構築する

Node-Redを使用してフロー図による開発を行うことができます。

〇Node-Redの画面


〇構築方法
以下のVagrantfileで、Node-RedとPostgreSQL11をインストールした仮想マシン(Debian Buster/10)を構築する事ができます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-10"
  config.vm.hostname = "db10nodered"
config.vm.network "public_network", ip:"192.168.1.103", :netmask => "255.255.255.0"
config.vm.network "private_network", ip: "192.168.55.103", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db10nodered"
     vbox.gui = true
     vbox.cpus = 2
     vbox.memory = 2048
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get -y install task-japanese gawk
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
update-locale LANG=ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
timedatectl set-timezone Asia/Tokyo

# install postgresql
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list
apt-get -y install wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt-get update
apt-get -y install postgresql-11

echo "listen_addresses='*'" >> /etc/postgresql/11/main/postgresql.conf

echo "host    all         all         127.0.0.1/32          password" >> /etc/postgresql/11/main/pg_hba.conf
echo "host    all         all         192.168.1.0/24          password" >> /etc/postgresql/11/main/pg_hba.conf
echo "host    all         all         192.168.55.0/24          password" >> /etc/postgresql/11/main/pg_hba.conf

systemctl restart postgresql.service
su - postgres << EOF
createdb -T template0 --locale=ja_JP.UTF-8 --encoding=UTF8 test
psql -c "
alter user postgres with password 'postgres';
create user test with password 'test';
grant all privileges on database test to test;
"
EOF
export PGPASSWORD=test
psql -h localhost -d test -U test -c "
create table messages (message_id integer not null, message varchar(100));
insert into messages values (1, 'hello world.');
insert into messages values (2, 'test message.');
"
EOF
echo "postgres:postgres" | chpasswd
systemctl restart postgresql.service

# install nodejs
cd /opt
wget https://nodejs.org/dist/v10.16.0/node-v10.16.0-linux-x64.tar.xz
tar xf node-v10.16.0-linux-x64.tar.xz
export PATH=$PATH:/opt/node-v10.16.0-linux-x64/bin
echo 'export PATH=$PATH:/opt/node-v10.16.0-linux-x64/bin/' >> /root/.profile

sudo ln -s /opt/node-v10.16.0-linux-x64/bin/node /usr/bin/node
sudo ln -s /opt/node-v10.16.0-linux-x64/bin/npm /usr/bin/npm
sudo ln -s /opt/node-v10.16.0-linux-x64/bin/bin/npx /usr/bin/npx

# install Node-Red and Node-Red-Dashboard
npm install -g --unsafe-perm node-red
npm install node-red-dashboard
npm install node-red-contrib-postgres-multi

mkdir -p /root/.node-red
cat << EOF > /etc/systemd/system/node-red.service
[Unit]
Description=Node-Red
[Service]
Environment="NODE_OPTIONS=--max-old-space-size=128"
Environment="NODE_RED_OPTIONS=-v"
ExecStart=/opt/node-v10.16.0-linux-x64/bin/node $NODE_OPTIONS /opt/node-v10.16.0-linux-x64/lib/node_modules/node-red/red.js $NODE_RED_OPTIONS
WorkingDirectory=/root/.node-red/
User=root
Group=root
Restart=on-failure
KillSignal=SIGINT

[Install]
WantedBy=multi-user.target
EOF
systemctl enable node-red.service
systemctl start node-red.service

echo 'access to http://192.168.1.103:1880 or http://192.168.1.103:1880/ui'

SHELL
end

〇サンプルのワークフロー
インジェクションボタンをクリックするとPostgreSQLにクエリを実行し、デバッグ表示するサンプルです。
[{"id":"f3632482.cf9818","type":"tab","label":"フロー 1","disabled":false,"info":""},{"id":"b1f066e5.dcbc6","type":"inject","z":"f3632482.cf9818","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":120,"y":100,"wires":[["64e4c46f.7a3ebc"]]},{"id":"5d339df4.131e94","type":"postgres","z":"f3632482.cf9818","postgresdb":"220b0389.c2391c","name":"testdb","output":true,"outputs":1,"x":210,"y":260,"wires":[["a4ae247f.488c9"]]},{"id":"64e4c46f.7a3ebc","type":"function","z":"f3632482.cf9818","name":"sample-query","func":"msg.payload = [\n    {\n        query: 'select message from messages where message_id=1',\n        output: true,\n    },\n];\nreturn msg;","outputs":1,"noerr":0,"x":150,"y":180,"wires":[["5d339df4.131e94"]]},{"id":"a4ae247f.488c9","type":"debug","z":"f3632482.cf9818","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload[0]","targetType":"jsonata","x":320,"y":340,"wires":[]},{"id":"220b0389.c2391c","type":"postgresdb","z":"","hostname":"localhost","port":"5432","db":"test","ssl":false}]