Доступ к панели Node-RED из любой точки мира с помощью Digital Ocean

В этом руководстве описано, как установить программное обеспечение Node-RED на виртуальную машину Linux Ubuntu (VM) с использованием Digital Ocean. Запуск Node-RED в облаке позволяет получить доступ к панели управления Node-RED из любой точки мира.

Доступ к панели Node-RED из любой точки мира с помощью Digital Ocean

Вы также можете установить MQTT-брокер Mosquitto на свою виртуальную машину, чтобы подключить несколько плат ESP32/ESP8266 и других IoT-устройств из любой точки мира, используя разные сети с подключением к Интернету.

Введение в Node-RED

Node-RED — это мощный инструмент для создания приложений Интернета вещей (IoT) с использованием визуального программирования: вы соединяете блоки кода (узлы) для выполнения задачи. Node-RED предоставляет панель управления (Node-RED dashboard), которую можно использовать в качестве платформы домашней автоматизации для взаимодействия с IoT-устройствами — управления выходами и мониторинга датчиков.

Вы можете легко установить связь между Node-RED и платами ESP32/ESP8266, используя, например, HTTP-запросы или MQTT.

В чем преимущество установки Node-RED в облаке (хостинг-сервис Digital Ocean) и как это работает? Вот пример.

Обзор ESP32 ESP8266 Digital Ocean Node-RED
  • Node-RED и панель Node-RED установлены на Digital Ocean.

  • ESP32 может связываться с Node-RED, если он подключен к роутеру с доступом в Интернет.

  • ESP32 может отправлять показания датчиков в Node-RED, и/или вы можете управлять его выходами через панель управления.

  • Вы можете получить доступ к панели Node-RED с компьютера или смартфона из любой точки мира.

  • Это позволяет вам контролировать и мониторить одну или несколько плат ESP32 / ESP8266 из любого места.

Хостинг-сервис — Digital Ocean

Для запуска облачного MQTT-брокера Mosquitto вам нужен хостинг-сервис, который предоставляет доступ к командной строке и позволяет устанавливать любое необходимое программное обеспечение. Я рекомендую использовать Digital Ocean, который предлагает сервер Ubuntu, управляемый через командную строку.

Я использую его с 2015 года и лично рекомендую, но вы можете использовать любой другой хостинг-сервис. Подойдет любой хостинг, предлагающий виртуальную машину Linux Ubuntu с полным консольным доступом.

Если у вас нет хостинг-аккаунта, я рекомендую зарегистрироваться на Digital Ocean. При регистрации на Digital Ocean вы можете попробовать сервис в течение 60 дней (вам предоставляются бесплатные кредиты для тестирования платформы).

Получить виртуальную машину Linux Ubuntu на Digital Ocean >>

Если вам нравятся наши проекты, вы можете рассмотреть возможность регистрации на рекомендуемом хостинг-сервисе, так как этим вы поддержите нашу работу.

Примечание

Вы также можете запустить Node-RED в локальной сети с помощью платы Raspberry Pi. Однако цель данного руководства — запустить Node-RED в облаке для связи с платами (или другими IoT-устройствами) в разных сетях.

Создание аккаунта Digital Ocean

Чтобы создать аккаунт Digital Ocean, перейдите на Digital Ocean и нажмите кнопку «Sign Up».

Установка Digital Ocean VPN Mosquitto MQTT Broker

Создайте свой аккаунт, и вы получите кредит в размере $100, который можно использовать в течение 60 дней для тестирования платформы. Вам может потребоваться указать действующую кредитную карту, но вы можете отменить свой аккаунт в любое время, если больше не заинтересованы в использовании сервиса после бесплатного 60-дневного пробного периода.

Завершите создание аккаунта предпочитаемым способом (я всегда использую вариант Email).

Форма регистрации Digital Ocean

Подтвердите свой аккаунт и войдите в систему — вы должны увидеть похожую панель управления.

Панель управления Digital Ocean

Создание Droplet (виртуальная машина Linux Ubuntu)

Чтобы создать новую виртуальную машину, нажмите кнопку «Create» в правом верхнем углу и выберите опцию «Droplets». Digital Ocean называет свои виртуальные машины Droplet.

Важно

Если у вас уже работает Droplet с MQTT-брокером Mosquitto, вы можете пропустить следующие шаги (создание Droplet). Вы можете запустить Node-RED и MQTT-брокер Mosquitto на одном сервере.

Создание Droplet в Digital Ocean

Для этого руководства я буду использовать Ubuntu 20.04 (LTS) x64, и рекомендую выбрать тот же вариант. Вы также можете использовать тарифный план «Basic».

Выбор версии Ubuntu для Droplet

В меню ресурсов виртуальной машины вы можете выбрать самый дешевый план за $5/месяц. Даже при минимальном плане MQTT-брокер и Node-RED будут работать без проблем.

Тарифы Droplet в Digital Ocean

Выберите расположение дата-центра виртуальной машины ближе к вам — в моем случае я использовал регион «London».

Выбор расположения сервера

Создайте root-пароль, который позволит вам получить доступ к Droplet (сохраните этот пароль, он понадобится для доступа к серверу).

Установка пароля для сервера

Наконец, выберите hostname, чтобы легко определить, с какой виртуальной машиной вы работаете. Я назвал свой Droplet «mqtt-cloud-server». На этом всё — вам нужно нажать большую зеленую кнопку «Create Droplet», чтобы завершить процесс.

Установка hostname и создание Droplet

Подождите несколько минут, и когда полоса прогресса завершится, ваш Droplet будет готов.

Доступ к консоли виртуальной машины Linux Ubuntu

Когда ваш Droplet будет подготовлен, откройте свой только что созданный сервер (в моем случае он называется «mqtt-cloud-server»).

Открытие Droplet в Digital Ocean

Выберите меню «Access» и нажмите кнопку «Launch Console».

Запуск консоли сервера

В вашем компьютере откроется новое окно браузера.

Консоль входа на сервер

Введите логин (root) и пароль, указанный ранее, нажмите Enter для доступа к серверу.

Ввод имени пользователя и пароля в консоли

Есть необязательный шаг, но он выходит за рамки данного руководства. Он не требуется для работы проекта: подготовьте сервер с пользователем без root-прав (с поддержкой sudo) и базовым файрволом, следуя руководству Initial Server Setup with Ubuntu 20.04.

Установка Node-RED

Давайте установим программное обеспечение Node-RED.

Иконка Node-RED

Перед установкой программного обеспечения обновите свой сервер (это займет несколько минут).

sudo apt update && sudo apt upgrade -y

Для установки Node-RED вам понадобится npm:

sudo apt install npm -y

Следующая команда устанавливает Node-RED как глобальный модуль вместе со всеми зависимостями.

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

Когда процесс установки завершится, вы должны увидеть подобное сообщение:

Установка Node-RED через NPM

Откройте порт на файрволе сервера. По умолчанию Node-RED использует порт 1880, поэтому выполните следующую команду:

sudo ufw allow 1880

Вы можете убедиться в успехе, если конец вывода команды выглядит подобным образом:

node-red start
Команда запуска Node-RED

Подождите несколько секунд, пока все загрузится. Если вы откроете IP-адрес вашего Droplet в Digital Ocean, добавив порт 1880:

http://YOUR-Digital-Ocean-IP-Address:1880

Например:

http://178.62.83.231:1880

Должно загрузиться программное обеспечение Node-RED, вот как оно должно выглядеть:

Установленный и работающий Node-RED

В окне консоли нажмите Ctrl+C, чтобы остановить Node-RED.

Автозапуск Node-RED при загрузке

Чтобы Node-RED запускался автоматически при загрузке или перезагрузке вашей виртуальной машины, вам нужно создать новый файл systemd для сервиса nodered.service:

sudo nano /etc/systemd/system/nodered.service

Затем добавьте следующее (если вы используете root, можете оставить файл как есть — в противном случае закомментируйте root и настройте вариант с пользователем без root-прав):

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

[Service]
ExecStart=/usr/local/bin/node-red --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/rui/
#User=rui
#Group=rui

# if using a root user
WorkingDirectory=/root/
User=root
Group=root

[Install]
WantedBy=multi-user.target

Ваш файл должен выглядеть следующим образом, сохраните его и выйдите (Ctrl+X, Y, Enter).

Настройка автозапуска Node-RED

Чтобы включить сервис Node-RED и запускать этот файл при загрузке, введите команду:

sudo systemctl enable nodered.service

Перезагрузите виртуальную машину, чтобы проверить, запускается ли Node-RED автоматически при загрузке:

sudo reboot

Подождите примерно 2-3 минуты, пока сервер полностью перезагрузится. Когда вы откроете IP-адрес вашего сервера, Node-RED должен загрузиться автоматически:

http://YOUR-Digital-Ocean-IP-Address:1880
Node-RED автоматически запущен после перезагрузки

Готово! Ваше программное обеспечение Node-RED подготовлено.

Защита Node-RED с помощью имени пользователя и пароля

Установите пакет node-red-admin, чтобы сделать его доступным глобально:

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

Выполните следующую команду для создания хеша пароля:

node-red-admin hash-pw

Вам будет предложено ввести пароль. Введите желаемый пароль, нажмите Enter, и на экране будет выведен хеш.

Генерация хеша пароля Node-RED

Скопируйте строку хеша в буфер обмена и откройте файл настроек Node-RED. В моем случае хеш:

$2b$08$bQvFgdNi6as2.JwtDENbP.w/JROldMUhY9o9hXExyjQzw1iFRvC9liF

Откройте файл settings.js:

sudo nano ~/.node-red/settings.js

Прокрутите вниз и раскомментируйте блок adminAuth (удалив «// « перед каждой строкой). Измените username на желаемое и вставьте ранее сгенерированный хеш в поле password.

Включение парольной защиты Node-RED

Убедитесь, что вы раскомментировали и заменили поле password хешем именно так, как показано выше. Если этого не сделать, авторизация будет невозможна, и вам придется повторить процесс.

Выйдите из файла и сохраните его (Ctrl+X, Y, Enter). Перезагрузите сервер, чтобы все изменения вступили в силу:

sudo reboot

Теперь при доступе к Node-RED вам будет предложено ввести имя пользователя (по умолчанию admin) и пароль, указанный ранее.

Страница входа в Node-RED

После входа вы будете перенаправлены в программное обеспечение Node-RED, где можете создавать и редактировать свои потоки (flows). В правом верхнем углу также есть меню для выхода из системы.

Кнопка выхода в Node-RED

Готово! Ваш сервер готов, и вы можете установить Node-RED Dashboard или подключить Node-RED к облачному MQTT-брокеру.

(Дополнительно) Продвинутая настройка — SSL-сертификат для Node-RED

Лучший способ добавить SSL-сертификат на сервер — привязать доменное имя к серверу и использовать SSL-сертификаты Let’s Encrypt.

  • Вам нужно купить доменное имя и направить его на серверы имен Digital Ocean (например, example.com).

  • Веб-сервер Nginx должен быть установлен, а файрвол обновлен для пропуска трафика на портах 80 и 443, как описано в руководстве How To Install Nginx on Ubuntu (это руководство также работает для версии 20.04).

  • Let’s Encrypt должен быть установлен, и сертификат сгенерирован для доменного имени (например, example.com). How To Secure Nginx with Let’s Encrypt on Ubuntu 20.04. Вы можете пропустить шаги 3-5, касающиеся настройки Nginx, так как мы рассмотрим это далее.

Выполнив эти предварительные условия, откройте новую конфигурацию Nginx для сайта (замените путь на ваше доменное имя).

sudo nano /etc/nginx/sites-enabled/example.com

Скопируйте и вставьте следующее в новый файл. Вам нужно изменить доменное имя и пути к сертификатам:

server {
  listen 80;
  listen 443 ssl http2;
  server_name example.com;
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/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;
    }
    proxy_pass http://localhost:1880;
    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;
  }
}

Измените текст example.com на ваше собственное доменное имя:

server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

Когда вы закончите редактирование файла, сохраните его и выйдите из редактора (Ctrl+X, Y, Enter). Перезагрузите Nginx, чтобы применить новую конфигурацию.

sudo systemctl reload nginx

Наконец, перезагрузите сервер:

sudo reboot

Подождите пару минут до перезагрузки. Перейдите на свой сервер: http://example.com. Вы должны быть перенаправлены на https://example.com (обратите внимание на https), и увидеть страницу входа в Node-RED. Это означает, что теперь мы проксируем Node-RED через Nginx.

Заключение

Данное полное руководство было протестировано и должно работать, однако здесь много шагов, и они должны быть выполнены точно так, как мы описываем, иначе что-то может работать неправильно.

Во всех наших руководствах и проектах мы всегда стараемся помочь, если кто-то застрял. Однако в данном конкретном случае шагов так много, что может быть крайне сложно помочь вам без доступа к серверу и возможности протестировать (разумеется, у нас нет ресурсов для персональной помощи каждому).

Если у вас возникли проблемы с установкой MQTT-брокера Mosquitto, подготовкой сервера Linux Ubuntu, запуском Node-RED, установкой SSL-сертификата, обратитесь в службу поддержки Digital Ocean и опишите, что именно происходит. Я пользуюсь их сервисом с 2015 года, и у них всегда очень отзывчивая служба поддержки (или просто воспользуйтесь их форумом).

Если вы хотите установить MQTT-брокер Mosquitto на Digital Ocean, следуйте следующему руководству: Запуск облачного MQTT-брокера Mosquitto (доступ из любой точки мира с Digital Ocean).

Прочитайте следующие руководства, чтобы узнать больше о Node-RED:

Спасибо за чтение.

Источник: Access Node-RED Dashboard from Anywhere using Digital Ocean