Эксплуатация Network
Этот раздел предназначен команде ozProtect. Network размещается на нашей инфраструктуре; выдача доступа владельцу игрового сервера не требует передачи исходников backend.
Сервисы и состояние
Network использует Node.js, MySQL primary/read, Redis и Socket.IO. HTTP процесс, cron-worker и Telegram-worker имеют отдельные точки запуска. k3s манифесты shared и dedicated имеют разные области действия; customer-specific настройки остаются в dedicated конфигурации.
| Проверка | Что означает | Что не подтверждает |
|---|---|---|
/healthz | Liveness HTTP-процесса | Подключение плагина и доступность всех зависимостей |
/readyz | Готовность по состоянию зависимостей | Полный игровой сценарий, корректность данных и внешние уведомления |
/metrics | Метрики Prometheus | Публичный API для игроков |
/status.json, status/admin | Наблюдаемость и служебное управление по предусмотренным проверкам | Право публиковать внутренние данные или вызывать admin routes без сессии |
Status UI имеет собственную авторизацию/unlock и настройки видимости. Не публикуйте служебные URL/пароли/токены в руководстве пользователя. CORS и список host в старом контуре не подтверждают готовность будущего домена.
MySQL и реплики
Записи и чтение сразу после записи выполняются на primary. Read connection пригоден для тяжёлых списков, если допустимо отставание реплики. ID Minecraft выделяется только primary-транзакцией; переключение чтения на реплику в этом месте нарушает смысл подтверждённого результата.
Не добавляйте частые SQL health-запросы в горячие методы. Используйте pool/connection state и существующие status/metrics проверки. Резервные копии должны сохранять game_player_ids вместе с историей: нельзя очищать отображение UUID и затем повторно выдавать ID.
Миграции
Network использует Knex/mysql2, immutable timestamped migrations и стандартные таблицы Knex. Запуск приложения схему не обновляет. Пример для оператора после выбора и проверки целевой БД:
$env:MIGRATION_ENV_FILE = 'C:\private\chosen.env'
npm run migrate:status
npm run migrate:latestmigrate:status может создать служебные таблицы Knex на неуправляемой БД; это не строго read-only команда. MIGRATION_ALLOW_ENV=1 разрешает явно подготовленное окружение вместо файла. Нельзя считать --env production выбором безопасного отдельного файла credentials.
Baseline содержит только схему 69 таблиц ozprotect_net, без строк данных и без ozprotect_ac. Существующие таблицы не переписываются, но baseline adoption не сравнивает их полную схему. MySQL DDL может коммитить частично; после ошибки нужна сверка, затем forward repair. Начальные миграции identity/history намеренно запрещают destructive down. unlock допустим только после подтверждения остановки прежнего процесса миграции.
Redis и фоновые задачи
Внутрикластерный Redis adapter поддерживает fanout и callback/ack. Global Redis является notify-only между регионами. Для запроса с ответом нужен предусмотренный HTTP/сохранённый state flow. Успешное уведомление не доказывает применение команды другим регионом.
Cron-cleanup нельзя дублировать каждым подом без предусмотренной координации. Работайте по _docs/k3s/cron-worker.md и существующим блокировкам. Telegram в RU обслуживается NL worker-агентом для RU кластера; менять маршрутизацию нужно вместе с queue и deployment контрактом.
Данные для диагностики
Фиксируйте timestamp, commit/build, сервер/проект, method/event, тип ошибки, стадию сохранения и ACK. Удаляйте токены, пароли, webhook и session code из материалов. Диагностический snapshot и real game acceptance отмечайте отдельно.
Источники: Network common/server/metricsAndStatusRoutes.js, common/server/statusAuth.js, _docs/sql/MIGRATIONS.md, _docs/k3s/{cron-worker,telegram-worker,global-events,DB_REPLICA}.md.
