Тренировочное тестирование НОК ЖКХ
Автоматизированная информационная система «Тренировочное тестирование для подготовки к НОК в сфере ЖКХ»

Описание технической архитектуры

Состав программы. Программа «Автоматизированная информационная система „Тренировочное тестирование для подготовки к НОК в сфере ЖКХ“» (альтернативное наименование — АИС «Тренировочное тестирование для подготовки к НОК в сфере ЖКХ»), версия 1.0.1, состоит из двух частей, которые поставляются вместе в одном дистрибутиве:

  1. Серверная часть — веб-приложение, планировщик заданий, схема базы данных, сценарии установки и обслуживания. Устанавливается на сервер под управлением Linux.
  2. Модуль обмена (aiszkh_export) — передаёт серверной части сведения из внешней системы АИС ОК ЖКХ. Устанавливается на сервер системы АИС ОК ЖКХ её владельцем или с его согласия и обращается к её базе данных только на чтение.

В состав программы не входят банк экзаменационных вопросов и ответов, настройки экзаменационных тестов и сведения о соискателях. Это данные лицензиата, которые он получает из системы АИС ОК ЖКХ на основании собственных прав. Не входят также операционная система, СУБД, веб-сервер и интерпретатор Python: они устанавливаются из репозиториев операционной системы.

Способы предоставления: интернет-сервис и установка на сервер лицензиата.

Для промышленной эксплуатации нужны: сервер Linux с СУБД MariaDB и веб-сервером nginx; доменное имя и сертификат TLS (работа только по HTTPS); модуль обмена на сервере системы АИС ОК ЖКХ и защищённый канал до него; почтовый сервер для уведомлений.

Демонстрационный режим: модуль обмена работает со встроенным набором вымышленных данных вместо базы системы АИС ОК ЖКХ; письма не отправляются. В этом режиме можно проверить все функции программы без доступа к системе АИС ОК ЖКХ.

1. Архитектурный стиль

Платформа — серверное веб-приложение с многоуровневой архитектурой (представление — прикладная логика — данные), работающее по модели «клиент — сервер». Пользователь работает через браузер; вся обработка выполняется на сервере. Обмен с внешней системой АИС ОК ЖКХ вынесен в отдельный модуль обмена, развёрнутый на её сервере. Взаимодействие построено на периодическом получении данных Платформой («pull») по защищённому каналу.

2. Структурные элементы

 Браузер пользователя
        │ HTTPS
        ▼
 ┌─────────────── Сервер Платформы (Linux) ────────────────┐
 │ nginx ──► gunicorn ──► веб-приложение (Flask)            │
 │                          │                               │
 │ планировщик (APScheduler)├──► MariaDB (база Платформы)  │
 │        │                 └──► файловое хранилище media/  │
 │        │ SMTP ──► почтовый сервер                        │
 │        ▼                                                 │
 │   SSH-туннель (autossh)                                  │
 └────────┼─────────────────────────────────────────────────┘
          │ SSH
 ┌────────▼──── Сервер системы АИС ОК ЖКХ (Windows) ───────┐
 │ модуль обмена (Flask + waitress, 127.0.0.1:8789)         │
 │        │ только чтение                                   │
 │        ▼                                                 │
 │ PostgreSQL (база системы АИС ОК ЖКХ)                     │
 └──────────────────────────────────────────────────────────┘
Элемент Технология Назначение
Веб-сервер nginx Приём HTTPS-запросов, выдача статических файлов, ограничение частоты запросов, заголовки безопасности
Сервер приложений gunicorn Запуск веб-приложения в нескольких процессах
Веб-приложение Python 3.12, Flask, Jinja2 Интерфейс и прикладная логика: вход, личные кабинеты, тесты, отчёты, администрирование
Планировщик APScheduler (отдельная служба) Обмен с системой АИС ОК ЖКХ, рассылка писем, напоминания, закрытие истёкших доступов
База данных MariaDB 10.11 Пользователи, допуски, банк вопросов, ответы и сессии тестов, журналы, настройки
Файловое хранилище каталог media/ Изображения и файлы к вопросам
Модуль обмена Python, Flask, waitress, psycopg Выдача Платформе ограниченной проекции данных системы АИС ОК ЖКХ
Канал обмена SSH-туннель (autossh) Шифрование обмена; порт модуля не публикуется в сеть

3. Программные компоненты веб-приложения

Компонент Файлы Назначение
Фабрика приложения webapp/app_factory.py Сборка приложения, защита от CSRF, проверка согласий, обработка ошибок
Безопасность webapp/security.py, webapp/auth_routes.py Вход, хеширование паролей (argon2), защита от подбора, роли и области видимости
Кабинет тестируемого webapp/candidate.py, grading.py, questions.py, candidate_stats.py, gamification.py Направления, тесты, проверка ответов, статистика, мотивация
Кабинеты ЦОК и СПК webapp/operator.py Сводки, отчёты, карточки, продление доступа
Администрирование webapp/admin.py Банк вопросов, справочники, операторы, почта, документы
Отчёты и выгрузки webapp/reports.py, webapp/exports.py 29 отчётов, выгрузка в Excel (openpyxl) и PDF (reportlab)
Почта webapp/mailer.py Очередь писем, шаблоны, повторные попытки
Срок подготовки webapp/lifecycle.py Расчёт и закрытие доступов
Обмен services/aiszkh_sync.py, aiszkh_users.py, aiszkh_bank_sync.py Приём заявлений, учётных записей и банка вопросов
Импорт importers/ Загрузка банка вопросов с предпросмотром и журналом
Данные webapp/db.py, migrations/ Доступ к БД, схема и её версии

4. Интерфейсы

Интерфейс Протокол Описание
Пользовательский HTTPS, HTML Веб-интерфейс на русском языке, адаптированный для компьютеров, планшетов и смартфонов
Модуль обмена HTTP через SSH-туннель, JSON GET /api/v1/applications, /exams, /centers, /councils, /users — постранично по времени изменения; POST /api/v1/auth/verify — проверка пароля; GET /bundle/… — выгрузка банка вопросов. Доступ по ключу X-API-Key / X-Bundle-Token
Почтовый SMTP (STARTTLS/SSL) Отправка уведомлений
Выгрузки XLSX, PDF Файлы отчётов

5. Данные и их защита

Что Как защищено
Адреса электронной почты Шифруются (Fernet: AES-128-CBC + HMAC-SHA256, ключ PDN_ENCRYPTION_KEY); поиск по адресу — по слепому индексу HMAC-SHA256 (ключ EMAIL_HMAC_KEY)
Хеши паролей, полученные из системы АИС ОК ЖКХ Шифруются тем же способом
Пароли, установленные на Платформе Хранятся только как хеш argon2
Фамилия, имя, отчество, логин, ответы и результаты Хранятся без шифрования в базе MariaDB; к базе подключаются только учётная запись Платформы (с локального адреса сервера) и администратор сервера
Передача между браузером и сервером HTTPS (TLS), cookie сеанса с признаками Secure, HttpOnly, SameSite
Обмен с модулем обмена SSH-туннель; модуль слушает только локальный адрес и требует ключ доступа
Модуль обмена — база системы АИС ОК ЖКХ Режим только чтения (default_transaction_read_only), отдельная учётная запись с правами SELECT
Ключи шифрования В файле настроек .env (права 640, владелец — учётная запись службы); без ключа зашифрованные поля не восстановить
Резервные копии Дамп базы и копия .env ежесуточно, каталог /var/backups/test_aiszkh с доступом только для root (права файлов 600), хранение 30 дней; копии не шифруются — их перенос во внешнее хранилище и защита определяются владельцем сервера

Действия пользователей, обмен с системой АИС ОК ЖКХ, отправка писем и события безопасности журналируются.

6. Внешние зависимости

Платформа во время работы не обращается к внешним сервисам в сети «Интернет»: шрифты, библиотеки интерфейса и изображения раздаются с собственного сервера. Внешние соединения — только с модулем обмена (через SSH-туннель) и с почтовым сервером, заданным администратором. Сторонние компоненты — программные библиотеки с открытыми лицензиями, перечень приведён в THIRD_PARTY_LICENSES.md.

7. Масштабирование и надёжность

8. Хранение исходного текста, сборка и выпуск

Средство Описание
Объектный код Не создаётся: программа на Python и JavaScript исполняется интерпретатором и браузером без компиляции
Сборка дистрибутива Сценарий scripts/build_dist.sh на рабочем месте разработчика на территории Российской Федерации: архив исходного текста и библиотек Python (wheelhouse/) с контрольной суммой SHA-256
Хранение дистрибутивов Архивы версий хранит правообладатель; публичная загрузка не предусмотрена
Распространение Интернет-сервис — установка правообладателем на сервер в Российской Федерации; установка у лицензиата — передача архива дистрибутива по лицензионному договору
Предоставление доступа пользователям Учётные записи соискателей и работников ЦОК и СПК создаются автоматически по сведениям системы АИС ОК ЖКХ, остальные — администратором Платформы; права определяются ролью
Не применяются Активация, лицензионные ключи, серверы лицензий, телеметрия и автоматическое обновление из сети «Интернет»