Skip to content

Развёртывание в Docker Compose ​

1. Аппаратные и системные требования ​

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

Параметр хостаМинимальные системные требованияРекомендуемые требования для Production
Процессор (CPU)2 ядра (x86_64, 2.4 GHz)4–8 ядер (Intel Xeon / AMD EPYC)
Оперативная память (RAM)4 ГБ ОЗУ + 4 ГБ Swap8–16 ГБ ECC DDR4/DDR5
Дисковый накопитель20 ГБ свободного пространства (SSD)50–100 ГБ NVMe SSD (RAID-1)
Сетевой интерфейс100 Мбит/с (выделенный статический IP)1 Гбит/с (Full Duplex)
Операционная системаUbuntu 22.04 / 24.04 LTSUbuntu Server 24.04 LTS / Debian 12
Среда контейнеризацииDocker Engine 26.0+Docker Engine 27.x + Docker Compose v2.29+

2. Архитектура контейнеров Docker Compose ​

Все компоненты распределённой платформы объединены в декларативном файле docker-compose.yml и изолированы во внутренней виртуальной подсети Docker.

Сводная таблица контейнеров: ​

Имя контейнераБазовый образВнутренний портНазначение
heatbalance-nginxnginx:alpine:80, :443SSL-терминация, обратный прокси для платформы, документации и CI/CD
heatbalance-frontendСобранный образ Nginx:80Хостинг статического бандла веб-приложения React (heatbalance.ru)
heatbalance-docsСобранный образ Nginx:80Хостинг портала технической документации VitePress (heatbalance.online)
heatbalance-gateway.NET 10 SDK / Alpine:8080Шлюз YARP, агрегация эндпоинтов
heatbalance-auth.NET 10 SDK / Alpine:8080Аутентификация, OpenIddict, клеймы
heatbalance-dataset.NET 10 SDK / Alpine:8080Управление технологическими наборами параметров
heatbalance-run.NET 10 SDK / Alpine:8080Хранение истории и результатов вычислений
heatbalance-report.NET 10 SDK / Alpine:8080Генерация печатных протоколов в формате PDF
heatbalance-chamber.NET 10 SDK / Alpine:8080Расчёт теплового баланса камерной печи
heatbalance-conveyor.NET 10 SDK / Alpine:8080Расчёт теплового баланса конвейерной печи
heatbalance-electric.NET 10 SDK / Alpine:8080Расчёт теплового баланса электрической печи
heatbalance-drum.NET 10 SDK / Alpine:8080Расчёт теплового баланса сушильного барабана
heatbalance-iot.NET 10 SDK / Alpine:8080Приём телеметрии, слияние и запуск групп
heatbalance-analytics.NET 10 SDK / Alpine:8080Предиктивная аналитика, детекция аномалий
heatbalance-dbpostgres:15-alpine:5432Реляционная СУБД (4 независимые базы)
heatbalance-redisredis:7-alpine:6379Распределённый кэш ключ-значение
heatbalance-rabbitmqrabbitmq:3-management:5672, :15672Брокер сообщений AMQP с панелью веб-мониторинга

3. Пошаговый регламент развёртывания стека ​

Шаг 1. Подготовка сервера Linux ​

Обновите пакетный менеджер и установите Docker Engine:

bash
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git ufw ca-certificates gnupg

# Установка официального репозитория Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

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

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Шаг 2. Клонирование репозитория проекта ​

bash
cd /opt
git clone https://github.com/ruzzel666/UrFU-HeatBalance-Microservices.git
cd UrFU-HeatBalance-Microservices

Шаг 3. Конфигурация переменных окружения (.env) ​

Скопируйте шаблон окружения и задайте надежные секреты:

bash
cp .env.example .env
nano .env  # или используйте другой текстовый редактор

Пример ключевых переменных в файле .env:

bash
# База данных PostgreSQL (обязательно задать уникальный надежный пароль)
POSTGRES_USER=postgres
POSTGRES_PASSWORD=your_secure_db_password_here

# Начальный пароль системного администратора
ADMIN_SEED_EMAIL=admin@example.com
ADMIN_SEED_PASSWORD=Your_Strong_Admin_Password_123!

# Секрет межсервисной аутентификации Machine-to-Machine
RUN_SERVICE_SECRET=your_secure_m2m_token_here

# Настройки SMTP-почты для отправки 2FA и уведомлений
SMTP_HOST=smtp.mail.ru
SMTP_PORT=465
SMTP_USERNAME=your_email@mail.ru
SMTP_PASSWORD=your_smtp_app_password
SMTP_SENDER_EMAIL=your_email@mail.ru
SMTP_ENABLE_SSL=true

# Пути к конфигурациям Nginx на хосте
NGINX_CONF_PATH=./nginx/nginx.conf
NGINX_SSL_PATH=./nginx/ssl

Шаг 4. Сборка и запуск контейнеров ​

Запустите фоновую компиляцию всех микросервисов и инициализацию контейнеров:

bash
docker compose up --build -d

Сборка выполняет параллельное восстановление NuGet-зависимостей, компиляцию проектов C# в режиме Release, сборку фронтенда на Node.js и развёртывание баз данных. Время первой сборки составляет от 3 до 5 минут.


4. Проверка состояния и диагностика ​

Проверка статусов контейнеров: ​

bash
docker compose ps

Все 16 контейнеров должны находиться в состоянии Up или Up (healthy).

Просмотр журналов работы микросервисов: ​

bash
# Просмотр логов шлюза в реальном времени
docker compose logs -f gateway

# Просмотр логов сервиса телеметрии IoT
docker compose logs -f iot

# Просмотр логов брокера сообщений RabbitMQ
docker compose logs -f rabbitmq

Диагностика утилизации памяти и процессора: ​

bash
docker stats --no-stream

5. Процедуры остановки, обновления и перезапуска ​

  • Перезапуск отдельного микросервиса (без остановки системы):
    bash
    docker compose restart iot
  • Плавное обновление после изменения исходного кода:
    bash
    git pull origin main
    docker compose up --build -d
    Docker Compose выполнит пересборку только тех контейнеров, исходный код которых изменился, обеспечивая нулевой простой смежных компонентов.
  • Полная остановка платформы:
    bash
    docker compose down
    Внимание: данные PostgreSQL сохраняются в именованном томе pgdata и не удаляются при команде down.

Разработано в рамках проекта моделирования тепловых балансов и промышленного мониторинга