Перейти к содержанию

Раздел 2. Администрирование системы

Настоящий раздел описывает административные функции, периодические проверки и порядок планового обслуживания BOX5-DIT-MGSN. Раздел предназначен для администратора, который сопровождает действующий контур: управляет пользователями и ролями, контролирует доступы, проверяет состояние сервисов, готовит обновления и технологические окна.

Технологическая установка и восстановление поставки описаны в И2, разделе 2 и И2, разделе 3. Резервное копирование и восстановление данных как отдельный регламент приведены в И3, разделе 3. Состав сервисов и назначение доменов приведены в приложении Г.

Администрирование выполняется через три поверхности:

  • web-интерфейс BOX5-DIT-MGSN, разделы Администрирование, Настройки, Мониторинг, Журналы;
  • REST API за ui-nginx и ui-rest-to-gprc, если нужна проверка без ручной работы в UI;
  • сервер поставки ~/CODE/box3, compose.sh, Docker, каталоги данных и контейнерные логи.
flowchart LR admin["Администратор"] sso["Внешний контур авторизации
Keycloak"] ui["Web UI BOX5-DIT-MGSN
рабочие разделы"] gateway["ui-nginx + ui-rest-to-gprc
/api/*"] auth["st-auth
профили и роли пользователей"] access["st-access
права на камеры и объекты"] camera["st-camera-storage
камеры, объекты, сценарии"] inference["inference
балансировка, мониторинг, модели"] audit["st-audit
журнал действий"] host["Хост поставки
compose.sh, docker, data"] admin --> sso --> ui --> gateway gateway --> auth gateway --> access gateway --> camera gateway --> inference gateway --> audit admin --> host host --> gateway host --> inference

Исходный Mermaid-код схемы: И3-MER-004. Раздел 2. Администрирование системы.

На схеме Keycloak показан только как внешний контур аутентификации. Его администрирование выполняется вне BOX5-DIT-MGSN; в BOX5-DIT-MGSN администратор работает с прикладными ролями, профилями, объектными правами, аудитом и состоянием сервисов.

2.1. Функции администрирования

2.1.1. Управление ролями и профилями пользователей

В промышленном контуре вход пользователей в BOX5-DIT-MGSN выполняется через Keycloak. Keycloak является внешней системой и в настоящем разделе не описывается. Администрирование внутри BOX5-DIT-MGSN начинается после успешной аутентификации пользователя во внешнем контуре: BOX5-DIT-MGSN хранит прикладной профиль пользователя, ролевую модель, объектные права доступа, историю входов и журнал действий.

Web-интерфейс публикует эти операции в разделе Администрирование:

  • Пользователи - просмотр пользователей, известных BOX5-DIT-MGSN, и их прикладных параметров;
  • Ролевая модель - создание и изменение ролей BOX5-DIT-MGSN, назначение доступных действий и страниц;
  • Логирование действий - просмотр действий пользователей и выгрузка отчёта;
  • профиль пользователя - просмотр персональных параметров в пределах назначенных прав.

Ролевая модель в разделе администрирования

Основные операции:

Операция Где выполняется Источник данных Контроль
Проверить режим входа через Keycloak GET /config.json ui-rest/ui-config/config.json В активной конфигурации UI установлен признак перенаправления входа во внешний контур.
Просмотреть пользователей, известных BOX5-DIT-MGSN UI Администрирование -> Пользователи или GET /api/statistics/auth/users/ st-auth, st-auth-postgres Список пользователей доступен для назначения ролей, объектных прав и отображения в журналах.
Управлять ролями UI Ролевая модель или /api/statistics/auth/roles-v2/ st-auth В списке ролей отображается новая версия роли, пользователь видит только разрешённые разделы.
Проверить историю входов UI журналов или отчёты auth st-auth, st-auth-report-pdf-xlsx-generator Отчёт PDF/XLSX формируется за выбранный период.

Создание учётных записей, отключение входа пользователя и требования к аутентификации относятся к внешнему контуру и не выполняются средствами BOX5-DIT-MGSN. В BOX5-DIT-MGSN администратор проверяет только прикладные настройки: роль, доступ к камерам и объектам, отображение пользователя в отчётах и журналах.

Токены, значения JWT_*, параметры интеграции с внешним контуром и другая чувствительная информация не публикуется в документации, тикетах и общих чатах. Для REST-проверок используется bearer token действующей авторизованной сессии или утверждённой служебной процедуры проверки; порядок получения токена в настоящей инструкции не приводится.

Пример безопасного smoke-проверочного набора через REST API:

curl -fsS http://<sova-host>/config.json \
  | jq '.ADDITIONAL_SETTINGS.IS_REDIRECT_TO_KEYCLOAK'

curl -fsS -H "Authorization: Bearer ${token}" \
  http://<sova-host>/api/statistics/auth/me/
curl -fsS -H "Authorization: Bearer ${token}" \
  http://<sova-host>/api/statistics/auth/users/
curl -fsS -H "Authorization: Bearer ${token}" \
  'http://<sova-host>/api/statistics/auth/roles-v2/?page=1&page_size=20'

2.1.2. Настройка прав доступа

Права доступа к камерам и наблюдаемым объектам хранятся в сервисе st-access и БД st-access-postgres. Сервис поддерживает простые выдачи доступа, именованные группы доступа, массовое назначение одинаковых прав пользователям и пересборку плоского кэша привилегий.

Операция Где выполняется Назначение
Выдать пользователю доступ к камере или объекту UI карточки пользователя/объекта или POST /api/statistics/access/simple/ Разрешить пользователю видеть выбранные камеры, события, отчёты и связанные представления.
Создать группу доступа GET/POST/PUT /api/statistics/access/group/ Сгруппировать пользователей и объекты ответственности.
Проверить привилегии пользователя GET /api/statistics/access/privileges/{user_id}/ Убедиться, что сервисы получили актуальный список доступных камер и объектов.
Пересобрать кэш прав POST /api/statistics/access/privileges/flush/ Используется после восстановления БД или массового изменения прав.

После изменения прав st-access публикует обновлённый список привилегий в Kafka topic statistic_access. Нижестоящие сервисы используют эти данные для фильтрации уведомлений, отчётов, ответственных пользователей и доступных камер. Если пользователь не видит ожидаемые события, администратор проверяет не только роль, но и объектные права в st-access.

2.1.3. Управление конфигурацией камер, объектов, сценариев и моделей

Конфигурация технологического контура включает камеры, наблюдаемые объекты, сценарии Node-RED/NRI, версии моделей и параметры балансировки. Эти операции относятся к администрированию, потому что влияют на то, какие видеопотоки обрабатываются и какие события попадают операторам.

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

Объект Основной сервис Административная операция Проверка результата
Камеры и наблюдаемые объекты st-camera-storage Создание, изменение, удаление, привязка объекта, проверка статуса камеры Камера есть в UI Мониторинг, в API camera-storage, нижестоящие сервисы получают Kafka-событие camera_*.
Сценарии и lite-сценарии svr-scenario-storage, svr-lite-scenario-storage, node-red-sandbox Создание и изменение логики выявления нарушений/событий, загрузка, архивирование, проверка версии сценария, перенос из песочницы В UI сценариев видна активная версия; после применения сценария камеры обрабатываются ожидаемым блоком NRI.
Модели svr-models-registry, inf-flows-manager Загрузка версии модели, проверка скачанных/активных версий, запуск обновления API-группа models-storage (GET /api/inference/models-storage/) и endpoints flows-manager возвращают ожидаемую модель.
Балансировка камер inf-load-balancer Проверка нод, тегов балансировки, распределения камер GET /api/inference/load-balancer/info2/ показывает ноды и камеры без незапланированных провалов.

Изменение камер, сценариев, моделей и связанных технических настроек выполняется сначала на TEST, затем переносится в PROD в согласованное окно. Перед изменениями, которые затрагивают поток обработки или модели, администратор сохраняет конфигурацию и проверяет откат по регламенту раздела 3.

2.1.4. Мониторинг состояния системы

Администратор контролирует работоспособность на уровне UI, API, контейнеров, данных, GPU и inference-пайплайна. В web-интерфейсе для этого используются разделы Мониторинг, Журналы и Администрирование -> Мониторинг кластера.

Мониторинг кластера

Основные контрольные точки:

Уровень Проверка Норма
Публичный UI/API GET /, GET /config.json, GET /api/base/ping/ UI загружается, в конфигурации включён вход через внешний контур, ping возвращает {"result":"pong"}.
Docker-домены compose.sh status all, docker ps Сервисы в состоянии Up, нет бесконечных рестартов.
Диски df -h / /data, du -sh ${COMPOSE_DATA} Достаточно свободного места для новых событий, логов, видеофрагментов и резервных копий.
GPU nvidia-smi GPU видимы, драйвер без ошибок, загрузка соответствует ожидаемому профилю.
Инференс POST /api/inference/monitoring/light с {"camera_ids":[]} Возвращается список состояний камер; критичные камеры не находятся в незапланированном отказе.
Балансировка GET /api/inference/load-balancer/info2/ Ноды и камеры распределены, нет неожиданного списка cameras_without_nodes.
Модели GET /api/inference/models-storage/ Активные модели доступны через API-группу реестра моделей.
Журнал действий GET /api/statistics/audit/services/, GET /api/statistics/audit/logs/ Audit API отвечает, события действий пользователей сохраняются.
Резервные копии latest.psql.gz, gzip -t, тестовое восстановление Свежие dump-файлы пригодны для восстановления.

Команды первичного контроля на сервере:

cd ~/CODE/box3

compose.sh status all
docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}'
curl -fsS http://localhost/api/base/ping/

df -h / /data
nvidia-smi

Проверка inference через REST API:

curl -fsS -X POST http://<sova-host>/api/inference/monitoring/light \
  -H "Authorization: Bearer ${token}" \
  -H 'Content-Type: application/json' \
  -d '{"camera_ids":[]}'

curl -fsS http://<sova-host>/api/inference/load-balancer/info2/ \
  -H "Authorization: Bearer ${token}"

curl -fsS http://<sova-host>/api/inference/models-storage/ \
  -H "Authorization: Bearer ${token}"

Состав Prometheus-метрик, источники технического мониторинга и ограничения применения /metrics приведены в приложении «Метрики мониторинга».

2.1.5. Управление обновлениями

Обновление BOX5-DIT-MGSN выполняется как управляемое изменение версии поставки:

  1. Зафиксировать текущие версии ~/CODE/box3, domains.conf, .env-файлов и Docker-образов.
  2. Проверить свободное место и состояние резервных копий.
  3. Сделать резервную копию конфигурации и данных по разделу 3.
  4. Применить изменение на TEST и выполнить smoke-проверку UI/API/inference.
  5. В технологическое окно применить изменение на PROD.
  6. Перезапустить затронутый домен, а не одиночный контейнер, если изменение относится к сервису внутри домена.
  7. Выполнить контрольный чек-лист после запуска.
  8. Зафиксировать результат обновления: дата, версия, затронутые домены, выполненные проверки, обнаруженные отклонения и решение по откату.

Для одноузлового compose-профиля используются команды:

cd ~/CODE/box3

compose.sh check
compose.sh pull <domain>
compose.sh restart <domain>
compose.sh status <domain>

Для полного запуска или остановки:

cd ~/CODE/box3

compose.sh stop all
compose.sh start all
compose.sh status all

Если контур развёрнут в Docker Swarm, применяются штатные swarm-скрипты из поставки, описанные в И2. Нельзя смешивать compose-команды и swarm-операции без отдельного решения ответственного администратора.

2.1.6. Журналирование административных действий

Действия пользователей и администратора фиксируются в st-audit; часть событий создаёт ui-rest-to-gprc при выполнении UI/REST-операций. В домене severstal отдельный сервис svr-security-notice может зеркалировать тот же audit-поток во внешний контур безопасности.

Администратор использует журнал действий для:

  • расследования изменения конфигурации камер, ролей, прав доступа и событий;
  • проверки неуспешных или подозрительных действий пользователя;
  • выгрузки CSV-отчёта за период;
  • подтверждения, что операция обновления или массового изменения была выполнена назначенным ответственным.

API-поверхность audit:

curl -fsS http://<sova-host>/api/statistics/audit/services/ \
  -H "Authorization: Bearer ${token}"

curl -fsS 'http://<sova-host>/api/statistics/audit/logs/?page=1&page_size=50' \
  -H "Authorization: Bearer ${token}"

2.1.7. Контроль конфигурационных переменных

Конфигурация BOX5-DIT-MGSN распределена между runtime-конфигурацией web-интерфейса, .env-файлами доменов поставки, compose-файлами и конфигурацией Nginx. Перед изменением параметров администратор фиксирует текущие файлы, проверяет изменение на TEST, затем применяет его на PROD в согласованное окно. Полные .env-файлы, значения паролей, токенов, приватных URL и ключей доступа в документацию и общие каналы не переносятся.

Основные файлы:

Контур Файл Что настраивает
Web UI ui-rest/ui-config/config.json или ui-rest/ui-config/settings.json Флаги отображения интерфейса, ссылки на песочницу, графики, логотипы и клиентские интервалы обновления.
API-шлюз ui-rest/.env Версии ui-react и ui-rest-to-gprc, роли, customer-domain маршруты, Kafka/JWT-параметры шлюза.
Backend/statistics statistics/.env Auth, access, камеры, события, отчёты, audit, ClickHouse, MinIO, Kafka, SMTP и версии сервисов статистики.
Backend customer-domain severstal/.env Интеграции с системами заказчика, сценарии, модели, asset/launch storage, ПК-КОТ, NiFi-интеграция и оргсинхронизация.
DS/inference inference/.env, extended-inference/.env, .env песочницы Node-RED NRI, медиасервер, балансировщик, GPU, модели, MLflow/VLFlow, Kafka topics, online saver и конвертеры моделей.
Data storage data-storage/.env, data-storage/configs/nginx.conf Временное хранилище данных, TTL временных объектов, MinIO, Redis и маршрут /api/s3/.

Frontend-параметры в runtime-конфигурации:

Наименование переменной Значение по умолчанию Описание переменной
ADMIN_ROLE_ID_LIST [1, 22, 2346950] Присваивание суперадминистратора путём добавления идентификатора в массив.
DEBOUNCE_TIME_CAMERA_PREVIEWS_MS 2000 Задержка при скролле страницы и отображении новых preview камер на странице Мониторинг.
REFRESH_CAMERA_PREVIEWS_INTERVAL_MS 6000 Интервал обновления preview камер на странице Мониторинг.
IS_ADD_WORK_ZONES_ACCESS false Доступ к установке тегов на странице создания или редактирования камеры.
IS_CAMERA_LOG_ENABLE false Отображение вкладки Логи на странице просмотра камеры.
IS_CSVN_FILTER_DISABLE false Фильтрация ЦСВН и виртуальных камер.
IS_REJECTED_EVENTS_ENABLE false Отображение страницы Отклонённые события.
IS_SEND_LIST_OF_SEVERSTAL_CAMERAS_IN_CHARTS true Передача массива доступных камер в графики на страницах Информационная панель и Верификация нарушений.
SCENARIOS_FRAME_PATH /sandbox/settings/sandbox/ Путь до песочницы сценариев.
SCENARIOS_FRAME_URL Задаётся URL песочницы URL песочницы сценариев.
TELEGRAM_CHART_URL Задаётся URL Telegram-бота URL Telegram-бота для графиков и уведомлений, если функция включена.
disable_logo_with_padding false Отключение логотипа с отступом, если ключ поддержан текущей версией UI.
IS_USE_VK_TEAMS_NOTIFICATIONS Не используется Резервный флаг уведомлений VK Teams; в текущем контуре не применяется.
DASHBOARD_DATALENS_METRICS_URL Не используется Резервная ссылка на метрики DataLens; в текущем контуре не применяется.

Backend-параметры целесообразно вести группами, потому что каждый сервис имеет собственный набор .env-ключей и часть значений является чувствительной:

Группа переменных Типовые значения или дефолт Назначение
PORT, SETTINGS_FILE, DEBUG, DEPENDS 3000, config.settings.production, false, список host:port зависимостей Базовый режим запуска backend-сервисов и ожидание зависимостей перед стартом.
JWT_SECRET, JWT_REFRESH_SECRET, JWT_ALGORITHM, AUTH_ROLE_*, SYNC_KEY, CUSTOM_DOMAINS Значения параметров доступа не приводятся Проверка токенов, роли UI/API, синхронизационные маршруты и включение customer-domain API.
POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DATABASE, POSTGRES_USER, POSTGRES_PASSWORD, *_POSTGRES_* Внутренний host сервиса, порт 5432; пароль не приводится Подключение сервисов к собственным PostgreSQL sidecar.
KAFKA_HOST, KAFKA_GROUP, KAFKA_TOPIC_* Обычно inf-kafka:9092; группы и topics задаются по сервису Асинхронный обмен камерами, событиями, пользователями, audit, моделями и websocket-обновлениями.
MINIO_ACCESS_KEY, MINIO_SECRET_KEY, MINIO_BUCKET_*, MINIO_PREFIX_*, MINIO_IS_SECURE Ключи доступа не приводятся; bucket/prefix задаются по сервису Доступ к S3-совместимому хранилищу для изображений, видео, отчётов, сценариев и моделей.
USE_CLICKHOUSE, IS_USE_CLICKHOUSE, CLICKHOUSE_*, EVENT_STORAGE_CH_*, EVENT_STATISTIC_CH_* В событийном контуре USE_CLICKHOUSE=True Подключение аналитических витрин и зеркал PostgreSQL в ClickHouse.
*_URL, *_HOST, *_BASE_URL, SVR_SEVERSTAL_INTEGRATION Внутренние DNS-имена Docker-сети HTTP/gRPC endpoint-переменные между ui-rest-to-gprc, statistics, inference и svr-* сервисами.
SEVERSTAL_INTEGRATION_*, POSTGRES_PK_KOT_*, PK_KOT_EVENT_STATUSES_FOR_SEND Значения параметров доступа и внешних URL не приводятся Интеграции заказчика: ПК-КОТ, ЦСВН, теги камер, оргсинхронизация и передача статусов событий.
SMTP_*, TELEGRAM_TOKEN, WITH_SMTP_CREDENTIALS, USER_CONFIRMATION_STATUSES_FOR_SEND Учётные данные не приводятся Отправка e-mail, Telegram/VK Teams уведомлений и настройка статусов подтверждения.
*_VERSION Тег образа или ветка поставки Фиксация версий backend-сервисов в составе поставки. Меняется только вместе с планом обновления.

DS/inference-параметры:

Группа переменных Типовые значения или дефолт Назначение
KAFKA_HOST, KAFKA_TOPIC_*, INFERENCE_KAFKA_TOPIC_* Обычно inf-kafka:9092; topics задаются в .env Управление жизненным циклом камер, отправка событий, rejected events, heartbeat и сведения о моделях.
INFERENCE_IPC_DIRECTORY, SHARED_MEMORY_SIZE, NRI_COMPOSE_DATA_DIR /inference_ipc; размер shared memory задаётся по профилю контура IPC/shared-memory обмен кадрами между медиасервером и NRI.
MODELS_PATH, MODEL_REGISTRIES_PRIORITY, VLFLOW_ENDPOINT, VLFLOW_MINIO_*, MLFLOW_*, AWS_* /models, ["filesystem", "vlflow"]; учётные данные не приводятся Поиск, скачивание и обновление моделей из filesystem, VLFlow, MLflow и S3-compatible хранилищ.
USE_GPU, USE_AUTO_LIST_GPU, LIST_GPU, NVIDIA_VISIBLE_DEVICES Задаётся по GPU-профилю контура Выбор GPU и режим запуска inference-процессов.
YOLO_CONVERSION_URI, MMLAB_CONVERSION_URI, BOX_YOLO_CONVERSION_URI, BOX_MMLAB_CONVERSION_URI Unix-socket или внутренний endpoint конвертера Конвертация моделей YOLO и MMLab для запуска в inference.
BOX_URL, BOX_LOGIN, BOX_PASSWORD, SVR_SEVERSTAL_INTEGRATION Учётные данные и приватные URL не приводятся Доступ NRI/песочницы к Box API и сервисам интеграции заказчика.
ONLINE_SAVER_*, SAVE_*, OUTPUT_VIDEOS_*, EVENTS_VALIDATOR_* Задаётся по профилю диагностики и хранения Сохранение событий, видео, кадров, отладочных артефактов и проверка событий валидатором.
INF_LOG_LEVEL, LOGGING_LEVEL, ENABLE_TSM_FILE_LOGGING, TSM_PROCESS_HEARTBEAT_INTERVAL_SEC Обычно INFO/false; heartbeat задаётся по сервису Уровень логирования, файловые логи TSM и периодичность heartbeat inference-процессов.

Data-storage-параметры:

Переменная или параметр Значение по умолчанию Назначение
DATA_TEMPORARY_STORAGE_VERSION Версия образа в data-storage/.env Версия прикладного сервиса временного хранения бинарных данных.
DATA_TEMPORARY_STORAGE_PORT Задаётся в data-storage/.env Публикуемый порт сервиса ds-data-temporary-storage, если он открыт наружу.
DATA_LIFE_TIME 900 TTL временного объекта в Redis, в секундах. Чтение объекта TTL не продлевает.
REDIS_HOST ds-data-temporary-storage-redis Redis sidecar для временных бинарных объектов.
MINIO_ACCESS_KEY, MINIO_SECRET_KEY Значения параметров доступа не приводятся Учётные данные MinIO для долговременного S3-совместимого хранилища.
COMPOSE_DATA Корневой каталог данных контура Базовый путь для persistent mount MinIO, PostgreSQL, ClickHouse и других сервисов.
NETWORK_NAME bx_default Общая Docker-сеть доменов BOX5-DIT-MGSN.
data-storage/configs/nginx.conf listen 8000, маршрут /api/s3/ Конфигурация ds-domain-gateway; это не .env-переменная, но именно здесь задаётся публикация объектных URL в MinIO.

После изменения переменных выполняется проверка:

cd ~/CODE/box3

compose.sh check
compose.sh restart <domain>
compose.sh status <domain>
curl -fsS http://localhost/api/base/ping/

Для ui-rest/ui-config/config.json или settings.json дополнительно проверить, что внешний GET /config.json или GET /settings.json возвращает новое значение, а нужный экран UI работает после жёсткого обновления страницы в браузере.

2.2. Регламентные операции

Регламентные операции выполняются в порядке от наименее вмешивающихся проверок к операциям, которые могут повлиять на обработку видеопотоков. Сначала администратор собирает статус и логи, затем проверяет данные и резервные копии, и только после этого выполняет перезапуски, очистки или обновления.

Периодичность Обязательность Операции Очередность и контроль Ответственный
Ежедневно, в начале смены Обязательно Проверить доступность UI и GET /api/base/ping/; состояние Docker-контейнеров; свободное место на / и /data; наличие свежих backup-файлов; критичные ошибки в логах ui-rest, statistics, inference; состояние GPU; список камер в inference-monitoring. Сначала чтение статуса, затем анализ отклонений. Если места меньше регламентного порога или есть контейнеры Restarting/Exited, создать инцидент до начала плановых изменений. Дежурный администратор
Ежедневно, после ночных заданий Обязательно Проверить st-auth-postgres-backup и st-access-postgres-backup, latest.psql.gz, gzip -t; проверить, что cron backup отработал без ошибок. Проверять до удаления старых копий и до любых обновлений. Дежурный администратор
Еженедельно Обязательно Проверить роли и группы доступа; выгрузить/просмотреть audit-журнал за период; проверить камеры без нод балансировки; проверить модели и сценарии, которые должны быть активны; оценить рост COMPOSE_DATA, логов, видео и MinIO. Сначала сравнить фактическое состояние с эксплуатационным журналом изменений, затем согласовать корректировки ролей, прав доступа, сценариев или квот. Администратор системы совместно с ответственным за эксплуатацию
Еженедельно Рекомендуется Выполнить выборочную проверку восстановления SQL dump в тестовой БД; проверить валидность файловой копии конфигурации; проверить актуальность ~/CODE/box3 и node-red-sandbox относительно паспорта поставки. Восстановление выполнять только вне промышленного контура или на отдельной тестовой БД. Администратор системы
Ежемесячно Обязательно Провести ревизию пользователей, известных BOX5-DIT-MGSN, ролей и объектных прав; проверить активный режим входа через Keycloak в UI-конфигурации; проверить срок хранения audit/logs/backups; сверить версии Docker-образов и документацию поставки. Результаты оформить в журнале эксплуатации: дата, проверяющий, выявленные отклонения, решение. Ответственный администратор
Ежемесячно Обязательно для PROD Провести контрольное технологическое окно: резервная копия, запуск/остановка по регламенту, проверка после старта, актуализация инструкции отката. Выполняется только по согласованному окну и после проверки на TEST. Ответственный администратор и владелец сервиса
Перед каждым обновлением Обязательно Зафиксировать версии, выполнить backup, проверить свободное место, проверить здоровье TEST, подготовить план отката, уведомить пользователей. Без успешного backup и плана отката обновление не начинать. Ответственный за обновление
После каждого обновления Обязательно Проверить compose.sh status, UI, режим входа через Keycloak, auth/me, роли, права доступа, audit, мониторинг камер, load-balancer, API-группу models-storage, выборочный пользовательский сценарий. Сначала технический smoke, затем прикладная проверка операторского процесса. Ответственный за обновление
По инциденту Обязательно Сохранить симптомы, время, логи, состояние контейнеров и дисков; локализовать домен; выполнить минимальный перезапуск или восстановление; оформить результат. До перезапуска сохранить диагностические данные, если это не увеличивает ущерб. Дежурный администратор

Минимальный ежедневный чек-лист:

cd ~/CODE/box3

date -Is
compose.sh status all
curl -fsS http://localhost/api/base/ping/
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Image}}'
df -h / /data
nvidia-smi

Проверка резервных копий st-auth и st-access:

for container in \
  statistics-st-auth-postgres-backup-1 \
  statistics-st-access-postgres-backup-1
do
  docker exec "$container" ls -l /backup/latest.psql.gz
  docker exec "$container" gzip -t /backup/latest.psql.gz
done

Проверка мониторинга камер:

curl -fsS -X POST http://localhost/api/inference/monitoring/light \
  -H "Authorization: Bearer ${token}" \
  -H 'Content-Type: application/json' \
  -d '{"camera_ids":[]}' \
  | jq 'length'

Проверка балансировки:

curl -fsS http://localhost/api/inference/load-balancer/info2/ \
  -H "Authorization: Bearer ${token}" \
  | jq '{nodes: (.nodes | length), cameras_without_nodes}'

Операции, которые запрещено выполнять как рядовой регламент без согласования:

  • удаление или пересоздание PostgreSQL, ClickHouse, MinIO и Kafka-каталогов;
  • docker system prune на PROD без оценки используемых образов и свободного места;
  • изменение .env, domains.conf, ui-config/config.json, сценариев, моделей или прав доступа без фиксации исходного состояния;
  • перезапуск одиночного контейнера внутри домена, если штатный доменный compose.sh restart <domain> применим;
  • публикация .env, токенов, JWT, дампов БД, чувствительной информации и персональных данных в документацию, Git или общие каналы.

2.3. Регламент обслуживания

2.3.1. Плановое техническое обслуживание

Плановое обслуживание выполняется в согласованное технологическое окно. Для PROD оно проводится после проверки на TEST и после подтверждения, что резервная копия пригодна для восстановления.

Порядок обслуживания:

  1. Назначить окно и ответственных: исполнитель, проверяющий, контакт для отката и владелец бизнес-процесса.
  2. Зафиксировать исходное состояние:
cd ~/CODE/box3
date -Is
git rev-parse --short HEAD
compose.sh status all
docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}'
df -h / /data
  1. Выполнить резервное копирование по разделу 3.
  2. Проверить, что нет активных незавершённых операций, которые будут потеряны при остановке: загрузки видео, формирования отчётов, обновления моделей, перенос сценариев, импорт/экспорт архивов.
  3. Остановить или перезапустить только затронутые домены.
  4. Выполнить обслуживание: обновление образа, изменение конфигурации, очистка согласованных временных данных, замена модели, настройка сценария.
  5. Запустить домены и дождаться стабилизации.
  6. Выполнить технический smoke: ping, режим входа через Keycloak, auth/me, список пользователей, роли, группы доступа, monitoring/light, load-balancer/info2, API-группу models-storage, список audit-сервисов.
  7. Выполнить прикладной smoke: вход в UI, просмотр мониторинга камер, проверка роли администратора, проверка выбранного операторского сценария.
  8. Записать результат в журнал эксплуатации.

2.3.2. Плановая остановка системы

Плановая остановка требуется для полного файлового backup, миграции узла, обслуживания диска, замены критичных .env-параметров или обновления, которое затрагивает несколько доменов.

Порядок:

  1. Уведомить пользователей о времени недоступности UI и обработки видеопотоков.
  2. Остановить входящие пользовательские операции: загрузки, настройки камер, сценарии, отчёты.
  3. Зафиксировать состояние контейнеров и дисков.
  4. Выполнить ручной SQL dump для backup sidecar-контейнеров, если они используются.
  5. Остановить основной контур:
cd ~/CODE/box3
compose.sh stop all
  1. Остановить песочницу Node-RED, если обслуживание затрагивает сценарии, модели или её данные:
cd ~/CODE/node-red-sandbox
docker compose down
  1. Выполнить обслуживание или файловое копирование.
  2. Запустить контур:
cd ~/CODE/box3
compose.sh start all

cd ~/CODE/node-red-sandbox
docker compose up -d
  1. Проверить UI, API, контейнеры, камеры, модели и audit.

В swarm-профиле вместо compose.sh stop/start all используется штатный swarm-скрипт поставки. Порядок действий сохраняется: фиксация состояния, backup, остановка, обслуживание, запуск, smoke-проверка, запись результата.

2.3.3. Применение обновлений

Обновление считается завершённым только после технической и функциональной проверки. Наличие запущенных контейнеров само по себе не подтверждает успешное обновление.

Порядок применения:

  1. Подготовить описание изменений: какие домены, сервисы, модели, сценарии, переменные .env и миграции затрагиваются.
  2. Проверить дистрибутив на TEST.
  3. Зафиксировать исходные версии PROD:
cd ~/CODE/box3
git status --short
git rev-parse --short HEAD
docker images --format '{{.Repository}}:{{.Tag}} {{.ID}}' | sort
  1. Сделать backup.
  2. Применить изменение:
cd ~/CODE/box3
compose.sh pull <domain>
compose.sh restart <domain>
  1. Если образ был собран локально в контуре и не опубликован в registry, не выполнять compose.sh pull <domain> для этого тега, чтобы не заменить его старым registry-образом.
  2. Выполнить smoke-проверку и сравнить с ожидаемым состоянием.
  3. При ошибке выполнить откат: вернуть предыдущие .env/domains.conf, предыдущий тег образа или восстановить данные из backup, если обновление изменило схему или содержимое БД.

2.3.4. Очистка и обслуживание данных

Очистка данных выполняется только для классов данных, которые не являются источником истины или имеют утверждённый срок хранения.

Объект Можно очищать по регламенту Условие
Docker logs Да После сохранения диагностически важных логов и с учётом log rotation.
Старые SQL dump Да После проверки, что остаётся минимально требуемое число актуальных копий.
Временные HLS/IPC/tmpfs-каталоги Да Только при остановленном или перезапускаемом домене inference/media.
Видео, отчёты, MinIO-объекты Только по согласованному регламенту хранения Перед удалением проверить, что данные не нужны для расследования, отчётов и восстановления.
PostgreSQL/ClickHouse/Kafka/MinIO каталоги Нет как рядовая очистка Только восстановление или миграция по отдельному плану.

Если свободное место на /data приближается к критическому порогу, сначала выясняется источник роста:

df -h /data
du -xh --max-depth=2 /data | sort -h | tail -n 30
docker system df

После анализа администратор выбирает минимальное действие: ротация логов, перенос backup, удаление согласованных временных файлов или расширение диска.

2.3.5. Верификация раздела

Содержание раздела применяется к промышленному контуру BOX5-DIT-MGSN. Проверки выполняются на целевом PROD-окружении через штатный URL BOX5-DIT-MGSN, SSH-доступ к узлам поставки и внутренние API. Адреса промышленного контура, токены, параметры доступа и значения, содержащие промышленную информацию, в настоящей документации не фиксируются; результат проверки заносится в журнал эксплуатации.

Проверка Результат
UI config GET /config.json возвращает активную конфигурацию, в промышленном контуре включён ожидаемый режим входа через внешний контур авторизации.
Авторизованные экраны администрирования Экраны ролей, пользователей, мониторинга кластера и журналов открываются пользователю с правами администратора; при подготовке скриншотов промышленная информация маскируется.
SSH/API: GET /api/base/ping/ Получен ответ gateway без ошибки; проверка выполняется с узла поставки или через штатный внешний URL.
Состояние доменов compose.sh status all и docker ps показывают запущенные критичные домены ui-rest, statistics, inference, extended-inference, severstal, data-storage, kafka-domain, elk-log и, если используется, node-red-sandbox.
REST с авторизацией auth/me, auth/users, roles-v2, access/group, audit/services, load-balancer/info2 возвращают успешные ответы для действующей административной сессии.
REST-мониторинг POST /api/inference/monitoring/light и POST /api/inference/monitoring/ с {"camera_ids":[]} возвращают состояние промышленного набора камер; количество камер не фиксируется в документации.
REST models-storage GET /api/inference/models-storage/ возвращает список моделей из реестра svr-models-registry, ожидаемый для текущей версии поставки и включённых сценариев.
Backup sidecar st-auth и st-access имеют актуальный latest.psql.gz; проверка пригодности dump описана в разделе 3.