Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
146 changes: 146 additions & 0 deletions iot_docker_project/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
# IoT Sensor Monitoring System with Docker, MQTT, InfluxDB, and Grafana

## 1. Описание Задания

Данный проект представляет собой реализацию системы мониторинга IoT-датчиков с использованием Docker и Docker Compose. Система развернута на трех виртуальных машинах Ubuntu Server 20.04:

1. **Linux A (Клиент):** Запускает Docker-контейнеры, симулирующие работу различных сенсоров (температура, давление, влажность, напряжение). Симуляторы отправляют сгенерированные данные по протоколу MQTT.
2. **Linux B (Шлюз):** Запускает MQTT-брокер (Mosquitto) в Docker-контейнере для приема сообщений от сенсоров и передачи их подписчикам. Настроен файрвол для доступа к брокеру.
3. **Linux C (Сервер):** Запускает стек мониторинга с помощью Docker Compose:
* **InfluxDB:** База данных временных рядов для хранения показаний сенсоров.
* **Telegraf:** Агент для сбора метрик, подписанный на топики MQTT-брокера и записывающий данные в InfluxDB.
* **Grafana:** Платформа для визуализации данных из InfluxDB и создания дашбордов. Настроено автоматическое развертывание (provisioning) источника данных и дашборда.

## 2. Используемые Технологии

* VirtualBox (или аналогичный гипервизор)
* Ubuntu Server 20.04 LTS
* Docker
* Docker Compose
* Python 3.9+
* paho-mqtt (библиотека для MQTT)
* Mosquitto (MQTT брокер)
* InfluxDB 1.8 (База данных временных рядов)
* Telegraf 1.29 (Сборщик метрик)
* Grafana (Платформа визуализации)
* Git / GitHub (или аналогичный сервис)

## 3. Предварительные Требования

1. **Виртуальные Машины:** Наличие трех настроенных ВМ Ubuntu Server 20.04 (назовем их A, B, C) с сетевой конфигурацией из предыдущей практики:
* Общая сеть (например, "Сетевой мост") для доступа в интернет и к хосту (интерфейс `enp0s3` на всех ВМ).
* Внутренняя сеть `servernet` между A и B (например, `enp0s8` на A: `192.168.20.10/24`, `enp0s8` на B: `192.168.20.1/24`).
* Внутренняя сеть `clientnet` между B и C (например, `enp0s9` на B: `192.168.2.1/24`, `enp0s8` на C: `192.168.2.100/24` или `.10/24`).
* **Важно:** Убедитесь, что IP-адреса соответствуют тем, что используются в конфигурационных файлах (`telegraf.conf`, `docker-compose.yml` сенсоров).
2. **SSH Доступ:** Возможность подключения к каждой ВМ по SSH.
3. **Интернет:** Наличие доступа в интернет на каждой ВМ для скачивания пакетов и Docker-образов.
4. **Git:** Установленный Git на вашем локальном компьютере.
5. **Docker Hub Аккаунт:** Зарегистрированный аккаунт на Docker Hub (вам нужно будет заменить плейсхолдер `<your_dockerhub_login>` на ваш реальный логин).
6. **MQTT Explorer (Опционально):** Установленный MQTT-клиент (например, MQTT Explorer) на вашем хост-компьютере для отладки.


## 5. Инструкция по Запуску

**0. Начальная Настройка (Локальный компьютер и ВСЕ ВМ):**

* **Клонируйте репозиторий:**
```bash
git clone <URL_вашего_репозитория>
cd iot_docker_project
```
* **Переключитесь на ветку `develop`:**
```bash
git checkout develop
```
* **(На КАЖДОЙ ВМ: A, B, C)** **Установите Docker и Docker Compose:** .
* **(На КАЖДОЙ ВМ: A, B, C)** **Добавьте пользователя в группу `docker`:**
```bash
sudo usermod -aG docker $USER
```
**!!! ВЫЙДИТЕ из SSH-сессии и ЗАЙДИТЕ СНОВА, чтобы изменения применились !!!**

**1. Настройка Linux B (Gateway - MQTT Broker):**

* Подключитесь к ВМ B по SSH.
* Скопируйте конфиг Mosquitto из репозитория (или создайте вручную):
```bash
mkdir ~/mosquitto
# Скопируйте vms/gateway/mosquitto/mosquitto.conf в ~/mosquitto/mosquitto.conf
# Пример с scp с локальной машины:
# scp vms/gateway/mosquitto/mosquitto.conf <user_B>@<IP_B_enp0s3>:~/mosquitto/
```
* Запустите контейнер Mosquitto:
```bash
cd ~
docker run -d \
-p 1883:1883 \
-v $PWD/mosquitto:/mosquitto/config \
--name broker \
--restart unless-stopped \
eclipse-mosquitto:latest
```
* Откройте порт в файрволе:
```bash
sudo iptables -A INPUT -p tcp --dport 1883 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables/rules.v4
```
* Проверьте запуск: `docker ps` (должен быть контейнер `broker`).

**2. Настройка Linux C (Server - Мониторинг Стек):**

* Подключитесь к ВМ C по SSH.
* Скопируйте всю папку `vms/server/` из репозитория на ВМ C в домашнюю директорию (`~/`), чтобы получилась структура `~/telegraf_config`, `~/grafana_config`, `~/docker-compose.yml`.
```bash
# Пример с scp с локальной машины (скопировать всю папку server):
# scp -r vms/server/ <user_C>@<IP_C_enp0s3>:~/
# Переименуйте скопированную папку 'server' в 'iot_stack' (если нужно):
# mv ~/server ~/iot_stack
```
* **Важно:** Убедитесь, что в файле `~/iot_stack/telegraf_config/telegraf.conf` в секции `[[inputs.mqtt_consumer]]` указан правильный IP машины B (`servers = ["tcp://192.168.20.1:1883"]`).
* Запустите стек мониторинга:
```bash
cd ~/iot_stack
docker compose up -d
```
* Подождите немного и настройте базу InfluxDB:
```bash
sleep 5
docker exec -it influxdb influx
# Внутри CLI:
CREATE DATABASE sensors;
CREATE USER telegraf WITH PASSWORD 'telegraf' WITH ALL PRIVILEGES;
exit
```
* Проверьте запуск: `docker compose ps` (должны быть `influxdb`, `telegraf`, `grafana`).

**3. Настройка Linux A (Client - Сенсоры):**

* Подключитесь к ВМ A по SSH.
* Скопируйте всю папку `vms/client/simulator/` из репозитория на ВМ A в домашнюю директорию (`~/`).
```bash
# Пример с scp с локальной машины:
# scp -r vms/client/simulator/ <user_A>@<IP_A_enp0s3>:~/
```
* **!!! ВАЖНО: Отредактируйте файл `~/simulator/docker-compose.yml` !!!**
* Найдите все строки `image: <your_dockerhub_login>/sensor-simulator:latest` и замените `<your_dockerhub_login>` на **ВАШ** реальный логин в Docker Hub.
* Убедитесь, что во всех сервисах в `environment` указано `MQTT_BROKER_HOST=192.168.20.1`.
* Запустите симуляторы сенсоров:
```bash
cd ~/simulator
docker compose up -d
```
* Проверьте запуск: `docker compose ps` (должны быть запущены все контейнеры сенсоров).

## 5. Верификация

1. Откройте веб-браузер на вашем хост-компьютере.
2. Перейдите по адресу Grafana: `http://<IP_АДРЕС_МАШИНЫ_C_enp0s3>:3000` (например, `http://192.168.31.110:3000`).
3. Войдите с учетными данными `admin` / `admin` (Grafana может попросить сменить пароль).
4. Перейдите в раздел Dashboards (значок с четырьмя квадратами слева).
5. Откройте дашборд "Sensor Dashboard" (он должен был загрузиться автоматически).
6. Убедитесь, что на панелях отображаются данные от различных сенсоров и они обновляются.

## 6. Структура Веток Git

* **`master`:** Содержит только файл `README.md` с описанием задания.
* **`develop`:** Основная ветка разработки, содержит все файлы решения (конфигурации, скрипты, Dockerfile, compose-файлы, отчет `report.md`, данный `README.md`, скриншоты).
Binary file added iot_docker_project/assets/images/A_sensor_log.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added iot_docker_project/assets/images/A_sensors_ps.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added iot_docker_project/assets/images/MQTT.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading