Данная практика посвещена базовым принципам Docker. Для выполнения практики необходимо использовать 3 виртуальные машины Linux.
Необходимо развернуть следующую систему:
Симуляторы сенсоров, развернутые в докер контейнерах, публикуют сообщения на Mqtt брокер. Сервис Consumer подписывается на все сообщение, опубликованные в брокере, и заносит их в базу данных временных рядов. Сервис dashboard отображает графики полученных данных от сервисов.
Для выполнения данного задания необходимо:
-
Использовать три виртуальные машины из предыдущей практики. Установить на каждой docker и docker-compose.
-
Linux A.
- Разработать скрипты - симулятор технологических данных. Создать класс Sensor, а также наследников этого класса (указать 4 реально существующих типа датчиков, например, температура, давление, потребляемый ток).
- В основной программе реализовать клиента, который подключается к mqtt брокеру и публикует сообщения.
- Конфигурацию типов датчиков вывести через переменные среды
- Запуск реализовать с помощью докер контейнеров. Для запуска нескольких типов использовать docker-compose.
- В итоге сделать 4 типа датчиков, запустить 6 контейнеров разных типов, где задается:
- тип датчика
- название датчика
- дискретность публикации сообщений
- (ДОП ЗАДАЧА, НЕОБЯЗАТЕЛЬНО) тип формулы (подумайте как можно через конфигурацию повлиять на характер генерации нового числа)
- в формуле предусмотрите в качестве операнда дату вашего рождения (например умножение на год рождения или месяц)
- (ДОП ЗАДАЧА, НЕОБЯЗАТЕЛЬНО) тип топика (json формат (topic - /sensor/type, value {"name":"sensor1", "value": 22.4} ) или значение в конкретный топик (topic - /sensor/type/value, value - 22.4))
- Залить на свою страницу в докерхаб созданный image контейнера в публичный репозиторий.
-
Linux B
- Развернуть mosquitto брокер с помощью docker. Настроить проброс портов, необходимый для работы приложения.
- Настроить конфигурационный файл для брокера. Использовать volume для подгрузки файла в докер.
- В файрволе открыть порт, необходимый для работы брокера.
-
Linux C
- Развернуть influxdb (1.8 версия), telegraf, grafana с помощью docker-compose
- Настроить подписку телеграфа на mqtt топики брокера
- Сохранять все сообщения в influxdb
- В grafana вывести дашборды с текущими значениями всех датчиков и агрегированными показаниями (среднее значение по всем датчикам) - сделать скриншот
- Необходимо создать volume для каждого контейнера с конфигурационными файлами. (ДОП ЗАДАЧА, НЕОБЯЗАТЕЛЬНО) При пересоздании контейнеров конфигурация дашбордов должна сохранится (без самих данных).
- В конфигурационных файлах ссылаться по alias контейнеров (не по ip адресам)
-
При загрузки задания в гит репозиторий создать две ветки develop и master. В master загрузить только readme - задание. В ветку develop - загружаем сделанное задание. Как только отправляете мне на проверку задание, создаете пул реквест в ветку мастер и назначаете меня ревьювером. Таким образом я смогу комментировать ваш репозиторий.
-
Оформить инструкцию в виде Markdown файла. Приложить конфигурационные файлы в репозиторий.
Критерием успеха выполнения задания будет являтся также написанная инструкция по запуску ваших контейнеров. То есть, если я загружу с докерхаба ваш image, запущу docker-compose файлы на своих виртуальных машинах, и при этом смогу зайти в интерфейс и посмотреть дашборд с потоком данных, то задание выполнено.
Репозиторий оформить следующим образом:
- root
-
assets
- images - картинки для отчета
-
vms
- client
- simulator - код симулятора и докерфайл
- gateway
- mosquitto - папка с конфигом для mosquitto + sh скрипт по запуску докера
- server
- grafana - конфиги для тома графаны
- influxdb - конфиги для тома инфлукса
- telegraf - конфиги для тома телеграфа
- docker-compose.yml
- client
-
report.md - Отчет markdown
-
P.S. опираться можно на данную статью