Инструкция по установке экземпляра программного обеспечения «Индивидуальная образовательная траектория для образовательной платформы»
1 Общие сведения
1.1 Наименование программного обеспечения
Полное наименование программного обеспечения — «Индивидуальная образовательная траектория для образовательной платформы» (далее — Программа). Сокращённое наименование, применяемое в технической документации, — U1 ИОТ. Альтернативные наименования отсутствуют. Правообладателем программного обеспечения является Общество с ограниченной ответственностью «УМ Первый» (ОГРН 1231600043454, ИНН 1655497466).
1.2 Назначение программного обеспечения
Программа предназначена для персонализации образовательного пути клиента на образовательной платформе: формирования индивидуального учебного маршрута по цели обучения и уровню подготовки клиента, выдачи учебного материала по событиям расписания занятий и предоставления пользователям платформы средств корректировки маршрута. Целями разработки Программы являются: удовлетворение индивидуальных потребностей обучающихся в интеллектуальном, нравственном и художественно-эстетическом развитии; выявление, развитие и поддержка обучающихся, проявивших выдающиеся способности; удовлетворение иных образовательных потребностей и интересов обучающихся, не противоречащих законодательству Российской Федерации, осуществляемое за пределами федеральных государственных образовательных стандартов и федеральных государственных требований; повышение качества освоения образовательных программ (полностью либо частично) с применением дистанционных образовательных технологий с учётом баланса времени труда и отдыха обучающихся; повышение уровня контроля за своевременностью и полнотой освоения образовательных программ обучающимися.
1.3 Состав программного обеспечения
В состав Программы входят следующие программные компоненты:
– iot-service — серверный компонент (микросервис), реализующий бизнес-логику формирования и ведения образовательных траекторий, обработку входящих событий расписания, публикацию исходящих доменных событий и программные интерфейсы;
– модули ИОТ веб-приложения platform-one — клиентский компонент, реализующий пользовательские интерфейсы репетитора и методиста. Программа реализована как самостоятельный микросервис с собственным хранилищем данных, что позволяет выполнять её развёртывание, масштабирование и обновление независимо от интегрируемых образовательных платформ.
1.4 Назначение и границы настоящего документа
Настоящий документ содержит описание процесса установки экземпляра Программы: подготовки окружения, установки и настройки серверного и клиентского компонентов, проверки установки, дополнительной настройки, обновления и устранения неполадок. Документ предназначен для системных администраторов и инженеров сопровождения, выполняющих развёртывание Программы в контуре заказчика. Порядок эксплуатации Программы пользователями приведён в руководстве пользователя, описание архитектуры и функциональных характеристик — в соответствующих документах комплекта эксплуатационной документации.
1.5 Термины, определения и сокращения
Программа
Программное обеспечение «Индивидуальная образовательная траектория для образовательной платформы»
ИОТ
Индивидуальная образовательная траектория — сквозная последовательность тем, сформированная под цель и уровень подготовки клиента
ТВЛ
Теоретическая видеолекция — единица образовательного контента платформы
Серверный компонент
Микросервис iot-service, реализующий бизнес-логику Программы
Клиентский компонент
Модули ИОТ веб-приложения platform-one
Контур эксплуатации
Совокупность вычислительных ресурсов и параметров развёртывания, соответствующая назначению среды: разработка, предварительное тестирование, продуктивная эксплуатация
Миграция
Сценарий изменения структуры базы данных, применяемый при установке и обновлении Программы
Контейнерный образ
Комплект файлов Программы и среды её выполнения, предназначенный для запуска средствами контейнеризации
Реестр образов
Хранилище контейнерных образов, обеспечивающее их версионирование и передачу в контур эксплуатации
Outbox
Таблица исходящих событий, обеспечивающая гарантированную публикацию доменных событий во внешние системы
DLQ
Dead Letter Queue — хранилище необрабатываемых входящих сообщений
2 Системные требования
2.1 Требования к серверной части
Минимальные требования к вычислительным ресурсам для развёртывания серверного компонента в контуре разработки и тестирования приведены в таблице 2. Для продуктивного контура объём ресурсов определяется исходя из фактической нагрузки и количества запускаемых экземпляров процессов.
Центральный процессор
не менее 2 вычислительных ядер
Оперативная память
не менее 4 ГБ
Дисковое пространство
не менее 40 ГБ (тип носителя — SSD)
Канал связи
не менее 100 Мбит/с
Операционная система
Linux (Ubuntu 20.04 и выше, Debian и совместимые дистрибутивы)
2.2 Требования к клиентской части
Установка программного обеспечения на рабочее место пользователя не требуется. Требования к рабочему месту приведены в таблице 3.
Центральный процессор
не менее 2 вычислительных ядер
Оперативная память
не менее 4 ГБ
Дисковое пространство
не менее 20 ГБ
Канал связи
не менее 5 Мбит/с
2.3 Обеспечивающее программное обеспечение
Для установки и работы Программы необходимо следующее обеспечивающее программное обеспечение:
- Python версии 3.13 и выше;
- менеджер пакетов uv;
- PostgreSQL версии 13 и выше;
- PgBouncer — пул соединений с базой данных (для продуктивного контура);
- Redis или Valkey версии 6 и выше;
- доступ к кластеру брокера сообщений Apache Kafka с поддержкой защищённого соединения;
- Node.js версии LTS — для сборки клиентского компонента;
- Docker и средства оркестрации контейнеров — при контейнерном развёртывании;
- обратный прокси-сервер (Nginx или контроллер входящего трафика кластера) — для терминирования TLS и публикации клиентского компонента.
3 Описание установочного пакета
3.1 Состав установочного пакета
Установочный пакет Программы включает:
- исходный код серверного компонента с файлами описания зависимостей и миграциями базы данных;
- исходный код модулей клиентского компонента в составе веб-приложения платформы;
- файл описания контейнерного образа и файл описания состава служб для локального развёртывания;
- образец файла переменных окружения и документацию по их назначению;
- эксплуатационную документацию.
3.2 Основные компоненты
Перечень компонентов, разворачиваемых при установке, приведён в таблице 4.
Процесс программного интерфейса
Обработка запросов клиентского компонента и служебных запросов внешних систем
Процесс обработчика событий
Потребление событий расписания занятий из брокера сообщений
Процесс фонового обработчика задач
Публикация исходящих доменных событий из таблиц outbox
Процесс планировщика
Постановка периодических задач в очередь
PostgreSQL
Основная база данных Программы
Valkey (Redis)
Брокер очереди фоновых задач и хранилище расписания
PgBouncer
Пул соединений с базой данных в транзакционном режиме
Модули клиентского компонента
Веб-интерфейсы репетитора и методиста
Обратный прокси-сервер
Терминирование TLS, маршрутизация запросов
4 Установка серверного компонента
4.1 Подготовка окружения
Установить общесистемное программное обеспечение и менеджер пакетов uv:
sudo apt update
sudo apt install -y python3.13 python3.13-venv git curl
sudo apt install -y postgresql postgresql-contrib
sudo apt install -y redis-server
curl -Lssf https://astral.sh/uv/install.sh | sh
Вместо локальной установки СУБД и хранилища задач допускается использование управляемых сервисов контура заказчика.
Результат: в системе установлены интерпретатор Python, менеджер пакетов uv, СУБД и хранилище задач.
4.2 Получение исходного кода и установка зависимостей
git clone <адрес репозитория iot-service>
cd iot-service
uv sync
Установка зависимостей выполняется в соответствии с зафиксированным файлом блокировки версий, что обеспечивает воспроизводимость состава окружения.
Результат: в каталоге проекта создано виртуальное окружение с установленными зависимостями.
4.3 Создание базы данных
Создать пользователя и базу данных Программы:
sudo -u postgres psql
CREATE USER iot_user WITH PASSWORD '<пароль>';
CREATE DATABASE iot_service OWNER iot_user;
GRANT ALL PRIVILEGES ON DATABASE iot_service TO iot_user;
Результат: создана база данных Программы и учётная запись для подключения к ней.
4.4 Настройка переменных окружения
Создать файл переменных окружения на основе поставляемого образца и заполнить значения параметров:
cp docs/env.example .env
Все переменные Программы имеют префикс IOT_. Обязательному заполнению подлежат группы параметров, приведённые в таблице 5; полный перечень переменных приведён в приложении А. Корневой путь приложения определяется контуром эксплуатации: во всех контурах, кроме локального, используется значение /iot-service.
Параметры приложения
Адрес и порт прослушивания, контур эксплуатации, уровень и формат журналирования
Параметры базы данных
Адрес, порт, имя базы, учётные данные, параметры пула соединений
Параметры хранилища задач
Адрес, порт, номер базы и пароль Valkey (Redis)
Параметры аутентификации
Ключ подписи маркеров доступа и алгоритм подписи
Параметры служебного интерфейса
Статические маркеры доступа для внешних систем платформы
Параметры внешних систем
Адреса и ключи доступа контентной части платформы и сервиса расписания, таймауты и число повторных попыток
Параметры брокера сообщений
Адреса брокеров, параметры защищённого соединения, идентификатор группы, наименования топиков
Параметры наблюдаемости
Параметры передачи сведений об ошибках и доли выборки событий
Ключ подписи маркеров доступа должен совпадать со значением, используемым системой аутентификации образовательной платформы. При запуске в предпродуктивном и продуктивном контурах приложение проверяет, что значения маркеров доступа служебного интерфейса и параметров брокера сообщений отличаются от значений по умолчанию, и прекращает запуск при обнаружении несоответствия.
Результат: сформирован файл конфигурации, соответствующий параметрам контура эксплуатации.
4.5 Применение миграций
uv run alembic upgrade head
Изменение структуры базы данных выполняется исключительно средствами системы миграций. Прямое изменение схемы не допускается.
Результат: в базе данных созданы таблицы Программы и перечислимые типы; версия схемы соответствует установленной версии Программы.
4.6 Запуск процессов приложения
Процессы Программы используют общий образ приложения; режим работы определяется командой запуска. Запуск процесса программного интерфейса в контуре разработки:
uv run uvicorn src.presentation.api.main:build_app --factory --reload
Запуск процесса программного интерфейса в продуктивном контуре:
uv run uvicorn src.presentation.api.main:build_app --factory \
--host 0.0.0.0 --port 8000
Запуск фонового обработчика задач и планировщика:
python main.py worker
python main.py scheduler
Запуск обработчика событий расписания:
python kafka_consumer.py
Все процессы используют общий файл конфигурации и должны запускаться с одинаковыми значениями переменных окружения. Для каждого процесса следует настроить автоматический запуск при старте операционной системы — средствами системы инициализации либо средствами оркестратора контейнеров.
Результат: запущены процессы программного интерфейса, обработчика событий, фонового обработчика задач и планировщика.
4.7 Установка в контейнерной среде
Для контейнерного развёртывания предусмотрен файл описания образа. Сборка образа:
docker build -t iot-service:<версия> .
Процесс в контейнере выполняется от имени непривилегированного пользователя. Один и тот же образ используется для всех процессов Программы; режим работы задаётся командой запуска контейнера. Для локального развёртывания полного состава служб предусмотрен файл описания состава служб:
docker compose up -d
При развёртывании в кластере оркестрации контейнеров процессы разворачиваются отдельными группами с независимым масштабированием, а параметры конфигурации передаются из значений развёртывания контура.
5 Установка клиентского компонента
5.1 Настройка адресов программных интерфейсов
Модули ИОТ входят в состав веб-приложения платформы. Перед сборкой необходимо задать переменные окружения сборки, определяющие адрес программного интерфейса Программы и путь проксирования запросов в контуре разработки. Значения задаются в файле переменных окружения приложения.
Результат: клиентский компонент настроен на обращение к установленному экземпляру серверного компонента.
5.2 Сборка и публикация приложения
- Получить исходный код веб-приложения платформы и установить зависимости средствами менеджера пакетов Node.js.
- Выполнить сборку приложения в режиме продуктивной сборки.
- Разместить полученный набор статических файлов на обратном прокси-сервере контура.
- Настроить маршрутизацию запросов к программному интерфейсу Программы на обратном прокси-сервере.
Результат: веб-приложение опубликовано, разделы ИОТ доступны пользователям с соответствующими ролями.
Отображение разделов ИОТ управляется признаком функциональной готовности на стороне платформы; порядок его включения определяется администратором платформы.
6 Проверка установки
6.1 Проверка серверного компонента
Выполнить последовательно следующие проверки:
- Запросить состояние сервиса по служебному адресу /health/ — возвращаются признак работоспособности, наименование и версия сервиса.
- Запросить готовность сервиса по адресу /health/ready — дополнительно проверяется подключение к базе данных.
- Запросить жизнеспособность процесса по адресу /health/live.
- Запросить состояние базы данных по адресу /health/db.
- Открыть интерактивную документацию программного интерфейса по адресам /docs и /redoc и убедиться в её доступности (доступ защищён базовой аутентификацией).
- Запросить метрики приложения по адресу /metrics и убедиться в их формировании.
Результат: все проверки возвращают положительный результат, программный интерфейс доступен.
Служебные адреса /private/healthcheck и /private/readiness используются средствами контроля контура эксплуатации.
6.2 Проверка интеграций
- Убедиться в наличии подключения к брокеру сообщений по защищённому каналу и в отсутствии нарастающего отставания группы потребителей.
- Направить тестовое событие расписания и убедиться, что оно обработано, а сведения о маршруте изменены.
- Убедиться в формировании записей в таблицах исходящих событий, в их публикации фоновым обработчиком задач и в открытии темы с ТВЛ на стороне контентной части платформы по опубликованному событию.
- Проверить доступность контентной части платформы и сервиса расписания с использованием заданных ключей доступа; синхронные запросы применяются для получения справочных сведений и отзыва доступа к исключённой подарочной ТВЛ.
- Убедиться в отсутствии записей в хранилище необрабатываемых сообщений либо проанализировать причины их появления.
Результат: обмен данными с внешними системами платформы выполняется штатно.
6.3 Проверка клиентского компонента
- Выполнить вход в личный кабинет под учётной записью с ролью «репетитор» и открыть учебный маршрут клиента.
- Убедиться в отображении перечня тем, показателей выдачи и просмотра, заметки целеполагания.
- Выполнить вход под учётной записью с ролью «методист» и открыть раздел шаблонных траекторий.
Результат: интерфейсы Программы доступны, данные отображаются корректно.
7 Дополнительные настройки
7.1 Настройка защищённого соединения
На внешнем периметре платформы обязательна настройка протокола TLS на обратном прокси-сервере или контроллере входящего трафика. Сертификаты выпускаются и обновляются средствами контура заказчика. Дополнительно следует задать перечень разрешённых источников кросс-доменных запросов, ограничив его адресами веб-приложения платформы.
7.2 Настройка мониторинга и журналирования
Для продуктивного контура рекомендуется:
- установить машиночитаемый формат записей журнала и уровень детализации не ниже информационного;
- настроить сбор метрик приложения средствами системы сбора метрик и их визуализацию;
- задать параметры передачи сведений об ошибках в систему регистрации ошибок с указанием контура эксплуатации;
- настроить контроль отставания обработчика событий и объёма неотправленных исходящих событий;
- настроить проверки работоспособности и готовности на основании служебных адресов, приведённых в подразделе 6.1.
7.3 Настройка резервного копирования
Резервное копирование базы данных Программы выполняется средствами контура эксплуатации. Рекомендуемая периодичность полного копирования — ежедневно. Файлы конфигурации развёртывания хранятся в системе контроля версий. Восстановление выполняется в следующем порядке: развёртывание экземпляра базы данных из резервной копии, применение миграций до версии, соответствующей устанавливаемой версии Программы, запуск процессов приложения и выполнение проверок, приведённых в разделе 6.
7.4 Поэтапное включение функциональности
Обработка событий расписания включается поэтапно по парам «предмет — класс». По умолчанию обработка выключена для всех реальных пар: события принимаются, но бизнес-логика не выполняется. Это позволяет вводить Программу в эксплуатацию ограниченными группами клиентов. Для включения обработки следует указать перечень пар в соответствующей переменной окружения и перезапустить процесс обработчика событий.
8 Обновление программного обеспечения
Порядок обновления серверного компонента:
- Создать резервную копию базы данных.
- Получить новую версию исходного кода либо контейнерного образа.
- Обновить состав зависимостей командой uv sync (при установке из исходного кода).
- Применить миграции базы данных командой uv run alembic upgrade head.
- Перезапустить процессы программного интерфейса, обработчика событий, фонового обработчика задач и планировщика.
- Выполнить проверки, приведённые в разделе 6 настоящего документа.
Результат: установлена новая версия Программы, работоспособность подтверждена проверками.
Обновление клиентского компонента выполняется средствами процесса непрерывной интеграции и доставки веб-приложения платформы. Откат версии выполняется переключением на предыдущий контейнерный образ с учётом совместимости схемы данных. При наличии несовместимых изменений схемы откат выполняется с восстановлением базы данных из резервной копии.
9 Устранение неполадок
Перечень типовых неполадок, их причин и способов устранения приведён в таблице 6.
Приложение не запускается, в журнале — сообщение о стандартном значении переменной
В предпродуктивном или продуктивном контуре не заданы маркеры доступа служебного интерфейса либо параметры брокера сообщений
Задать значения соответствующих переменных окружения и повторить запуск
Ошибка подключения к базе данных
Неверные параметры подключения либо недоступность СУБД
Проверить группу параметров базы данных и доступность сервера СУБД
Темы клиентам не открываются
Не поступают события расписания, не включена обработка для пары «предмет — класс», ошибки обработки либо исходящие события Программы не публикуются
Проверить подключение к брокеру, перечень включённых пар, записи в хранилище необрабатываемых сообщений и состояние публикации исходящих событий
Веб-интерфейс не получает данные
Неверный адрес программного интерфейса, ограничения кросс-доменных запросов либо несовпадение ключа подписи маркеров доступа
Проверить настройки адресов и проксирования, перечень разрешённых источников и ключ подписи
Ошибки при обращении к внешним системам
Неверные адреса или ключи доступа, превышение времени ожидания
Проверить параметры внешних систем, значения таймаута и числа повторных попыток
Ошибка применения миграций
Несоответствие версии схемы базы данных версии Программы
Проверить текущую версию схемы, при необходимости восстановить базу данных из резервной копии и повторить обновление
При анализе неполадок следует использовать записи журнала приложения, содержащие идентификатор запроса, а также сведения системы регистрации ошибок и системы сбора метрик.
10 Контакты и техническая поддержка
При возникновении вопросов, связанных с установкой и настройкой Программы, следует обратиться в службу технической поддержки по адресу электронной почты support@umschool.one.
В обращении необходимо указать:
- наименование и версию устанавливаемой Программы;
- контур эксплуатации и параметры окружения (без указания значений секретов);
- этап установки, на котором возникла неполадка;
- текст сообщения об ошибке и соответствующие записи журнала приложения;
- сведения о выполненных действиях по устранению неполадки.
Приложение А. Перечень переменных окружения
Перечень основных переменных окружения серверного компонента приведён в таблице А.1. Полный перечень с описанием допустимых значений приведён в документации, входящей в состав установочного пакета.
IOT_APP_HOST, IOT_APP_PORT, IOT_APP_WORKERS
Адрес и порт прослушивания программного интерфейса, количество рабочих процессов
IOT_ENVIRONMENT
Контур эксплуатации; влияет на проверки параметров при запуске
IOT_LOG_LEVEL, IOT_LOG_IS_JSON_FORMAT
Уровень детализации и формат записей журнала
IOT_DB_HOST, IOT_DB_PORT, IOT_DB_NAME, IOT_DB_USER, IOT_DB_PASSWORD
Параметры подключения к базе данных
IOT_DB_POOL_SIZE, IOT_DB_MAX_OVERFLOW, IOT_DB_CONNECTION_TIMEOUT
Параметры пула соединений с базой данных
IOT_VALKEY_HOST, IOT_VALKEY_PORT, IOT_VALKEY_DB, IOT_VALKEY_PASSWORD
Параметры подключения к хранилищу фоновых задач
IOT_JWT_SECRET_KEY, IOT_JWT_ALGORITHM
Ключ и алгоритм проверки подписи маркеров доступа
IOT_PRIVATE_API_PORTAL_TOKEN, IOT_PRIVATE_API_SLOTS_TOKEN
Статические маркеры доступа внешних систем к служебному интерфейсу
IOT_PORTAL_ONE_URL, IOT_PORTAL_ONE_API_KEY
Адрес и ключ доступа контентной части платформы
IOT_SLOTS_PRIVATE_URL, IOT_SLOTS_API_KEY
Адрес и ключ доступа сервиса расписания
IOT_HTTP_TIMEOUT, IOT_HTTP_RETRIES
Время ожидания ответа внешних систем и число повторных попыток
IOT_KAFKA_BOOTSTRAP_SERVERS, IOT_KAFKA_SECURITY_PROTOCOL, IOT_KAFKA_SASL_MECHANISM, IOT_KAFKA_USERNAME, IOT_KAFKA_PASSWORD
Параметры подключения к брокеру сообщений
IOT_KAFKA_CONSUMER_GROUP_ID
Идентификатор группы потребителей событий
Переменные наименований топиков
Наименования топиков входящих и исходящих событий
IOT_CORS_ALLOWED_ORIGINS
Перечень разрешённых источников кросс-доменных запросов
IOT_ROLLOUT_PAIRS
Перечень пар «предмет — класс», для которых включена обработка событий расписания
Переменные системы регистрации ошибок
Параметры передачи сведений об ошибках и доли выборки событий
© 2026 ООО «УМ Первый». Все права защищены.