Аннотация

В данном программном документе приведено руководство системного программиста по установке и настройке системы накопления и управления данными сети измерений, предназначенной для сохранения и предоставления данных по приборам на кафедре К3

Общие сведения о системе

Функциональным назначение системы является сохранение и предоставление данных по приборам измерительной сети. Для функционирования системы требуется любая операционная система, имеющая поддержку Docker.

Структура системы

Система состоит из трех основных компонентов: серверная часть, клиентская часть и базы данных. Клиент отправляет запросы серверу приложения, тот, в свою очередь, обращается при необходимости к базе и дает ответ клиенту.

Настройка системы

Настройка системы будет рассматриваться на примере операционной системы Debian.

1. Установка Docker

Обновите пакеты.

apt-get update

Установите необходимые пакеты для работы с HTTPS-соединениями и загрузки файлов.

apt-get install ca-certificates curl

Создайте директорию /etc/apt/keyrings с правами доступа 0755.

install -m 0755 -d /etc/apt/keyrings

Загрузите GPG-ключ Docker из официального репозитория и сохраните его в файле /etc/apt/keyrings/docker.asc.

curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc

Предоставьте права на чтение файла GPG-ключа всем пользователям.

chmod a+r /etc/apt/keyrings/docker.asc

Добавьте запись в файл /etc/apt/sources.list.d/docker.list, которая указывает на репозиторий Docker для Debian. Эта запись содержит информацию об архитектуре системы и пути к GPG-ключу.

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Обновите список доступных пакетов с учетом добавленного репозитория Docker.

apt-get update

Установите Docker.

apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Для того, чтобы убедиться, что все работает корректно, запустите тестовый контейнер.

docker run hello-world

Если необходимо установить Docker на какую-либо другую операционную систему, то посмотрите официальную документацию: https://docs.docker.com/

2. Настройка баз данных

На самом деле все базы данных уже сконфигурированы для начала работы. Необходимо только перейти в папку InfluxDB и удалить в ней содержимое папки db. Тоже самое необходимо проделать для PostgresDB.

3. Развертывание приложения

После успешной установки Docker, можно разворачивать приложение. Для того, чтобы развернуть приложение необходимо перейти в папку проекта. Из самого корня папки проекта необходимо выполнить команду:

docker compose up

После выполнения этой команды Docker скачает все нужные изображения, которые используются в этом приложении и запустить контейнеры.

На этом этапе приложение полностью функционирует и готово к работе.

Проверка системы

Для проверки того, что у нас функционирует все контейнеры и системы готова достаточно выполнить команду docker container ls. Мы должны увидеть три контейнеры: app - наше приложение, influxdb - контейнер базы данных influxdb и postgresdb - контейнер базы данных postgresql.

Конфигурация системы

Приложение развернуто при помощи Docker, поэтому оно имеет файл конфигурации Docker-контейнеров. Этот файл называется docker-compose.yaml. Он находится в корне проекта. За счет него разворачиваются контейнеры с определенными настройками, в определенной последовательности.

services: app: container_name: app image: app build: dockerfile: MeasurementSystem.Server/Dockerfile ports: - '3500:8080' depends_on: - influxdb - postgresdb influxdb: container_name: influxdb image: influxdb:latest ports: - '8086:8086' volumes: - ./InfluxDB/db:/var/lib/influxdb2 - ./InfluxDB/configs:/etc/influxdb2 - ./InfluxDB/backup:/backup environment: - DOCKER_INFLUXDB_DB=influxdb - DOCKER_INFLUXDB_INIT_MODE=setup - DOCKER_INFLUXDB_INIT_USERNAME=*Имя пользователя* - DOCKER_INFLUXDB_INIT_PASSWORD=*Пароль* - DOCKER_INFLUXDB_INIT_ORG=org - DOCKER_INFLUXDB_INIT_BUCKET=init-bucket postgresdb: container_name: postgresdb image: postgres:latest ports: - '5432:5432' volumes: - ./PostgresDB/db:/var/lib/postgresql/data environment: - POSTGRES_DB=postgresdb - POSTGRES_USER=*Имя пользователя* - POSTGRES_PASSWORD=*Пароль*

Самым первым шагом в написании этого файла является определение контейнеров приложения. Это приложение многоконтейнерное, поэтому важно правильно сконфигурировать каждый контейнер и задать правильную последовательность запуска.

Ключевым словом, после которого можно определять контейнеры приложения, является «services». После него идут наши собственные названия контейнеров. В Docker контейнер называется сервисом, поэтому далее так и будем называть это сервисами.

Сервис app

Сервис app использует образ Docker, построенный из Dockerfile, расположенного в директории MeasurementSystem.Server. Он связывает порт 3500 хоста с портом 8080 контейнера, позволяя получить доступ к приложению снаружи контейнера. Сервис зависит от сервисов influxdb и postgresdb, что означает, что он будет запущен только после запуска этих зависимых сервисов.

Сервис influxdb

Сервис influxdb использует образ influxdb:latest, который представляет собой последнюю версию InfluxDB - системы управления временными рядами данных. Он связывает порт 8086 хоста с портом 8086 контейнера, предоставляя доступ к API InfluxDB снаружи контейнера. Сервис использует несколько томов для постоянного хранения данных и конфигурации InfluxDB:

./InfluxDB/db:/var/lib/influxdb2 – монтирует локальную директорию ./InfluxDB/db в качестве хранилища данных InfluxDB внутри контейнера.

./InfluxDB/configs:/etc/influxdb2 – монтирует локальную директорию ./InfluxDB/configs в качестве хранилища конфигурационных файлов InfluxDB внутри контейнера.

./InfluxDB/backup:/backup – монтирует локальную директорию ./InfluxDB/backup в качестве хранилища резервных копий внутри контейнера.

То есть эти папки можно найти локально в приложении.

Сервис также определяет несколько переменных окружения для инициализации InfluxDB при первом запуске:

DOCKER_INFLUXDB_DB – создает базу данных influxdb.

DOCKER_INFLUXDB_INIT_MODE – указывает на режим инициализации.

DOCKER_INFLUXDB_INIT_USERNAME – устанавливает имя пользователя для аутентификации.

DOCKER_INFLUXDB_INIT_PASSWORD – устанавливает пароль для аутентификации.

DOCKER_INFLUXDB_INIT_ORG – создает организацию с именем org.

DOCKER_INFLUXDB_INIT_BUCKET – создает хранилище данных с именем init-bucket.

Сервис postgresdb

Сервис postgresdb использует образ postgres:latest, который представляет собой последнюю версию PostgreSQL - объектно-реляционной системы управления базами данных. Он связывает порт 5432 хоста с портом 5432 контейнера, предоставляя доступ к PostgreSQL снаружи контейнера. Сервис использует том ./PostgresDB/db для постоянного хранения данных PostgreSQL.

Сервис также определяет несколько переменных окружения для инициализации PostgreSQL при первом запуске:

POSTGRES_DB – создает базу данных postgresdb.

POSTGRES_USER – устанавливает имя пользователя для аутентификации.

POSTGRES_PASSWORD – устанавливает пароль для аутентификации.

Полезные команды для настройки и управления системой