Развернуть 1с на raspberry pi 4
Развертывание приложения, зависящего от платформы
Чтобы развернуть приложение как приложение, зависящее от платформы, выполните следующие действия.
Убедитесь, что на устройстве Raspberry Pi включен протокол SSH. При необходимости см. инструкции по включению SSH в документации по Raspberry Pi.
При этом устанавливается последняя версия. Если вам нужна определенная версия, замените параметр --channel Current на --version , где — это версия конкретной сборки.
Чтобы упростить разрешение пути, добавьте переменную среды DOTNET_ROOT и добавьте каталог .dotnet к $PATH с помощью следующих команд:
Убедитесь, что отображаемая версия соответствует установленной версии.
Опубликуйте приложение на компьютере разработки, как показано ниже, в зависимости от среды разработки.
С помощью клиента SFTP, например scp , скопируйте файлы из расположения публикации на компьютере разработчика в новую папку на устройстве Raspberry Pi.
Например, чтобы использовать команду scp для копирования файлов с компьютера разработчика на устройство Raspberry Pi, откройте командную строку и выполните следующую команду:
- Параметр -r предписывает scp рекурсивно копировать файлы.
- /publish-location/ — это папка, опубликованная на предыдущем шаге.
- pi@raspberypi — имя пользователя и узла в формате @ .
- /home/pi/deployment-location/ — это новая папка на Raspberry Pi.
Последние версии Windows поставляются с OpenSSH, включая scp .
Запустите приложение из командной строки Bash на Raspberry Pi (локальном или SSH). Для этого задайте папку развертывания в качестве текущего каталога и выполните следующую команду (где HelloWorld.dll является точкой входа приложения):
Развертывание автономного приложения
Чтобы развернуть приложение как автономное приложение, выполните следующие действия.
Убедитесь, что на устройстве Raspberry Pi включен протокол SSH. При необходимости см. инструкции по включению SSH в документации по Raspberry Pi.
Опубликуйте приложение на компьютере разработки, как показано ниже, в зависимости от среды разработки.
Разверните приложение в локальную папку, если используется Visual Studio. Перед публикацией выберите Изменить в сводке профиля публикации и перейдите на вкладку Параметры. Убедитесь, что для Режима развертывания задано значение Автономный, а Целевая среда выполнения — linux-arm.
С помощью клиента SFTP, например scp , скопируйте файлы из расположения публикации на компьютере разработчика в новую папку на устройстве Raspberry Pi.
Например, чтобы использовать команду scp для копирования файлов с компьютера разработчика на устройство Raspberry Pi, откройте командную строку и выполните следующую команду:
- Параметр -r предписывает scp рекурсивно копировать файлы.
- /publish-location/ — это папка, опубликованная на предыдущем шаге.
- pi@raspberypi — имя пользователя и узла в формате @ .
- /home/pi/deployment-location/ — это новая папка на Raspberry Pi.
Последние версии Windows поставляются с OpenSSH, включая scp .
Запустите приложение из командной строки Bash на Raspberry Pi (локальном или SSH). Для этого задайте в качестве текущего каталога расположение развертывания и выполните следующие действия:
Предоставьте исполняемому файлу разрешение execute (где HelloWorld — имя исполняемого файла).
Введение
Идея попробовать установить OneScript на устройство типа Raspberry Pi возникла у меня давно, однако сей эксперимент постоянно откладывался, ввиду различных обстоятельств. И вот, улучив момент, когда ребенок смотрел мультфильмы, я наконец-таки решил попробовать. О том, что из этого получилось - читайте ниже.
Приборы и материалы
В качестве устройства, в экспериметах использовался Raspberry Pi 2.
В качестве операционной системы, на которую производилась установка, использовалась Raspbian OS. Само устройство, поддерживает достаточно большое количество операционных систем, среди которых есть и Ubuntu без графического интерфейса. Конечно, для практического использования - это более правильный вариант, однако, ввиду того, что экспериментальное устройство принадлежит ребенку, и количество времени, выделенное на эксперимент было ограничено, было принято решение использовать уже установленную ОС.
Поскольку Raspbian OS имеет в своей основе Debian, настройка системы мало отличается от настройки Ubuntu Server, описанной в соответствующей статье. Соответственно, моменты одинаковые для обеих ОС, подробно рассматриваться не будут.
Настройка системы
Получаем доступ к командной строке
Как и в случае с Ubuntu Server, Вы можете подключиться к устройству при помощи клиента SSH, предварительно разрешив подключения в ОС, или запустить штатный LXTerminal из графической оболочки.
Обновляем список доступных пакетов и устанавливаем новые версии
В командной строке выполняем следующие команды:
Устанавливаем mono
Сначала я попробовал установить mono из штатного репозитария, однако, как впоследствии выяснилось, версия mono в нем старая, и ядро OneScript завершало работу с ошибкой, поэтому необходимо подключить репозитарий mono-project.
Поиск в google выдал необходимую sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list sudo apt-get update && apt-get upgrade
Для установки mono выполняем:
Установка web-сервера
Не смотря на то, что для Raspbian есть и apache и mod-mono, и вроде-бы все должно быть хорошо, гугл выдал некоторое количество публикаций, в которых говорится о проблемах с использованием mod-mono server на Raspberry. Поэтому было принято решение, использовать в качестве web-сервера XSP (к тому-же установка apache и mono-mod-server уже описана в другой статье). Это простой web-сервер, который как правило используется для разработки и отладки, однако, он может быть успешно применен и в продуктивных средах в связке с ngix. Поскольку время эксперимента, а также файловые ресурсы на SD-карте устройства были ограничены, я ограничился установкой только XSP.
Для установки XSP, в командной строке выполните следующую команду:
Запуск приложения
Поскольку web-сервер XSP не является службой (демоном), запуск web-сервера был произведен "вручную".
Для запуска, необходимо перейти в папку с web-приложением:
и запустить web-сервер
После старта, web-сервер сообщит нам информацию, необходимую для доступа к web-приложению
После ввода в браузере соответствующего url, мы увидим наше web-приложение.
Для автоматического старта XSP при старте ОС, необходимо внести небольшие изменения в загрузочные скрипты, однако в силу того, что я не тестировал эти настройки, эта тема выходит за рамки настоящей статьи.
Заключение
Здесь есть поклонники Kubernetes? Я уже довольно давно пользуюсь им как на работе, так и в других местах, где занимаюсь частными проектами, но иногда мне нужно место, где можно быстро и без особых затрат разработать и протестировать новые функции или просто, как говорят, "поиграть с программой", скопировать данные в резервное хранилище, обменяться файлами или сделать что-либо подобное.
Я всё подсчитал и понял, что общая стоимость кластера получается ниже, чем стоимость облачных предложений аналогичной вычислительной мощности с таким же количеством нод. Нужно ли ещё что-то объяснять.
Четыре Raspberry Pi 4B 4GB (каждый по 5548 руб.)
Четыре карты памяти 128 GB U3 (каждая по 2616 руб.)
Один источник питания с несколькими USB-выходами (2777 руб.)
Один корпус для нескольких Pi (2242 руб.)
Не помешает добавить: радиаторы и четыре кабеля USB-B на USB-C.
Почему Raspberry Pi?
TL;DR. Главные причины — цена и вычислительная мощность.
Кластер из четырёх нод учетверяет характеристики каждого из мини-компьютеров (1,5 ГГц, 4 ядра ARM CPU и 4 ГБ RAM), то есть в итоге мы получаем 16 ядер 1,5 ГГц и 16 ГБ RAM.
Подготовка карты памяти
Начинаем с загрузки операционной системы, и это будет самая затратная по времени часть проекта. Большую часть своего времени я работаю с Docker и Kubernetes, и одно из моих любимых занятий — сведение размеров образов Docker к абсолютному минимуму. Чаще всего я пользуюсь Alpine Linux, поэтому свой кластер буду строить именно на этом дистрибутиве.
Заходим в раздел Alpine Linux Downloads и выбираем версию AARCH64 для Raspberry Pi 4 Model B.
Пока загружается дистрибутив, подготовим карту памяти: отформатируем её под файловую систему FAT32. Я — фанат OSX, поэтому, чтобы получить идентификатор диска карты памяти, обычно пользуюсь этой командой:
Чтобы отформатировать всю карту памяти (я назвал её RPI), запустите эту команду:
sudo diskutil eraseDisk FAT32 RPI MBRFormat /dev/diskX
Распакуйте загруженный пакет с Alpine linux и сбросьте его на карту:
sudo tar xf alpine-rpi-3.12.1-aarch64.tar.gz -C /Volumes/RPI
Базовая настройка системы
Поздравляю, вы на шаг ближе к миру Kubernetes, и где? У себя дома! Вставьте карту памяти в Raspberry Pi, монитор или телевизор, соедините с клавиатурой и включите питание. После того как система загрузится и предложит войти, в качестве имени пользователя и пароля используйте root. Настройка начинается с этой команды:
Я запускаю кластер в домашних условиях, и на моём маршрутизаторе нет нужного количества свободных портов, поэтому я решил воспользоваться сетью Wi-Fi. Вариантов тут не так много, но в любом случае стоит продумать каждый.
После завершения настройки нужно сделать ещё несколько вещей. Alpine по умолчанию запускается из оперативной памяти, но было бы лучше, если бы наши изменения сохранялись на диске, чтобы после возможных перезагрузок каждый раз не вводить их заново.
Вот что нужно сделать:
Изменить размер раздела FAT32 до разумного минимума — в моём случае я задал 1 ГБ.
Для создания нового загрузочного раздела использовать всё оставшееся свободное место.
Не забыть записать только что сделанные изменения.
Полезное руководство: Как работать с cfdisk.
Чтобы завершить весь процесс, нужно запустить ещё несколько команд:
Обновите записи /etc/fstab
И — последние штрихи после перезагрузки системы: имейте в виду, что, если не включить соответствующие cgroups, шаг kubeadm выполнить не удастся.
И, наконец, очень важная вещь после всех шагов — сделать резервные копии внесённых изменений и перезагрузить систему.
Настройка других системных параметров
Я уже писал выше, что собираюсь использовать кластер Kubernetes в домашних условиях. Но, упреждая ваш вопрос, отвечу: да, он будет работать и в офисной сети, но в этом случае нужно будет ещё кое-что добавить.
Определите с помощью avahi daemon имя узла в локальной сети
Зачем нужен этот шаг? А затем, что гораздо проще запустить команду ssh pi0.local, чем возиться с соответствующим IP-адресом. Сетевые настройки и настройка параметров кластеризации после этого станут намного проще, особенно если отсутствует возможность использования статических IP-адресов.
Разрешить ssh root-доступ
Внесите изменения в файл /etc/ssh/sshd_config — добавьте к нему следующую строку, чтобы предоставить ssh root-доступ.
Установите Docker, Kubernetes и оставшиеся пакеты. Они понадобятся нам позже.
Силы можно сберечь
На этом шаге всё должно быть готово. Последним шагом я выключил Raspberry Pi, вставил карту памяти обратно в ноутбук и создал её образ, чтобы можно было продублировать его на оставшиеся три карты и, таким образом, сэкономить время.
Не забудьте: чтобы не возникали конфликты, нужно изменять содержимое /etc/hostname для каждого вновь создаваемого компьютера. Я назвал компьютеры pi0, pi1 и pi2 (так легче запомнить) и внёс эти имена в локальный конфигуратор ssh (на именование нет никаких ограничений).
Создание мастер-ноды Kubernetes
Сохраните вывод команды, которая начинается с kubeadm join, в безопасном месте. Она понадобится, чтобы добавить к кластеру оставшиеся ноды.
Для сохранения идентификационных данных в домашнем каталоге выполните эти команды:
Как получить доступ к ноде?
Чтобы избежать возможных конфликтов, я скопировал содержимое папки $HOME/.kube/config с ноды на локальную машину, изменив несколько значений по умолчанию. В результате я получил возможность пользоваться с ноутбука такими инструментами, как kubectl и k9s, и могу быть уверен, что всегда доберусь до нужного сервера.
Мастер-нода запущена, что ещё нужно сделать?
Нужно обеспечить сетевую связь между подами — без неё нода будет иметь отметку (taint) и всегда оставаться в состоянии NotReady — “не готова”.
По умолчанию на мастер-ноде ничего развёртывать нельзя, и нода будет отображаться c отметкой (taint), но не волнуйтесь — мы можем изменить это командой
kubectl taint nodes --all node-role.kubernetes.io/master-
Теперь что касается дашборда. Покажите мне того человека, которому не нравится, когда в ПО имеется дашборд! В Kubernetes есть собственный и достаточно универсальный дашборд, и с его помощью можно обозревать весь кластер и что-либо у него внутри.
Как вы, возможно, заметили, я довольно хорошо покопался в настройках Helm-чарта, но для этого были причины.
Ваш дашборд будет работать, но. он ничего не будет показывать, потому что ещё нет разрешений.
Мы почти у цели. У нас есть мастер-нода и дашборд, но доступа к нему в данный момент у нас нет. Конечно, для доступа к дашборду можно было воспользоваться nodePort, но мы пойдём другим путём — получим доступ средствами Kubernetes, а для этого нам понадобится балансировщик нагрузки loadBalancer.
Нода работает в локальной сети, поэтому мы не можем рассчитывать ни на какие "плюшки" от AWS или GoogleCloud, но бояться тут нечего — эту проблему, в принципе, можно решить.
Балансировка нагрузки в домашней сети
Выполните инструкции по установке из MetalLB до конца раздела Installation By Manifest.
Это команда будет выполняться до тех пор, пока Pi включён. Чтобы не делать лишнюю работу, создавая скрипты запуска, я решил изменить файл /etc/network/if-up.d/dad и установить неразборчивый режим: в нём сетевая плата позволяет принимать все пакеты, независимо от того, кому они адресованы.
Создайте следующий манифест: my-dashboard.yaml
Не забудьте изменить раздел адресов в соответствии с настройками локальной сети.
Кластер k8s на базе Raspberry Pi.
Эта статья, пронизанная любовью к экспериментам, была написана после дня субботних мучений, скрашенного несколькими банками энергетического напитка.
Обзор подов кластера представлен K9S
Добавление дополнительных нод
Я придерживаюсь принципов DRY (Don't Repeat Yourself — Не повторяйся) и KISS (Keep It Stupid Simple — Делай проще, тупица), поэтому не буду ничего повторять, а объясню всё простыми словами. Вернитесь к началу статьи и на вновь создаваемых нодах выполните ещё раз все шаги до места “Создание мастер-ноды”, затем запустите следующую команду (не забудьте заменить IP-адрес на IP мастер-ноды или укажите имя узла pi0.local. За эту возможность отдельное спасибо avahi-daemon):
Совет: если вы забыли скопировать команду kubeadm во время создания мастер-ноды, не расстраивайтесь, просто запустите на мастер-ноде следующую команду, и команда kubeadm будет распечатана. А если хотите прокачать себя до DevOps инженера — приходите учиться и станьте дефицитным и очень высокооплачиваемым специалистом.
Узнайте, как прокачаться и в других специальностях или освоить их с нуля:
В этой серии статей я расскажу как самостоятельно собрать полнофункциональный прототип промышленного IIoT-шлюза на базе Raspberry PI.
Разумеется, подобная штука не может стать полноценной заменой настоящему промышленному железу - достичь сравнимого уровня надежности, защищенности и производительности одновременно, либо не получится, либо будет намного сложнее и дороже, чем купить готовую железку.
Однако в качестве быстрого и дешевого решения на этапе проверки гипотез (в момент когда вам только предстоит определиться какие данные каким способом снимать и как их потом хранить и использовать) такое решение вполне имеет право на существование.
В конце концов, с программной точки зрения, большинство современных промышленных IoT-шлюзов - не что иное, как обычные одноплатные ПК со специфической ОС (чаще всего на базе Linux) и набором предустановленного ПО.
В общем те, кто готов к подобным экспериментам на производстве, либо просто интересуется IIoT и хочет поэкспериментировать с технологиями для собственного развития - вэлкам под кат!
Постановка задачи
Для начала давайте определим, какие функции мы хотим получить на выходе.
Основная суть подобного проекта - анализ данных о производственном процессе.
То есть в первую очередь - сбор телеметрии с различных датчиков, отправка её на сервер (например в облако) для централизованной обработки и накопление истории. Дальнейшая судьба собранной статистики зависит от конкретной решаемой задачи и вашей фантазии.
Также неплохо было бы иметь возможность мониторить поступающие данные в реальном времени (хотя бы чтобы понять идут они или нет) и накапливать локальный архив timeseries на шлюзе (например, если нет соединения с интернетом).
В первой части статьи мы реализуем основные функции:
сбор телеметрии с промышленных датчиков по протоколу Modbus;
передачу данных в облако;
локальный мониторинг в реальном времени;
Во второй - разберемся с тем, как можно накапливать и обрабатывать телеметрию в облаке;
А в третьей - доработаем проект дополнительными фичами:
локальным хранилищем телеметрии;
устройством для прямого считывания аналогового или цифрового сигнала;
Общая архитектура
Наш небольшой прототип будет иметь все обязательные компоненты IIoT-решения:
Устройство считывания показаний датчиков (можно использовать промышленный контроллер, “умные” датчики, или собрать свой вариант на базе любого arduino-совместимого контроллера);
IIoT-шлюз, в качестве которого будет выступать Raspberry PI;
Облачный сервис, который принимает данные по протоколу MQTT, сохраняет их в Managed DB и производит дальнейшую обработку - эту часть развернем на платформе Yandex.Cloud
Настраиваем шлюз
Начнем с центрального узла нашего небольшого проекта, то есть малинки.
В качестве “ядра” системы на стороне шлюза удобно использовать Node-RED. Это простой и удобный инструмент Low-code разработки, который позволяет сократить время создания IoT (и не только) решений. Если по какой-то неведомой причине вы им ещё не пользуетесь - обязательно почитайте про него тут и тут!
Одно из главных преимуществ Node-RED - наличие огромного количества расширений. В том числе, специальных “кубиков” для работы с modbus, serial и всевозможными базами данных. Там же есть и конструктор легких дашбордов для real-time мониторинга (всё это нам понадобится).
1) Устанавливаем и настраиваем Node-RED:
Вообще Node-RED есть в официальном репозитории Raspberry и его можно поставить просто через apt-get. Но разработчики рекомендуют использовать специально подготовленный ими скрипт, который сразу ставит ещё и npm и настраивает node-RED для запуска в качестве сервиса.
Заходим на малинку и запускаем скрипт:
Дожидаемся завершения установки (она может занять несколько минут). Когда установка завершена, можно сразу настроить автозапуск при старте ОС:
Если хотите сразу озаботиться некоторой безопасностью, можно настроить вход в web-интерфейс по паролю вот по этой инструкции.
Файл settings.js скорее всего будет находиться в папке: /home/pi/.node-red
Теперь всё готово к запуску Nede-RED:
Если всё установилось и запустилось успешно, web-интерфейс Node-RED будет доступен в локальной сети по адресу: [IP малинки]:1880
Но настройка на этом ещё не закончена - по умолчанию у нас есть только базовые предустановленные компоненты, а для задуманного понадобится несколько дополнительных, которые надо еще поставить.
Заходим в web-интерфейс, идем в настройки палитры: [Меню в правом верхнем углу] ->[Pallet manager]:
Меню настроек палитры
Переходим во вкладку “Install”, находим и устанавливаем следующие пакеты:
node-red-contrib-modbus - пакет для работы по протоколу Modbus
node-red-dashboard - дашборды для мониторинга в реальном времени
postgrestor - простой компонент для выполнения запросов к PostgreSQL
node-red-node-serialport - компонент для работы с serial (этот компонент может быть уже установлен вместе с базовыми)
Вот теперь Node-RED настроен, можно приступать к разработке!
2) Реализуем считывание данных по Modbus:
Modbus - открытый протокол, разработанный ещё в 1979 году для использования в контроллерах MODICON (бренд, между прочим, жив до сих пор и ныне принадлежит Schneider Electric).
Сейчас modbus является де-факто стандартом для промышленных сетей и поддерживается подавляющим большинством контроллеров и “умных” датчиков. Для интересующихся, вот тут есть хорошая обзорная статья по теме.
Я же не буду подробно останавливаться на его описании. Упомяну только что протокол имеет 3 основные модификации:
две для использования с сетевыми интерфейсами RS-232/422/485 (Modbus ASCII и Modbus RTU)
и одну для обмена по TCP/IP (Modbus TCP)
Это важно, так как с одной стороны влияет на то, как Raspberry будет физически подключаться к устройствам (в первом случае понадобится переходник COM/RS-USB), а с другой - от этого зависят настройки считывания данных.
И так, подключаем девайс в соответствующее гнездо малины, создаем поток, добавляем в него кубик “modbus-read” и заходим в его настройки:
Для начала надо создать подключение к Modbus-серверу. Нажимаем “Создать подключение” и вводим параметры устройства, с которого хотим получать телеметрию:
Для варианта с RS (Serial) необходимо указать адрес порта, к которому подключено устройство, тип протокола (RTU или ASCII) и поддерживаемую скорость обмена (baud rate):
Для TCP указываем IP-адрес устройства (стоит убедиться, что для eth0 на малинке настроена статика в той же подсети и устройство успешно пингуется) и номер порта (обычно используется порт 502):
Теперь настраиваем сам кубик. Тут важны 4 параметра:
FC (код функции) - Для считывания цифровых данных - 02, для аналоговых - 04.
Address - адрес первого регистра для считывания. Адреса регистров можно посмотреть в спецификации устройства, обычно “смысловые” регистры идут в начале, т.е. Начинаются непосредственно с 0.
Quantity - количество регистров для считывания. Этот параметр зависит от количества передаваемых устройством параметров - сколько передается сигналов столько и будет регистров. Эту информацию также можно найти в спецификации или даташите.
Poll Rate - частота опроса. Задает частоту, с которой поток будет получать данные от устройства.
В данном примере настроено получение сигналов восьми аналоговых датчиков, начиная с регистра 0000, раз в 5 секунд:
Кубик возвращает в payload массив значений регистров (если регистры указаны правильно - они же показания датчиков). Осталось их немного отформатировать и добавить метку времени. Для этого воспользуемся функцией:
3) Настраиваем мониторинг:
Теперь настроим дашбордик для мониторинга сигналов из web-интерфейса Node-RED. Для этого используем кубик “chart”.
Функция в Nod-RED может иметь больше одного выхода (количество выходов настраивается в нижней части окна свойств):
Но в данном случае мы можем не знать заранее сколько сигналов (и соответственно выходов) будет. Поэтому положим всё в один массив и вернем его целиком:
И видим график сигналов в реальном времени:
Вот и всё, сбор и локальное отображение телеметрии настроено!
Настройка брокера MQTT в облаке
Теперь можно приступить к настройке серверной части решения. Для этого воспользуемся облачным сервисом Yandex, называемым Yandex IoT Core.
MQTT - ещё один де факто стандартный протокол для IoT-проектов. Вот тут есть хороший обзор самого протокола, поэтому подробно на нем останавливаться не буду, но немного расскажу как устроен MQTT-брокер от Yandex:
В Yandex IoT Core есть два основных типа объектов - реестры и устройства.
Организация топиков Yandex IoT Core
Для дальнейших действий потребуется учетная запись Yandex.Cloud. Если у вас такой еще нет, ее можно достаточно быстро завести. В процессе необходимо ввести данные карты но (в отличии от некоторых других облачных сервисов) деньги с неё списываться не будут пока вы явно не переключитесь на платный аккаунт. После регистрации Yandex предоставляет небольшой грант в 4К рублей, которого на приведенные тут эксперименты хватит с лихвой.
Подключаем и настраиваем сервис:
Для начала генерируем сертификат, который будет использоваться для чтения данных из реестра. Вообще говоря, сервис позволяет идентификацию по логину и паролю как для устройств, так и для реестров, но поскольку предполагается использовать реальные данные с оборудования, лучше озаботиться идентификацией по SSL.
Сгенерировать пару сертификатов можно при помощи утилиты OpenSSL вот такой командой:
Теперь заходим в консоль Yandex.Cloud, выбираем IoT Core и создаем новый реестр:
Открытую часть ключа, сгенерированного на предыдущем шаге (crt_reg.pem), загружаем в настройки реестра. Этот сертификаты будут использоваться для считывания телеметрии из брокера внешними сервисами и отправки команд устройствам:
Нажимаем "Создать" и попадаем в настройки свежесозданного реестра. Теперь надо зарегистрировать в нем малинку в качестве устройства.
Заходим в Устройства и создаем новое:
Аналогично с созданием реестра загружаем сертификат из пары, созданной на малинке и нажимаем "Добавить".
ID устройств и реестров можно посмотреть на вкладке "Обзор". Они нужны для задания адресов топиков:
Топик устройства: $devices//events
Топик реестра: $registries//events
Перманентный топик устройства: $devices//state
Перманентный топик реестра: $registries//state
Подробнее о топиках Yandex IoT Core можно почитать вот тут.
Возвращаемся к проекту Node-RED.
Указываем адрес топика, в который собираемся писать, например топик реестра. Уровень сервиса (QoS) ставим 0 - для наших задач отслеживание доставки не требуется:
Заходим в настройки сервера. Тут настраиваем подключение к брокеру:
Порт: 8883
Ставим галочку “Enable secure (SSL/TLS) connection” и заходим в настройки TLS:
Сохраняем настройки и деплоим проект. В итоге flow выглядит вот так:
А телеметрия успешно отправляется в облако!
Проверить это можно с помощью утилиты командной строки yc, подписавшись на указанный в настройках топик:
Либо собрав отдельный поток Nod-RED с чтением из MQTT с помощью нода "mqtt in" (интереснее, если он будет работать на другом устройстве, но и та же самая малинка тоже подойдет):
Результат
И так, минимальный функционал шлюза реализован - телеметрия собирается, передается в облако и доступна в реальном времени из любой точки планеты. Можно, например, развернуть Node-RED на вашем локальном ПК и сделать на нем небольшой дашбордик, отражающий собираемые показатели.
А в качестве бонуса уже есть небольшой локальный монитор сигналов, доступный в локальной сети малинки.
В следующей части начнем сохранять получаемую телеметрию и посмотрим что ещё с ней можно делать в облаке.
Raspberry Pi — это недорогой одноплатный компьютер, отличающийся крайней экономичностью в плане потребления электроэнергии. Он хорошо подходит на роль платформы, на базе которой создают устройства, которые постоянно должны быть включены. Среди множества способов применения Raspberry Pi можно выделить использование этого компьютера в качестве веб-сервера. И, на самом деле, хостить сайты на Raspberry Pi очень просто. Если посчитать стоимость услуг обычного хостинг-провайдера, то окажется, что они не так уж и дёшевы. Альтернативой таким услугам может стать собственный хостинг на Raspberry Pi, обслуживание которого не стоит практически ничего. Кроме того, платформа Raspberry Pi постоянно развивается, поэтому тому, кто решает ей пользоваться, можно не беспокоиться о том, что в будущем ему придётся работать с устаревшим аппаратным и программным обеспечением.
Сильные стороны Raspberry Pi-хостинга
У хостинга сайтов на Raspberry Pi есть немало преимуществ перед использованием для этой цели традиционных серверов. Вот некоторые из них:
- Обычный хостинг дорог.
- Raspberry Pi весьма экономичен в плане потребления энергии.
- Raspberry Pi легко транспортировать.
- Круглосуточная работа обычного сервера означает большие энергозатраты.
Хостинг сайта на Raspberry Pi
В этом материале я приведу пошаговое руководство по организации хостинга сайтов на Raspberry Pi. Если вам нужен подобный хостинг — рекомендуется читать этот материал, ничего не пропуская, и тут же делать то, о чём идёт речь. А перед началом работы просмотрите статью — это позволит вам получить общее представление о том, что вы должны будете сделать, и о том, что вам для этого понадобится.
Аппаратные средства
Для организации хостинга на Raspberry Pi вам понадобится следующее:
- Raspberry Pi. Полагаю, не стоит и говорить о том, что перед началом этого проекта вам понадобится Raspberry Pi. Но, всё же, скажу. При этом постарайтесь обзавестись самой современной версией Raspberry Pi — она обеспечит более высокую производительность.
- Маршрутизатор или модем. Они нужны для подключения Raspberry Pi к интернету. Порой интернет-провайдеры дают пользователям устройство, позволяющее подключить к интернету ограниченное количество пользовательских устройств. В такой ситуации, чтобы упростить подключение к интернету множества устройств, пригодится маршрутизатор.
- Ethernet-кабель. Лучше всего подключать Raspberry Pi к интернету именно с помощью кабеля. Так можно добиться более высокого качества соединения. Но можно использовать и Wi-Fi-адаптер — встроенный или внешний.
Шаг 1: настройка операционной системы на Raspberry Pi
Подключите microSD-карту к компьютеру и отформатируйте её. Загрузите NOOBS (New Out Of Box Software). Это — установщик операционных систем, рассчитанный на новичков. После завершения загрузки архива распакуйте его и скопируйте файлы на только что отформатированную microSD-карту.
Вставьте карту в Raspberry Pi, подключите к плате блок питания, клавиатуру, монитор и мышь. Raspberry Pi начнёт загружаться, вы увидите экран выбора операционной системы, которую нужно установить. Если на этом этапе что-то пошло не так — вероятнее всего блок питания или HDMI-кабель подключены недостаточно надёжно. Поэтому проверьте подключение кабелей к Raspberry Pi.
Если у вас нет опыта работы с Raspberry Pi, то на экране выбора операционной системы я рекомендую выбрать Raspbian. Ещё один хороший вариант — Adafruit. Установка операционной системы займёт некоторое время. Проследите за тем, чтобы всё это время Raspberry Pi не выключался бы.
Экран выбора операционной системы
Шаг 2: взаимодействие с Raspberry Pi-сервером по SSH
На этом шаге мы настроим подключение к Raspberry Pi-серверу по SSH. Протокол SSH позволяет организовать безопасное соединение между компьютером и Raspberry Pi, используемое для передачи данных. С помощью такого соединения, кроме того, можно, пользуясь инструментами командной строки, управлять Raspberry Pi.
Теперь, когда в вашем распоряжении имеется ОС Raspbian, установленная с использованием свежей версии NOOBS, то у вас, вероятно, установлено и всё необходимое для работы с SSH. Для того чтобы организовать соединение компьютера и Raspberry Pi вам понадобится узнать IP-адрес платы. Для этого воспользуйтесь следующей командой:
То, что вам нужно, можно найти в верхней части экрана. Если вы подключили Raspberry Pi к интернету с использованием Ethernet-кабеля, в начале блока, содержащего нужный вам адрес, будет eth0 . Если вы пользуетесь Wi-Fi, то там будет wlan0 . В обоих случаях то, что нам нужно, идёт после inet addr: . Именно этот адрес и можно использовать для подключения к Raspberry Pi с компьютера.
Выяснение IP-адреса Raspberry Pi
Если ваш компьютер работает под управлением Windows, вам понадобится SSH-клиент. Например — PuTTY. Для настройки подключения понадобится указать в поле Host Name IP-адрес, оставив в поле Port 22. Если нажать на Enter , PuTTY откроет окно терминала, в котором у вас попросят имя пользователя (по умолчанию — pi ) и пароль (по умолчанию — raspberry ) для подключения к Raspberry Pi. Введите их — и вы готовы к удалённой работе с вашим новым сервером.
Окно настройки SSH-подключения
Если вы пользуетесь Mac или каким-нибудь дистрибутивом Linux, то всё необходимое для организации SSH-подключения у вас уже, наверняка есть. Вам, для подключения к Raspberry Pi, достаточно выполнить в терминале следующую команду:
Если IP-адрес платы выглядит как 192.167.2.2 , вам нужно будет модифицировать эту команду так:
Потом вам зададут вопрос о пароле. Стандартный пароль ( raspberry ) можно сменить на что-то более надёжное.
Шаг 3: обновление ПО Raspberry Pi
После того, как вы подключились к Raspberry Pi с компьютера по SSH, нужно, перед установкой Apache, привести систему в актуальное состояние. Для того чтобы это сделать, можно воспользоваться следующими командами:
Система обновится, вы будете готовы к установке Apache.
Шаг 4: установка Apache
После загрузки установочных файлов Apache достаточно всего лишь одной команды для его установки:
Эта команда, правда, устанавливает не только Apache. Она отвечает за установку некоторых других пакетов, вроде PHP и PHP-библиотеки для Apache. Возможности PHP могут нам понадобиться, например, для организации подключения сайта к базе данных.
Успешная установка Apache
После того, как установка завершится, нужно, для активации программы, перезапустить её с помощью следующей команды:
Затем, чтобы убедиться в том, что Apache работает нормально, можно воспользоваться такой командой:
Проверка правильности работы Apache
Если в выводе вышеприведённой команды имеется зелёный текст active (running) , это значит, что всё работает как надо. Если сервер по какой-то причине будет выключен, запустить его снова можно так:
После этого вы сможете обращаться к Raspberry Pi с компьютера. Например, можете открыть браузер и перейти в нём по такому адресу (содержащему ранее выясненный IP-адрес платы, который использовался для подключения к ней по SSH):
В браузере будет выведена страница, сообщающая об успешной установке Apache.
Шаг 5: создание простого веб-сайта
После того, как на Raspberry Pi завершится установка Apache, сервер будет выдавать при обращении к нему простейшую стандартную HTML-страницу, сообщающую о том, что сервер работает.
Простая страница
Если вы хотите поменять эту страницу на что-то своё — перейдите в папку /var/www/ и внесите в index.html свой код. Сделать это в терминале можно так:
Проверить то, что получилось можно, как и прежде, обратившись к серверу из браузера.
Шаг 6: настройка FTP
У вас, вероятнее всего, уже есть сайт, который вы хотите хостить на Raspberry Pi. Его нужно лишь перенести на сервер. Для этого удобно пользоваться FTP. Установим vsftpd (Very Secure FTP Daemon):
После установки vsftpd нужно выполнить некоторые настройки.
Откроем файл настроек vsftpd :
Для начала надо изменить значение настройки anonymous_enable с YES на NO . Потом надо раскомментировать следующие строки:
В конец файла надо добавить следующее:
Благодаря этому можно будет видеть файлы, имена которых начинаются с точки, вроде .htaccess .
Настройка vsftpd
После завершения редактирования файла vsftpd.conf надо нажать CTRL+X для сохранения файла и выхода из терминала. Подтвердить выполнение операции можно, введя Y и нажав на Enter . В итоге нужно перезапустить vsftpd :
Теперь можно будет подключаться к Raspberry Pi и выгружать на сервер, в директорию /var/www/html , материалы сайта.
Шаг 7: получение доменного имени
Теперь вы можете загружать на сервер материалы своего сайта и заходить на сайт из локальной сети. Но вот никому другому ваш сайт пока не доступен. Для того чтобы к сайту могли обращаться пользователи интернета, нужно сделать ещё кое-что. Далее речь пойдёт об одном из самых важных этапов настройки Raspberry Pi-сервера.
Для того чтобы пользователи интернета могли бы заходить на ваш сайт, у сервера должен быть внешний IP-адрес. Но предлагать всем обращаться к сайту по IP-адресу — это не совсем профессионально. Люди предпочитают заходить на сайты, используя их адреса, записанные не цифрами, а буквами, понятными словами. Есть множество сервисов, которые позволяют бесплатно настроить соответствие IP-адреса и доменного имени. Обычно работать с ними очень просто.
После этого у вас спросят имя пользователя и пароль, затем начнётся установка. Далее, нужно сделать так, чтобы No-IP-клиент запускался бы автоматически при включении Raspberry Pi. Для этого надо отредактировать файл rc.local :
В него надо добавить такую строку:
Сохраните и закройте файл. После этого перезагрузите Raspberry Pi командой sudo reboot .
Шаг 8: посещение веб-сайта
После того, как настроена связь IP-адреса и доменного имени сайта, войти на него можно, введя в адресной строке браузера его доменное имя. При использовании сервиса No-IP работу системы можно проверить такой командой:
Проверка noip2
Если вам удастся узнать валидный PID, это значит, что всё работает нормально.
Шаг 9: улучшение производительности и безопасности
Организация хостинга на базе Raspberry Pi — это довольно просто, но Raspberry Pi — это не лучший сервер в плане производительности. Если вам не хватает производительности вашего сервера — вы можете попробовать её улучшить.
Один из способов улучшения производительности Raspberry Pi-сервера — использование для размещения материалов сайта USB-диска вместо SD-карты. При таком подходе сократится время, необходимое на доступ к данным.
В целом же можно отметить, что на Raspberry Pi-сервере лучше всего хостить простые статические сайты.
Если говорить о безопасности, то рекомендуется поменять стандартный пароль на что-то более надёжное. Для смены пароля можно воспользоваться командой passwd . Это повысит безопасность системы.
Организация LAMP-хостинга
Если вы полагаете, что статический HTML-сайт — это для вас слишком просто, и что вам нужно что-то более продвинутое, то вам, возможно, подойдёт LAMP-сервер. Такой сервер поддерживает PHP и MySQL, что позволяет обеспечить работу интерактивных веб-сайтов. Если вы хотите использовать эту систему — сначала установите сервер Apache, а затем — MySQL. Для установки MySQL и соответствующих PHP-компонентов выполните следующую команду:
После этого перезапустите Apache:
Далее, нужно установить PHP:
После завершения установки нужно снова перезапустить Apache, используя вышеупомянутую команду. Теперь LAMP-сервер готов к работе и в вашем распоряжении имеются PHP и MySQL, позволяющие создавать продвинутые веб-проекты.
Итоги
Мы разобрали несколько вариантов хостинга сайтов на Raspberry Pi. Как видите, такой хостинг не так уж и сложно настроить. Но тут нужно учитывать то, что возможности Raspberry Pi, в сравнении с обычным хостингом, ограничены. Правда, если вам нужно хостить простой статический сайт, то такой хостинг вам вполне подойдёт. Вам, кроме того, нужно будет принять во внимание вопросы производительности и безопасности.
Читайте также: