Доступ к панели Node-RED из любой точки мира с помощью Digital Ocean
В этом руководстве описано, как установить программное обеспечение Node-RED на виртуальную машину Linux Ubuntu (VM) с использованием Digital Ocean. Запуск Node-RED в облаке позволяет получить доступ к панели управления Node-RED из любой точки мира.
Вы также можете установить 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) и как это работает? Вот пример.
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».
Создайте свой аккаунт, и вы получите кредит в размере $100, который можно использовать в течение 60 дней для тестирования платформы. Вам может потребоваться указать действующую кредитную карту, но вы можете отменить свой аккаунт в любое время, если больше не заинтересованы в использовании сервиса после бесплатного 60-дневного пробного периода.
Завершите создание аккаунта предпочитаемым способом (я всегда использую вариант Email).
Подтвердите свой аккаунт и войдите в систему — вы должны увидеть похожую панель управления.
Создание Droplet (виртуальная машина Linux Ubuntu)
Чтобы создать новую виртуальную машину, нажмите кнопку «Create» в правом верхнем углу и выберите опцию «Droplets». Digital Ocean называет свои виртуальные машины Droplet.
Важно
Если у вас уже работает Droplet с MQTT-брокером Mosquitto, вы можете пропустить следующие шаги (создание Droplet). Вы можете запустить Node-RED и MQTT-брокер Mosquitto на одном сервере.
Для этого руководства я буду использовать Ubuntu 20.04 (LTS) x64, и рекомендую выбрать тот же вариант. Вы также можете использовать тарифный план «Basic».
В меню ресурсов виртуальной машины вы можете выбрать самый дешевый план за $5/месяц. Даже при минимальном плане MQTT-брокер и Node-RED будут работать без проблем.
Выберите расположение дата-центра виртуальной машины ближе к вам — в моем случае я использовал регион «London».
Создайте root-пароль, который позволит вам получить доступ к Droplet (сохраните этот пароль, он понадобится для доступа к серверу).
Наконец, выберите hostname, чтобы легко определить, с какой виртуальной машиной вы работаете. Я назвал свой Droplet «mqtt-cloud-server». На этом всё — вам нужно нажать большую зеленую кнопку «Create Droplet», чтобы завершить процесс.
Подождите несколько минут, и когда полоса прогресса завершится, ваш Droplet будет готов.
Доступ к консоли виртуальной машины Linux Ubuntu
Когда ваш Droplet будет подготовлен, откройте свой только что созданный сервер (в моем случае он называется «mqtt-cloud-server»).
Выберите меню «Access» и нажмите кнопку «Launch Console».
В вашем компьютере откроется новое окно браузера.
Введите логин (root) и пароль, указанный ранее, нажмите Enter для доступа к серверу.
Есть необязательный шаг, но он выходит за рамки данного руководства. Он не требуется для работы проекта: подготовьте сервер с пользователем без root-прав (с поддержкой sudo) и базовым файрволом, следуя руководству Initial Server Setup with Ubuntu 20.04.
Установка 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 использует порт 1880, поэтому выполните следующую команду:
sudo ufw allow 1880
Вы можете убедиться в успехе, если конец вывода команды выглядит подобным образом:
node-red start
Подождите несколько секунд, пока все загрузится. Если вы откроете IP-адрес вашего Droplet в Digital Ocean, добавив порт 1880:
http://YOUR-Digital-Ocean-IP-Address:1880
Например:
http://178.62.83.231:1880
Должно загрузиться программное обеспечение 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 и запускать этот файл при загрузке, введите команду:
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-admin, чтобы сделать его доступным глобально:
npm install -g --unsafe-perm node-red-admin
Выполните следующую команду для создания хеша пароля:
node-red-admin hash-pw
Вам будет предложено ввести пароль. Введите желаемый пароль, нажмите Enter, и на экране будет выведен хеш.
Скопируйте строку хеша в буфер обмена и откройте файл настроек Node-RED. В моем случае хеш:
$2b$08$bQvFgdNi6as2.JwtDENbP.w/JROldMUhY9o9hXExyjQzw1iFRvC9liF
Откройте файл settings.js:
sudo nano ~/.node-red/settings.js
Прокрутите вниз и раскомментируйте блок adminAuth (удалив «// « перед каждой строкой). Измените username на желаемое и вставьте ранее сгенерированный хеш в поле password.
Убедитесь, что вы раскомментировали и заменили поле password хешем именно так, как показано выше. Если этого не сделать, авторизация будет невозможна, и вам придется повторить процесс.
Выйдите из файла и сохраните его (Ctrl+X, Y, Enter). Перезагрузите сервер, чтобы все изменения вступили в силу:
sudo reboot
Теперь при доступе к Node-RED вам будет предложено ввести имя пользователя (по умолчанию admin) и пароль, указанный ранее.
После входа вы будете перенаправлены в программное обеспечение Node-RED, где можете создавать и редактировать свои потоки (flows). В правом верхнем углу также есть меню для выхода из системы.
Готово! Ваш сервер готов, и вы можете установить 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