Skip to content

Эксплуатация Network ​

Этот раздел предназначен команде ozProtect. Network размещается на нашей инфраструктуре; выдача доступа владельцу игрового сервера не требует передачи исходников backend.

Сервисы и состояние ​

Network использует Node.js, MySQL primary/read, Redis и Socket.IO. HTTP процесс, cron-worker и Telegram-worker имеют отдельные точки запуска. k3s манифесты shared и dedicated имеют разные области действия; customer-specific настройки остаются в dedicated конфигурации.

ПроверкаЧто означаетЧто не подтверждает
/healthzLiveness 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. Запуск приложения схему не обновляет. Пример для оператора после выбора и проверки целевой БД:

powershell
$env:MIGRATION_ENV_FILE = 'C:\private\chosen.env'
npm run migrate:status
npm run migrate:latest

migrate: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.

Разработано с ❤️ от ozLiginus