Тема оформления
Развёртывание в Docker Compose
1. Аппаратные и системные требования
Для обеспечения стабильного функционирования всех 14 микросервисов, брокера сообщений, реляционных баз данных и периметрального прокси сервер развёртывания должен соответствовать следующим техническим характеристикам:
| Параметр хоста | Минимальные системные требования | Рекомендуемые требования для Production |
|---|---|---|
| Процессор (CPU) | 2 ядра (x86_64, 2.4 GHz) | 4–8 ядер (Intel Xeon / AMD EPYC) |
| Оперативная память (RAM) | 4 ГБ ОЗУ + 4 ГБ Swap | 8–16 ГБ ECC DDR4/DDR5 |
| Дисковый накопитель | 20 ГБ свободного пространства (SSD) | 50–100 ГБ NVMe SSD (RAID-1) |
| Сетевой интерфейс | 100 Мбит/с (выделенный статический IP) | 1 Гбит/с (Full Duplex) |
| Операционная система | Ubuntu 22.04 / 24.04 LTS | Ubuntu 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-nginx | nginx:alpine | :80, :443 | SSL-терминация, обратный прокси для платформы, документации и 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-db | postgres:15-alpine | :5432 | Реляционная СУБД (4 независимые базы) |
heatbalance-redis | redis:7-alpine | :6379 | Распределённый кэш ключ-значение |
heatbalance-rabbitmq | rabbitmq: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-stream5. Процедуры остановки, обновления и перезапуска
- Перезапуск отдельного микросервиса (без остановки системы):bash
docker compose restart iot - Плавное обновление после изменения исходного кода:bashDocker Compose выполнит пересборку только тех контейнеров, исходный код которых изменился, обеспечивая нулевой простой смежных компонентов.
git pull origin main docker compose up --build -d - Полная остановка платформы:bashВнимание: данные PostgreSQL сохраняются в именованном томе
docker compose downpgdataи не удаляются при командеdown.