Хочу провести время с пользой и разобрать как установить на Ubuntu 22.04 Server приложение Node-RED, а возможно если все будет довольно просто начать использовать или посмотреть, что можно сделать.

Node-RED — это инструмент разработки на основе потоков для визуального программирования, первоначально разработанный IBM для объединения аппаратных устройств, API-интерфейсов и онлайн-сервисов в рамках Интернета вещей

В качестве ключевой составляющей Node-RED выступает парадигма потокового программирования, которое было изобретено в 70-х Джеем Полом Моррисоном. Потоковое программирование — это способ описания поведения приложения в виде сети черных ящиков или «узлов», как они называются в Node-RED. Каждый узел имеет четкую цель — к нему поступают некоторые данные, он что-то делает с этими данными, а затем передает их на следующий узел. Сеть отвечает за поток данных между узлами.

Шаг №1: Обновляем систему до самого актуального состояния в рамках текущего релиза Ubuntu 22.04 Server:

ekzorchik@srv-us2204a:~$ sudo rm -Rf /var/lib/apt/lists
ekzorchik@srv-us2204a:~$ sudo apt-get update && sudo apt-get upgrade -y

Шаг №2: Устанавливаем NodeJS:

ekzorchik@srv-us2204a:~$ curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
ekzorchik@srv-us2204a:~$ sudo apt-get install -y nodejs net-tools
ekzorchik@srv-us2204a:~$ npm -v
8.11.0
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ sudo npm install -g npm@8.16.0
ekzorchik@srv-us2204a:~$ npm -v
8.16.0
ekzorchik@srv-us2204a:~$ node -v
v16.16.0
ekzorchik@srv-us2204a:~$

Шаг №3: Устанавливаем Node-RED & Node-RED-ADMIN:

ekzorchik@srv-us2204a:~$ sudo npm install -g --unsafe-perm node-red node-red-admin
added 361 packages, and audited 362 packages in 16s
38 packages are looking for funding
  run `npm fund` for details
found 0 vulnerabilities
ekzorchik@srv-us2204a:~$
Теперь можно инициализировать запуск node-red:
ekzorchik@srv-us2204a:~$ node-red -v
5 Aug 08:43:21 - [info]

Welcome to Node-RED
===================

5 Aug 08:43:21 - [info] Node-RED version: v3.0.2
5 Aug 08:43:21 - [info] Node.js  version: v16.16.0
5 Aug 08:43:21 - [info] Linux 5.15.0-27-generic x64 LE
5 Aug 08:43:21 - [info] Loading palette nodes
5 Aug 08:43:22 - [info] Settings file  : /home/ekzorchik/.node-red/settings.js
5 Aug 08:43:22 - [info] Context store  : 'default' [module=memory]
5 Aug 08:43:22 - [info] User directory : /home/ekzorchik/.node-red
5 Aug 08:43:22 - [warn] Projects disabled : editorTheme.projects.enabled=false
5 Aug 08:43:22 - [info] Flows file     : /home/ekzorchik/.node-red/flows.json
5 Aug 08:43:22 - [info] Creating new flow file
5 Aug 08:43:22 - [warn]

---------------------------------------------------------------------
Your flow credentials file is encrypted using a system-generated key.

If the system-generated key is lost for any reason, your credentials
file will not be recoverable, you will have to delete it and re-enter
your credentials.

You should set your own key using the 'credentialSecret' option in
your settings file. Node-RED will then re-encrypt your credentials
file using your chosen key the next time you deploy a change.
---------------------------------------------------------------------

5 Aug 08:43:22 - [info] Server now running at http://127.0.0.1:1880/
5 Aug 08:43:22 - [warn] Encrypted credentials not found
5 Aug 08:43:22 - [info] Starting flows
5 Aug 08:43:22 - [info] Started flows
^C5 Aug 08:44:16 - [info] Stopping flows
5 Aug 08:44:16 - [info] Stopped flows
ekzorchik@srv-us2204a:~$

Шаг №4: Создадим административный логин и пароль в Node-RED:

ekzorchik@srv-us2204a:~$ node-red admin hash-pw
Password: ввожу к примеру 712mbddr@
$2b$08$7.k/709kgGzHwI47KVrRR.smonPsCfJJ5DnGCcOImKiMEEIRBBEJa
ekzorchik@srv-us2204a:~$

Шаг №5: Настраиваем авторизацию в Node-RED:

ekzorchik@srv-us2204a:~$ node-red --settings
5 Aug 08:47:26 - [info]

Welcome to Node-RED
===================

5 Aug 08:47:26 - [info] Node-RED version: v3.0.2
5 Aug 08:47:26 - [info] Node.js  version: v16.16.0
5 Aug 08:47:26 - [info] Linux 5.15.0-27-generic x64 LE
5 Aug 08:47:27 - [info] Loading palette nodes
5 Aug 08:47:27 - [info] Settings file  : /home/ekzorchik/.node-red/settings.js
5 Aug 08:47:27 - [info] Context store  : 'default' [module=memory]
5 Aug 08:47:27 - [info] User directory : /home/ekzorchik/.node-red
5 Aug 08:47:27 - [warn] Projects disabled : editorTheme.projects.enabled=false
5 Aug 08:47:27 - [info] Flows file     : /home/ekzorchik/.node-red/flows.json
5 Aug 08:47:27 - [info] Creating new flow file
5 Aug 08:47:27 - [warn]
ekzorchik@srv-us2204a:~$ nano ~/.node-red/settings.js
    adminAuth: {
        type: "credentials",
        users: [{
            username: "admin",
            password: "$2b$08$7.k/709kgGzHwI47KVrRR.smonPsCfJJ5DnGCcOImKiMEEIRBBEJa",
            permissions: "*"
        }]
    },

После сохраняем внесенные изменения и инициируем запуск (ekzorchik@srv-us2204a:~$ node-red):

Шаг №6: Производим настройку Node-RED как сервис дабы после перезагрузки сервис поднимался автоматически:

ekzorchik@srv-us2204a:~$ sudo nano /etc/systemd/system/node-red.service
[Unit]
Description=Node-RED
After=syslog.target network.target

[Service]
ExecStart=/usr/bin/node-red-pi --max-old-space-size=128 -v
Restart=on-failure
KillSignal=SIGINT

# log output to syslog as ‘node-red’
SyslogIdentifier=node-red
StandardOutput=syslog

# non-root user to run as
WorkingDirectory=/home/ekzorchik/
User=ekzorchik
Group=ekzorchik

[Install]
WantedBy=multi-user.target
ekzorchik@srv-us2204a:~$ sudo systemctl enable node-red.service
Created symlink /etc/systemd/system/multi-user.target.wants/node-red.service → /etc/systemd/system/node-red.service.
ekzorchik@srv-us2204a:~$ sudo systemctl start node-red.service
ekzorchik@srv-us2204a:~$ sudo netstat -tulpn | egrep :1880
tcp        0      0 127.0.0.1:1880          0.0.0.0:*               LISTEN      1641/node-red
ekzorchik@srv-us2204a:~$

Шаг №7: Теперь поднимем связку Nginx + обратный прокси до сервиса Node-RED дабы можно было с любой системы локальной сети зайти в Webинтерфейс:

ekzorchik@srv-us2204a:~$ sudo apt-get install -y nginx
ekzorchik@srv-us2204a:~$ sudo nano /etc/nginx/sites-available/node-red.conf
upstream nodered {
        server 127.0.0.1:1880;
}

server {
    listen 80;
    #listen 443 ssl http2;
    server_name 172.33.33.112;
    #ssl_certificate /etc/letsencrypt/live/node-red.example.com/fullchain.pem;
    #ssl_certificate_key /etc/letsencrypt/live/node-red.example.com/privkey.pem;
    #ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    #ssl_ciphers EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    #ssl_prefer_server_ciphers On;
    #ssl_session_cache shared:SSL:128m;
    #ssl_stapling on;
    #ssl_stapling_verify on;
    #resolver 8.8.8.8;

  #  location / {
  #      if ($scheme = http) {
  #          return 301 https://$server_name$request_uri;
  #      }
     location / {
        proxy_pass http://nodered;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

 #   location '/.well-known/acme-challenge' {
 #       root /var/www/html;
 #   }
}
ekzorchik@srv-us2204a:~$ sudo ln -s /etc/nginx/sites-available/node-red.conf /etc/nginx/sites-enabled/node-red.conf
ekzorchik@srv-us2204a:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ sudo systemctl restart nginx

Теперь проверяю, что при обращении к URL (http://172.33.33.112) адресу системы на которой проделаны действия выше открывается Web-интерфейс Node-RED:

Доступ в Node-RED через Nginx

Авторизуюсь

  • Имя пользователя: admin
  • Пароль: 712mbddr@

И нажимаю "Войти", успешно кстати говоря

Выполненная авторизация в Node-RED

Теперь нужно на практических задача познакомиться с применением Node-RED. Для этого следует погуглить какие-либо примеры и почитать документацию.

Об это либо Вы как-нибудь сами, либо ждите, когда что-то появится на моем блоге.

А пока на этом у меня все, с уважением автор блога Олло Александр aka ekzorchik.