Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
doc:2006:mgul.200600.001.3201 [2024/06/29 11:52] rkushnarenko |
doc:2006:mgul.200600.001.3201 [2024/07/01 10:19] (текущий) rkushnarenko |
||
---|---|---|---|
Строка 44: | Строка 44: | ||
Если необходимо установить Docker на какую-либо другую операционную систему, то посмотрите официальную документацию: https://docs.docker.com/ | Если необходимо установить Docker на какую-либо другую операционную систему, то посмотрите официальную документацию: https://docs.docker.com/ | ||
- | ===== 2. Настройка баз данных ===== | + | ===== 2. Развертывание приложения ===== |
- | На самом деле все базы данных уже сконфигурированы для начала работы. Необходимо только перейти в папку InfluxDB и удалить в ней содержимое папки db. Тоже самое необходимо проделать для PostgresDB. | + | |
- | + | ||
- | ===== 3. Развертывание приложения ===== | + | |
После успешной установки Docker, можно разворачивать приложение. Для того, чтобы развернуть приложение необходимо перейти в папку проекта. Из самого корня папки проекта необходимо выполнить команду: | После успешной установки Docker, можно разворачивать приложение. Для того, чтобы развернуть приложение необходимо перейти в папку проекта. Из самого корня папки проекта необходимо выполнить команду: | ||
- | <code>docker compose up</code> | + | <code>docker-compose up</code> |
После выполнения этой команды Docker скачает все нужные изображения, которые используются в этом приложении и запустить контейнеры. | После выполнения этой команды Docker скачает все нужные изображения, которые используются в этом приложении и запустить контейнеры. | ||
Строка 74: | Строка 71: | ||
influxdb: | influxdb: | ||
container_name: influxdb | container_name: influxdb | ||
- | image: influxdb:latest | + | image: influxdb:2 |
ports: | ports: | ||
- '8086:8086' | - '8086:8086' | ||
Строка 134: | Строка 131: | ||
====== Полезные команды для настройки и управления системой ====== | ====== Полезные команды для настройки и управления системой ====== | ||
+ | <code>docker-compose up -d --no-deps --build app</code> | ||
+ | Описание команды: | ||
+ | * ''docker-compose up'' запускает контейнеры, определенные в файле docker-compose.yml, в detached режиме (в фоне). | ||
+ | * ''-d'' указывает, что контейнеры должны запускаться в detached режиме. | ||
+ | * ''--no-deps'' указывает, что не нужно ожидать, пока все зависимости будут запущены. Контейнеры запускаются в порядке, указанном в файле docker-compose.yml. | ||
+ | * ''--build'' указывает, что нужно собрать образы контейнеров заново, если они не существуют или не обновлены. | ||
+ | * ''app'' указывает, что только контейнеры, определенные в секции app в файле docker-compose.yml, должны быть запущены. | ||
+ | |||
+ | В целом, эта команда запускает только контейнер app в файле docker-compose.yml, в detached режиме, не ожидая запуска всех зависимостей, и собирает образы заново, если они не существуют или не обновлены. | ||
+ | |||
+ | Команда может быть полезна тем, что app – это контейнер, который является основным нашим приложением и мы можем легко изменять код, не ломая базы данных. | ||
+ | |||
+ | Пример использования: мы можем переписать какой-нибудь код для интерфейса и выполнив эту команду пересоберется только наше приложение, не перезапуская базы данных. | ||
+ | |||
+ | <code>docker exec -it influxdb</code> | ||
+ | Описание команды: | ||
+ | * ''docker exec'' запускает новый процесс в существующем контейнере. | ||
+ | * ''-it'' указывает, что процесс должен запускаться в интерактивном режиме и должен иметь терминал. | ||
+ | * ''influxdb'' указывает, что процесс должен запускаться в контейнере с именем influxdb. | ||
+ | |||
+ | В целом, эта команда запускает интерактивный терминал в контейнере с именем influxdb, позволяя выполнять команды в этом контейнере. | ||
+ | |||
+ | Эту команду нужно использовать в комбинации с другими, она позволяет только выполнить команду внутри контейнера influxdb, но необходимо еще указать, что именно нужно сделать. | ||
+ | |||
+ | Например, можно добавить к ней ''influx delete --bucket measurements-bucket --start 1970-01-01T00:00:00Z --stop 2024-05-23T00:00:00Z.'' | ||
+ | |||
+ | <code>influx delete --bucket measurements-bucket --start 1970-01-01T00:00:00Z --stop 2024-05-23T00:00:00Z</code> | ||
+ | Описание команды: | ||
+ | * ''influx delete'' указывает, что команда должна выполняться для удаления данных из базы данных InfluxDB. | ||
+ | * ''--bucket measurements-bucket'' указывает, что команда должна выполняться для указанного бакета (bucket) с именем measurements-bucket. | ||
+ | * ''--start 1970-01-01T00:00:00Z'' указывает, что команда должна начать удаление данных с указанной даты и времени (start). | ||
+ | * ''--stop 2024-05-23T00:00:00Z'' указывает, что команда должна остановить удаление данных по указанной дате и времени (stop). | ||
+ | |||
+ | В целом, эта команда удаляет все данные из бакета measurements-bucket InfluxDB, начиная с даты 1 января 1970 года 00:00:00 UTC и заканчивая днём 23 мая 2024 года 00:00:00 UTC. | ||
+ | |||
+ | Бакет для influxdb это, как таблица в реляционной базе данных. В нашем случае у нас используется один единственный бакет, который хранит все данные по приборам – measurements-bucket. | ||
+ | |||
+ | Также можно еще выполнить команду ''docker exec -it influxdb influx''. Она даст подсказку о всех командах для influxdb. | ||
+ | |||
+ | <code>docker exec -it postgresdb psql -U my-user postgresdb</code> | ||
+ | Описание команды: | ||
+ | * ''docker exec'' запускает новый процесс в существующем контейнере. | ||
+ | * ''-it'' указывает, что процесс должен запускаться в интерактивном режиме и должен иметь терминал. | ||
+ | * ''postgresdb'' указывает, что процесс должен запускаться в контейнере с именем postgresdb. | ||
+ | * ''psql'' указывает, что процесс должен запускаться с помощью команды psql, которая является клиентским инструментом для взаимодействия с базой данных PostgreSQL. | ||
+ | * ''-U my-user'' указывает, что пользователь, с которым будет выполняться команда psql, имеет имя my-user. | ||
+ | * ''postgresdb'' указывает, что команда psql должна выполняться для базы данных с именем postgresdb. | ||
+ | |||
+ | Эта команда запускает интерактивный терминал в контейнере postgresdb, позволяя выполнять команды psql для базы данных postgresdb под пользователем my-user. | ||
+ | |||
+ | В случае с Postgres, управление немного другое. Достаточно запустить только эту команду, и мы войдем в терминал базы, изнутри которого уже можно пользоваться SQL-запросами для управления данными. | ||
+ | |||
+ | ====== ПРИЛОЖЕНИЕ 1 ====== | ||
+ | ===== Структура базы данных в InfluxDB ===== | ||
+ | Во входных данных передаются два важных поля: Akey и Serial. На основе этих полей будет формироваться ключ. Они используются для формирования уникального ключа, который будет привязан к остальным полям, переданным в JSON пакете. Это позволяет создавать наборы данных, связанные с этим ключом, и хранить их в базе данных. | ||
+ | |||
+ | Каждый набор данных, или запись, имеет временную метку и поля в формате "ключ-значение". Это позволяет хранить информацию о различных параметрах прибора. | ||
+ | |||
+ | Когда новое устройство вводится в систему, его данные попадают в базу, и для него формируется его модель. | ||
+ | |||
+ | ===== Структура базы данных в PostgreSQL ===== | ||
+ | {{:doc:2006:erd.png|}} | ||
+ | === Рисунок 1. === | ||
+ | |||
+ | В PostgreSQL будут находится 3 таблицы (рис. 1): | ||
+ | * **DeviceInfos** – зарегистрированные приборы | ||
+ | * **Users** – пользователи | ||
+ | * **CalibrationItems** – калибровочные данные | ||
+ | |||
+ | **Таблица DeviceInfos** | ||
+ | |||
+ | Таблица DeviceInfos предназначена для хранения информации о зарегистрированных приборах в системе. Она содержит следующие поля: | ||
+ | * **Id** (первичный ключ) – уникальный идентификатор прибора, который может быть использован для однозначной идентификации записи в таблице. | ||
+ | * **Name** – название прибора, которое может быть полезно для пользователей при работе с системой. | ||
+ | * **Serial** – серийный номер прибора, который может быть использован для отслеживания и идентификации конкретного физического устройства. | ||
+ | * **AuthKey** – ключ аутентификации прибора в системе, который используется для подтверждения подлинности данных, передаваемых прибором. | ||
+ | * **X** и **Y** – координаты расположения прибора, которые могут быть использованы для визуализации данных на карте или для анализа пространственных закономерностей. Location - название места, где расположен прибор, что может быть полезно для организации и управления приборами. | ||
+ | * **IsDeleted** – флаг, указывающий, выведен ли прибор из системы. Это поле может быть использовано для логического удаления записей вместо физического удаления, что позволяет сохранять историю изменений. | ||
+ | |||
+ | **Таблица Users** | ||
+ | |||
+ | Таблица Users предназначена для хранения информации о пользователях системы. Она содержит следующие поля: | ||
+ | * **Id** (первичный ключ) – уникальный идентификатор пользователя, который может быть использован для однозначной идентификации записи в таблице. | ||
+ | * **Username** – имя пользователя, которое используется для входа в систему. | ||
+ | * **Password** – пароль пользователя, который используется для аутентификации при входе в систему. | ||
+ | |||
+ | **Таблица CalibrationItems** | ||
+ | Таблица CalibrationItems предназначена для хранения калибровочных данных, связанных с приборами. Она содержит следующие поля: | ||
+ | * **Id** (первичный ключ) – уникальный идентификатор калибровочной записи, который может быть использован для однозначной идентификации записи в таблице. | ||
+ | * **AuthKey** – ключ аутентификации прибора, связанного с калибровочной записью. Это поле используется для связи калибровочных данных с конкретным прибором. | ||
+ | * **Sensor** – название датчика, для которого применяются калибровочные коэффициенты. Это поле может быть полезно в случае, если прибор имеет несколько датчиков, требующих отдельной калибровки. | ||
+ | * **CreationDate** – время создания калибровочной записи, которое может быть использовано для отслеживания истории калибровок и выявления возможных изменений. | ||
+ | * **Coefficients** – массив коэффициентов, используемых для калибровки датчика. Это поле может содержать один или несколько коэффициентов, в зависимости от сложности калибровки. |