# Развертывания

Узнайте о развертываниях и их жизненном цикле — концепции и лучшие практики для более глубокого понимания.

## 🗺️ Оркестрация

Запускайте новые серверы за секунды, чтобы удовлетворять спрос на ресурсы с нашим облачно-нативным подходом к периферийным вычислениям. Мы относимся к серверам как к [скоту, а не к домашним питомцам](https://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/) — полностью заменяя неисправные экземпляры вместо того, чтобы вручную возиться с каждым из них.

{% hint style="info" %}
Ваш выбор оркестрации **повлияет на стоимость devops, стоимость серверов и масштабируемость**.
{% endhint %}

{% hint style="success" %}
[Свяжитесь с нами в Discord](https://discord.gg/MmJf8fWjnt) чтобы узнать о гибридных вариантах оркестрации и оптимизации стоимости хостинга.
{% endhint %}

Чтобы полностью понять все плюсы и минусы, давайте сравним различные методы оркестрации.

### Match-Bound

Золотой стандарт для современных студий, обеспечивающий **самую простую интеграцию при лучшей экономической эффективности**.

👍 **Преимущества**

* Лучшая экономическая эффективность — масштабирование в реальном времени для удовлетворения спроса игроков поминутно.
* Самая низкая стоимость devops благодаря хостингу без привязки к региону; Edgegap автоматизирует 99% задач.
* Самый низкий пинг благодаря более чем 615 площадкам в публичной облачной инфраструктуре Edgegap.
* Самое быстрое масштабирование вверх (burst-ability) в случае неожиданного всплеска трафика.
* Высочайший стандарт безопасности и предотвращения читерства игроков (серверная авторитетность).
* Минимальное влияние неожиданного сбоя сервера на игроков, затрагивающее только один матч.

👎 **Недостатки**

* Внедрение новой ментальной модели оркестрации поначалу требует некоторого времени на адаптацию.
* Серверы, работающие дольше 24 часов, будут автоматически завершены.

🧩 **Лучше всего подходит для**

* Игр, чувствительных к задержке, — **когда оптимизация netcode не может компенсировать высокий пинг:**
  * Шутеры от первого лица, файтинги, VR и XR (виртуальная и расширенная реальность), …
* Игр с **верхним пределом длительности матча по замыслу**,
  * Battle Royale, PvPvE[^1], кооперативные шутеры, MOBA, спортивные игры, ARPG и Dungeon Crawler, …

🔎 **Обнаруживаемость**

* Запускайте новые игры, когда присоединяется достаточное число игроков [Подбор соперников](/ru/learn/podbor-sopernikov.md).
  * Добавляйте игроков, чтобы [заменять вышедших из существующих матчей с помощью backfill](/ru/learn/podbor-sopernikov/matchmaker-in-depth.md#backfill).
* Дайте игрокам просматривать серверы и выбирать из списка с [Браузер серверов](/ru/learn/brauzer-serverov.md).
* [Реализуйте собственный или сторонний игровой бэкенд для обнаружения серверов](/ru/learn/advanced-features/managed-clusters.md#nakama-by-heroic-labs).

{% hint style="info" %}
Edgegap автоматически масштабирует все более чем 615 серверных локаций вверх/вниз на основе активности игроков в каждом регионе. Готовьтесь к успеху — без проблем [масштабируйтесь до 14 миллионов одновременных пользователей за 60 минут](https://edgegap.com/resources/performance-benchmark).
{% endhint %}

### Региональный резерв

Традиционная модель для **постоянных миров с пользовательским контентом и социальных MMO-игр**.

👍 **Преимущества**

* Знакомый и понятный, старомодный подход для закалённых ветеранов.
* Высочайший стандарт безопасности и предотвращения читерства игроков (серверная авторитетность).
* Легко прогнозируемая стоимость на основе ежемесячного обязательства.

👎 **Недостатки**

* Более высокая стоимость хостинга — каждый регион требует один или несколько простаивающих резервных серверов (burst capacity).
* Более высокая стоимость devops — масштабирование, операции и обслуживание дублируются для каждого региона.
* В регионах с меньшей базой игроков наблюдается высокий пинг из-за подключения к удалённым серверам.

🧩 **Лучше всего подходит для**

* Постоянные миры с пользовательским контентом, хранящимся на сервере, даже когда игроки офлайн.
  * MMO, песочницы с постройкой базы или размещением объектов, Extraction Shooter, ...
* игры, терпимые к задержкам, — **когда серверно-авторитетная физика в реальном времени не требуется**:
  * мобильные игры, кооперативные игры, TCG/CCG, пошаговые стратегии, …
* Асинхронный мультиплеер, **где сбои сервера минимально влияют на опыт игроков:**
  * гонка за призраками, захват вражеской базы, игры на строительство/фермерство с таймером, …
* приложения с тяжёлым процессом инициализации — когда подготовка серверов занимает минуты.

🔎 **Обнаруживаемость**

* Дайте игрокам просматривать серверы и выбирать из списка с [Браузер серверов](/ru/learn/brauzer-serverov.md).
* [Реализуйте собственный или сторонний игровой бэкенд для обнаружения серверов](/ru/learn/advanced-features/managed-clusters.md#nakama-by-heroic-labs).

{% hint style="info" %}
См. [Управляемые кластеры](/ru/learn/advanced-features/managed-clusters.md) для **самостоятельного хостинга ваших микросервисов и бэкенд-сервисов** на Edgegap.
{% endhint %}

### Peer to Peer

Перенесите усилия разработки с ~~выделенных серверов~~ на **relay netcode для не соревновательных игр**.

Связанные темы: listen-серверы, авторитет игрока-хоста, NAT punch-through.

👍 **Преимущества**

* Самая низкая стоимость хостинга, требующая только Relay-серверов для решения NAT punch-through.
* Самая низкая стоимость devops — обслуживание требуется только для клиентских сборок и каналов распространения.
* Минимальное влияние неожиданного сбоя сервера на игроков, затрагивающее только один матч.
* Легко реализуется и быстро прототипируется, без необходимости разработки бэкенда.

👎 **Недостатки**

* Повышенные трудозатраты на разработку peer-to-peer netcode, требующие навыков параллельного программирования.
* Худшие значения пинга и наибольшая чувствительность к неблагоприятным сетевым условиям (например, мобильному интернету).
* Самая слабая безопасность, уязвимость к атакам man-in-the-middle и угону сессии.
* Риск потери сессии при выходе хоста, если не реализовать собственную миграцию хоста.

🧩 **Лучше всего подходит для**

* Кооп- и казуальные игры — **когда читерство не лишает игру удовольствия и не ломает её**,
  * Детские игры, игры на исследование, приключения, …

🔎 **Обнаруживаемость**

* [Реализуйте собственный или сторонний игровой бэкенд для обнаружения серверов](/ru/learn/advanced-features/managed-clusters.md#nakama-by-heroic-labs).

{% hint style="success" %}
См. наш [Распределённые ретрансляторы](https://docs.edgegap.com/docs/distributed-relay-manager) для сервиса, обеспечивающего peer-to-peer с лучшей в своём классе задержкой и безопасностью.
{% endhint %}

## 📍 Размещение серверов

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

{% hint style="info" %}
Ваша стратегия размещения серверов **повлияет на опыт игроков, удержание и отзывы о вашей игре**.
{% endhint %}

{% hint style="success" %}
**Edgegap разворачивает серверы в** [**лучшей возможной локации**](#server-score) **при наличии доступной мощности**, для быстрых матчей с низкой задержкой.
{% endhint %}

<figure><img src="/files/858cb6ac8ab6abcb6ec220e536e81a245d990313" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
См. [#deployment-balance-points](#deployment-balance-points "mention") на **анализировать размещение серверов в реальном времени**, в масштабе.
{% endhint %}

### Оценка сервера

Стратегия оценки сервера использует запатентованную методологию Edgegap, которая **оптимизирует размещение серверов для каждого матча индивидуально**. Выполняет ненавязчивую телеметрию, чтобы приблизительно оценить сетевую близость каждого игрока к нашим серверным локациям и выбрать сервер, который обеспечивает лучшее:

* **отзывчивость** — обеспечивает самый низкий средний пинг для всех игроков,
* **справедливость** — обеспечивает сбалансированный и справедливый пинг для всех игроков.

{% hint style="success" %}
Наш [Матчмейкер](/ru/learn/podbor-sopernikov.md) использует **стратегию Server Score по умолчанию, чтобы обеспечить наилучший возможный опыт**. Чтобы использовать эту стратегию с [Deploy API](https://docs.edgegap.com/api/#tag/Deployments), передавайте публичные IP-адреса игроков или геокоординаты в запросе на развертывание.
{% endhint %}

**Неотзывчивое размещение** — сервер далеко, высокий пинг для всех игроков:

<figure><img src="/files/71d71e1cd05e3a8e6774e7d8dc2ebcfef4938539" alt=""><figcaption></figcaption></figure>

**Несправедливое размещение** — неравномерный пинг, один игрок в невыгодном положении:

<figure><img src="/files/1d5cb3d8cce45be102251d41bec805810cc42828" alt=""><figcaption></figcaption></figure>

**Пример хорошего размещения** — отзывчивый и справедливый пинг для всех игроков:

<figure><img src="/files/12b2ecc6a6c2717290dd9b743e67389259752113" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Эта стратегия **особенно эффективна при хостинге группы игроков, находящихся далеко друг от друга** (Северная Америка vs. Европа или западное побережье vs. восточное побережье), что часто бывает с заранее созданными лобби.
{% endhint %}

### Геолокация

В качестве альтернативы, **передавайте координаты игроков по широте и долготе или координаты предпочтительной серверной локации** вместо использования автоматизированной телеметрии. Этот подход требует дополнительной реализации геопоиска на стороне клиента, полностью полагаясь на решение разработчика игры.

{% hint style="warning" %}
Стратегия геолокации не рекомендуется для [#match-bound](#match-bound "mention") оркестрации, за исключением приложений со строгими регуляторными требованиями к межрегиональной передаче данных, или когда IP игрока недоступен.
{% endhint %}

{% hint style="success" %}
Чтобы использовать эту стратегию с [Deploy API](https://docs.edgegap.com/api/#tag/Deployments), укажите публичные IP-адреса игроков или геокоординаты в запросе на развертывание.
{% endhint %}

### Блокировка региона

Серверы могут размещаться с использованием грубо обобщённого параметра региона, либо:

* автоматически выбранного для игрока на основе его метаданных (база данных учётной записи игрока), либо
* выбранного игроком во время подбора матча, что позволяет размещение с высокой клиент-серверной задержкой.

{% hint style="danger" %}
**Использовать эту стратегию отдельно не рекомендуется, так как это может привести к плохой сетевой производительности.**
{% endhint %}

{% hint style="success" %}
Использование **выбора региона в качестве предфильтра в сочетании с другой стратегией** — лучшая альтернатива.
{% endhint %}

## 🟢 Качество соединения

Некоторые игры (и некоторые игроки) более чувствительны к задержке или лагам, чем другие. Хотя отчёты игроков — отличный индикатор инцидентов или регрессионных багов в масштабе, **игрокам может не хватать глубокого понимания сетевых концепций** и они быстро перекладывают вину на студии, netcode или серверы.

Первопричина некоторых проблем может быть скрыта от игроков, поэтому сотрудничество студии и хостинг-провайдера может быть критически важным. **Приоритет Edgegap — всегда предоставлять наилучший возможный сервис.**

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

#### Низкая задержка

Задержка игрока — это сочетание задержек при передаче данных между:

* **физическими устройствами —** физический сигнал, проходящий через [топологию интернет-сети](https://en.wikipedia.org/wiki/Internet#Routing),
* **хостом и хостом** — возникающих из-за протоколов, транспорта и мер безопасности,
* **процессом и процессом** — возникающих из-за (распаковки) и обработки данных в клиенте/сервере.

Edgegap снижает физическую задержку, размещая серверы ближе к вашим игрокам для более быстрых ответов и меньшего числа сетевых переходов. Благодаря локациям у 17 облачных и bare metal-провайдеров вы получаете **пинг лучшего в классе уровня для игроков в любой точке мира**.

Глобальное покрытие серверов и интернета (не только у Edgegap) ограничено из-за таких факторов, как:

* **доступность инфраструктуры** — качество интернет-соединения в данном регионе может быть недостаточным,
* **природные факторы** — высокосложные серверные стойки требуют в основном стабильной среды.

#### Высокая доступность

Доступность серверов в различных локациях по всему миру будет меняться со временем, несколько раз в течение дня. Edgegap автоматически **масштабирует вверх/вниз** локации **по требованию**, учитывая:

* **всплески трафика** — развертывания, выполненные в течение 15-минутного периода,
* **требования к vCPU** — больше vCPU на развертывание увеличивает общий спрос на конкретную локацию,
* **предложения провайдера** — в некоторых удалённых локациях доступно меньше вариантов провайдеров,
* **доступность машин** — некоторые локации могут предлагать только машины с 4 vCPU или 8 vCPU,
* **запросы студии** для тестирования, контроля качества, раннего доступа, закрытых бета-версий или турниров.

Все запросы на развертывание приложений объединяются для оценки спроса на локацию. По умолчанию всем организациям назначается равный приоритет распределения, с **возможностью добавлять частные пулы серверов для корпоративных клиентов, которым требуется определённое оборудование или локации**.

{% hint style="success" %}
Пожалуйста, **свяжитесь с нами, чтобы спланировать релиз**, или если у вас есть какие-либо запросы относительно доступности локаций.
{% endhint %}

#### Разрешение проблем игроков

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

При устранении неполадок по сообщениям игроков или инцидентам учитывайте факторы:

* **качество подбора матчей** — игроки должны быть близко друг к другу (в одном регионе) для [#server-placement](#server-placement "mention") чтобы дать наилучшие результаты:
  * см. [Подбор соперников](/ru/learn/podbor-sopernikov.md) и [Пинг-маяки](/ru/learn/orkestraciya/ping-beacons.md) с нашими рекомендациями,
  * см. [Подробный обзор](/ru/learn/podbor-sopernikov/matchmaker-in-depth.md#player-tracing) чтобы узнать, как находить серверные логи, связанные с сообщениями игроков,
* **региональные проблемы:**
  * локальные провайдеры интернета (ISP) могут временно устранять инцидент,
  * некоторые регионы (например, Китай, Россия) могут быть ограничены из-за локализованных санкций,
* **уровень кэширования** — Edgegap будет отдавать приоритет быстрым развертываниям в кэшированных локациях:
  * [включите кэширование, чтобы развернуть ваши серверы за считанные секунды](/ru/learn/orkestraciya/application-and-versions.md#other-parameters-optional),
* **максимальное время развертывания** — развертывания могут не удаться из-за медленного и тяжёлого процесса инициализации:
  * см. [Приложения и версии](/ru/learn/orkestraciya/application-and-versions.md#safety-guardrails) чтобы увеличить период ожидания,
  * откладывайте шаги инициализации до тех пор, пока они действительно не понадобятся,
* **проблемы с образом сервера или интеграцией**.

{% hint style="success" %}
**Отображайте ID развертываний в UI истории матчей клиента** чтобы отслеживать сообщения игроков при устранении неполадок.
{% endhint %}

{% hint style="info" %}
Информируйте пользователей о массовых ошибках, временных проблемах и сбоях, чтобы смягчить негативный настрой.
{% endhint %}

## 🔄 Жизненный цикл развертывания

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

#### 1. Запуск развертывания

Развертывание для **целей тестирования** может быть запущено с помощью:

* [Unreal Engine](/ru/unreal-engine.md) — Docker Extension или плагина для проектов Unreal Engine,
* [Unity](/ru/unity.md) — плагина для проектов Unity,
* [Dashboard Web UI](https://app.edgegap.com/deployment-management/deployments/list) — простого в использовании веб-интерфейса для тестирования интеграции сервера.

Развертывание для **рабочая производственная среда** должна запускаться с помощью:

* [Подбор соперников](/ru/learn/podbor-sopernikov.md) — находите других игроков и запускайте серверы по требованию ([#match-bound](#match-bound "mention")).
* [Браузер серверов](/ru/learn/brauzer-serverov.md) — предварительно прогревайте серверы с долгой инициализацией ([#regional-standby](#regional-standby "mention")).
* [Deploy API](https://docs.edgegap.com/api/#tag/Deployments/operation/deploy) — индивидуальная интеграция сервер-сервер (кастомное масштабирование).

{% hint style="success" %}
**Сохраните** `request_id`  **(ID развертывания) и помечайте развертывания** чтобы позже идентифицировать и устранять проблемы.
{% endhint %}

{% hint style="info" %}
При тестировании с [Deploy API](https://docs.edgegap.com/api/#tag/Deployments/operation/deploy), вы можете переопределить стандартный Dockerfile `CMD` собственной командой.
{% endhint %}

#### 2. Развертывание

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

* Телеметрия — мы измеряем сетевую отзывчивость от доступных центров обработки данных к каждому игроку,
* Развертывание — мы резервируем мощность и готовим запуск контейнера вашего сервера,
* Запуск контейнера — мы запускаем контейнер, устанавливаем зависимости и инициализируем его,
* Постобработка — мы добавляем хранилище логов, мониторинг и завершаем развертывание.

{% hint style="warning" %}
**Слишком много запросов 429** — чтобы обеспечить стабильность и предотвратить неожиданные счета, мы ограничиваем частоту запросов для вашей организации до **40 req/s**. [Свяжитесь с нами](mailto:info@edgegap.com) чтобы планировать релизы, оценивать стартовый трафик и готовиться к успеху.
{% endhint %}

#### 3. Развертывание готово

Ваш контейнер полностью инициализирован, и ваш сервер сейчас запускается. В течение нескольких секунд или минуты сервер может всё ещё инициализироваться и не отвечать на запросы игроков, пока ваш игровой движок (или пользовательская среда выполнения) не будет полностью готов принимать подключения игроков.

{% hint style="success" %}
Когда развертывание станет Ready, **повторяйте попытки подключения игрока до успеха**или до достижения заранее заданного тайм-аута клиента.
{% endhint %}

#### 4. Ошибка развертывания

Ваше развертывание может в любой момент перейти в состояние Error по непредвиденным причинам. Это более вероятно при тестировании интеграции или новых сборок сервера.

**С вас не взимается плата за развертывания в состоянии Error, которые автоматически останавливаются через 24 часа.**

Шаги по устранению неполадок:

* Проверьте статус сервиса Edgegap через [нашу страницу мониторинга доступности](https://status.edgegap.com/).
* Попробуйте локально протестировать контейнер вашего сервера с помощью Docker Desktop, чтобы исключить проблемы Edgegap.

{% hint style="success" %}
**Когда вы просите о помощи,** **укажите ID развертывания и любые полезные подробности** чтобы мы могли оперативно провести расследование!
{% endhint %}

#### 5. Развертывание остановлено

**Мы никогда не останавливаем ваши серверы без вашего указания**, чтобы не ухудшать опыт ваших игроков. Ваше развертывание может быть остановлено по следующим причинам:

* **Самоостановка через** [**DELETE\_URL**](/ru/learn/orkestraciya/deployments.md#injected-environment-variables) — развертывание остановилось само после ухода игроков и завершения матча,
  * см. [Unreal Engine](/ru/unreal-engine.md#stop-deployments) и [Unity](/ru/unity.md#stop-deployments) руководства по корректной остановке развертываний,
* **Остановка из вашего бэкенда** — ваш бэкенд остановил это развертывание, используя [Deployments API](https://docs.edgegap.com/api/#tag/Deployments/operation/deployment-delete),
* **Максимальная длительность игры** — отведённое время в вашем [Приложения и версии](/ru/learn/orkestraciya/application-and-versions.md#safety-guardrails) истекло,
* [Частные парки](/ru/learn/orkestraciya/chastnye-parki.md) Хост, на котором работало ваше развертывание, был удалён в рамках запланированного действия.

{% hint style="info" %}
После остановки развертывания, **мы запускаем корректное завершение** отправляя `сигнал SIGTERM` основному процессу, предоставляя короткий период на завершение. После его истечения отправляется сигнал `SIGKILL` для остановки развертывания.
{% endhint %}

## 👀 Наблюдаемость

Позвольте игровым серверам взаимодействовать с третьими сторонами и получать эксплуатационные данные.

### Обнаруживаемость

После перехода в Ready развертыванию назначается URL ([fqdn](https://en.wikipedia.org/wiki/Fully_qualified_domain_name)) и внешний порт для каждого внутреннего порта.

{% hint style="success" %}
Используйте **теги развертывания (до 40 символов), чтобы легко помечать ваши развертывания** и [#filter-deployments](#filter-deployments "mention").
{% endhint %}

{% hint style="info" %}
**Исходящий трафик (к клиентам или бэкенду) от ваших игровых серверов никогда не блокируется** и не фильтруется.
{% endhint %}

#### **WebSocket (WS) и защищённые WebSocket (WSS)**

Чтобы использовать netcode на основе websocket с Edgegap, у вас есть два варианта:

* **управляемый сертификат**, настраиваемый за 1 минуту без написания кода:
  * настройте ваш [Приложения и версии](/ru/learn/orkestraciya/application-and-versions.md) на **используйте Websocket (WS) и включите TLS Upgrade,**
  * используйте URL Edgegap для подключения клиентов (например, `https://5fa53fa00a57.pr.edgegap.net/`)
* **самостоятельно управляемый сертификат**, если вы хотите использовать собственный пользовательский домен:
  * настройте ваш [Приложения и версии](/ru/learn/orkestraciya/application-and-versions.md) на **используйте Secure Websocket (WSS)**,
  * настройте собственный поток TLS-сертификата с пользовательской DNS-записью (например, в [Cloudflare](https://www.cloudflare.com/application-services/products/ssl/)).

{% hint style="danger" %}
Необработанные исключения сервера приведут к перезапуску контейнера развертывания и сделают TLS-безопасность недействительной. В таком случае, [остановите ваш сервер](#id-5.-deployment-stopped) и [переназначьте игроков на новое развертывание](/ru/learn/podbor-sopernikov.md#custom-lobby). [Состояние сервера может быть потеряно](/ru/learn/orkestraciya/postoyanstvo.md#state-management).
{% endhint %}

### Внедряемые переменные <a href="#injected-environment-variables" id="injected-environment-variables"></a>

Игровым серверам часто требуется дополнительная информация, такая как IP сервера, значения внутренних портов или иное. Внедрение переменных среды только для чтения — это надёжный и не зависящий от облака способ передачи параметров.

{% hint style="success" %}
Получайте значения переменных с помощью [GetEnvironmentVariable в C#](https://learn.microsoft.com/en-us/dotnet/api/system.environment.getenvironmentvariable?view=net-8.0) или [GetEnvironmentVariable в C++](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Core/GenericPlatform/FGenericPlatformMisc/GetEnvironmentVariable).
{% endhint %}

{% hint style="info" %}
См. [Переменные версии приложения](/ru/learn/orkestraciya/application-and-versions.md#injected-variables) и [Переменные матчмейкера](/ru/learn/podbor-sopernikov/matchmaker-in-depth.md#injected-variables) в дополнение к переменным развертывания ниже.
{% endhint %}

#### **Пользовательские переменные**

Определите до 20 пользовательских переменных для каждого развертывания, каждая из которых может содержать до 4 КБ строковых данных.

{% hint style="warning" %}
**Избегайте использования зарезервированных имён (ниже), иначе ваши пользовательские переменные будут перезаписаны!**
{% endhint %}

Получайте доступ к важной информации, читая переменные, внедрённые Edgegap в ваши серверы:

#### **Идентификаторы**

* **`ARBITRIUM_REQUEST_ID`**  — например `f68e011bfb01` .
  * Уникальный ID развертывания, также называемый request ID. Используется для получения дополнительной информации.
  * URL развертываний всегда имеют формат `{ARBITRIUM_REQUEST_ID}.pr.edgegap.net`.
* **`ARBITRIUM_PUBLIC_IP`**  — например `162.254.141.66` .
  * Публичный IP-адрес этого хоста, может использоваться для подключения вместо URL.
* **`ARBITRIUM_HOST_ID`**  — например `alpha-north-america-70364ef8` .
  * Уникальный идентификатор машины, на которой размещено ваше развертывание, общий с другими развертываниями.
* **`ARBITRIUM_DEPLOYMENT_TAGS`**  — например `tag1,tag2` .
  * Пользовательские теги развертывания, разделённые запятыми, [полезны для простого поиска и фильтрации](#filter-deployments).
* **`ARBITRIUM_PRIVATE_FLEET_ID`** — например `PUBLIC_CLOUD` , или ID парка, если размещено на [Частные парки](/ru/learn/orkestraciya/chastnye-parki.md).

#### Спецификации ресурсов

* **`ARBITRIUM_HOST_IN_PRIVATE_FLEET`** — например `false` , указывает, размещено ли на [Частные парки](/ru/learn/orkestraciya/chastnye-parki.md).
* **`ARBITRIUM_HOST_BASE_CLOCK_FREQUENCY`**  — например `2000` , частота процессора в МГц.
* **`ARBITRIUM_DEPLOYMENT_VCPU_UNITS`**  — например `256`, выделенные единицы vCPU (1024 = 1 vCPU).
* **`ARBITRIUM_DEPLOYMENT_MEMORY_MB`**  — например `512`, выделенная RAM в МБ (1024 = 1 ГБ).

#### **Управление жизненным циклом**

* **`ARBITRIUM_DELETE_URL`**  — например `https://api.edgegap.com/v1/self/stop/9f511e17/660`.
  * Вызывается из развертывания, [развертывание будет корректно остановлено](#id-5.-deployment-stopped).
  * Требуется уникальный одноразовый `ARBITRIUM_DELETE_TOKEN` в `Authorization` заголовке.
* **`ARBITRIUM_DELETE_TOKEN`**  — например `7df4cd933df87084b34ae80d8abde293`.
* **`ARBITRIUM_CONTEXT_URL`**  — например `https://api.edgegap.com/v1/context/9170f5211e17/17`.
  * Вызывается только из развертывания, возвращает больше сведений о развертывании.
  * Требуется уникальный `ARBITRIUM_CONTEXT_TOKEN` в `Authorization` заголовке.
* **`ARBITRIUM_CONTEXT_TOKEN`**  — например `dfaf50b9333b9ee07b22ed247e4a17e6`.

#### **Обнаруживаемость**

* **`ARBITRIUM_PORT_GAMEPORT_INTERNAL`**  — например `7777` , внутренний порт для слушателя сервера.
* **`ARBITRIUM_PORT_GAMEPORT_EXTERNAL`**  — например `31504` , внешний порт для подключений клиентов.
  * Значения внешних портов случайным образом назначаются для каждого развертывания в целях безопасности.
* **`ARBITRIUM_PORT_GAMEPORT_PROTOCOL`**  — например `UDP` , протокол вашего netcode-транспорта.

{% hint style="success" %}
Примеры предполагают, что вы назвали свой порт `gameport` (по умолчанию). **Каждый порт добавляет дополнительный набор очищенных** [Приложения и версии](/ru/learn/orkestraciya/application-and-versions.md#port-mapping) **переменных:** `@Super Port!` ⇒ `ARBITRIUM_PORT_SUPER_PORT_INTERNAL` .
{% endhint %}

* **`ARBITRIUM_BEACON_ENABLED`**  — например `true`, если выполняется развертывание на [Частные парки](/ru/learn/orkestraciya/chastnye-parki.md) с [Пинг-маяки](/ru/learn/orkestraciya/ping-beacons.md).
* **`ARBITRIUM_HOST_BEACON_PUBLIC_IP`**  — например `139.177.198.69` , публичный IP ближайшего beacon.
* **`ARBITRIUM_HOST_BEACON_PORT_UDP_EXTERNAL`**  — например `30199`, для измерения пинга по UDP.
* **`ARBITRIUM_HOST_BEACON_PORT_TCP_EXTERNAL`**  — например `30456`, для измерения пинга по TCP.

#### **Структурированная информация (JSON как строка)**

{% hint style="info" %}
Переменные среды **хранятся как JSON-строки**, парсите их с помощью SDK или пользовательского метода.
{% endhint %}

<details>

<summary><strong>ARBITRIUM_DEPLOYMENT_LOCATION</strong>:<br>- Подробная информация о локации развертывания.</summary>

```json
ARBITRIUM_DEPLOYMENT_LOCATION="{
  "city": "Montreal",
  "country": "Canada",
  "continent": "North America",
  "administrative_division": "Quebec",
  "timezone": "Eastern Time",
  "latitude": 45.513707,
  "долгота": -73.619073
}"
```

</details>

<details>

<summary><strong>ARBITRIUM_PORTS_MAPPING</strong>:<br>- Подробная информация о ваших внутренних и внешних портах.</summary>

```json
ARBITRIUM_PORTS_MAPPING="{
  "ports": {
    "gameport": {
      "name": "Игровой порт",
      "internal": 7777,
      "external": 31504,
      "protocol": "UDP"
    },
    "webport": {
      "name": "Веб-порт",
      "internal": 8888,
      "external": 31553,
      "protocol": "TCP"
    }
  }
}"
```

</details>

### Мониторинг панели управления

Наш [Панель управления](https://app.edgegap.com/) предоставляет инструменты для мониторинга масштабируемости вашего сервера и помогает в эксплуатации.

#### Аналитика

{% hint style="success" %}
Найдите [аналитические панели в боковом меню](https://app.edgegap.com/analytics/dashboards/list) в категории Server Hosting & Orchestration.
{% endhint %}

:star2: [**Перейдите на тариф Pay as You Go**](https://app.edgegap.com/user-settings?tab=memberships) **чтобы открыть подробные метрики и сведения о производительности сервера:**

* **Общие сведения:** отслеживайте релизы с количеством живых серверов по версиям + обзор использования ресурсов,
* **Сведения о CPU**: устраняйте неполадки на серверах с задержками из-за ресурсоёмких операций процессора,
* **Сведения о памяти**: предотвращайте перезапуски сервера из-за превышения выделенной памяти,
* **Сведения о сети:** выявляйте неэффективные сетевые шаблоны и оптимизируйте netcode.

<figure><img src="/files/da67a5f6cdd190bd351ecf9649be750397d1a88b" alt=""><figcaption></figcaption></figure>

#### Карта развертывания

{% hint style="success" %}
Найдите карту развертывания в [на странице деталей вашего развертывания в Dashboard](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

Просматривайте на карте местоположение развертывания, доступные локации и предполагаемые местоположения игроков:

<figure><img src="/files/021af5f7e77836de2bd3d761e20d0711fd329b56" alt=""><figcaption></figcaption></figure>

#### Точки баланса развертывания

{% hint style="success" %}
Найдите тепловую карту точек баланса развертывания в [на странице деталей вашего приложения в Dashboard](https://app.edgegap.com/application-management/applications/list).
{% endhint %}

Просматривайте тепловую карту точек баланса развертывания и фильтруйте по [Приложения и версии](/ru/learn/orkestraciya/application-and-versions.md). Точки баланса — это приблизительные локации с одинаковой сетевой близостью к каждому игроку в данном развертывании:

<figure><img src="/files/7caa8210bafb4d800df3d1d148f0474ddcdc1443" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Горячие точки баланса в странных местах (например, Гренландия) указывают на подбор игроков, находящихся далеко друг от друга. Узнайте о [#connection-quality](#connection-quality "mention") и [Пинг-маяки](/ru/learn/orkestraciya/ping-beacons.md) чтобы оптимизировать подбор игроков.
{% endhint %}

#### Журналы развертывания

{% hint style="success" %}
Найдите журналы развертывания в [на странице деталей вашего развертывания в Dashboard](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

Журналы развертывания отображают информацию о [#deployment-lifecycle](#deployment-lifecycle "mention"):

<figure><img src="/files/6ac56fa110690ece4780520fbd25e588b973d0bc" alt=""><figcaption></figcaption></figure>

#### Журналы контейнера

{% hint style="success" %}
Найдите журналы контейнера в [на странице деталей вашего развертывания в Dashboard](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

Проверяйте журналы вашего игрового сервера в случае проблем или при отладке:

<figure><img src="/files/5ea4d78bef957a3f537e1a3030a1646fa43a0142" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**После остановки развертывания журналы контейнера удаляются.** Настройте [стороннее S3-хранилище журналов](/ru/docs/endpoint-storage.md) для сохранения журналов.
{% endhint %}

#### Метрики контейнера

{% hint style="success" %}
Найдите метрики контейнера в [на странице деталей вашего развертывания в Dashboard](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

Изучайте метрики контейнера (процессор, память, сеть), чтобы:

* выявлять распространённые проблемы с подключением, когда [#troubleshooting](#troubleshooting "mention"),
* обнаруживать неэффективные шаблоны реализации, вызывающие всплески использования ресурсов,
* точно определять неэффективное использование ресурсов в конкретных сценариях,
* проверять изменения в использовании ресурсов вашего сервера во время оптимизации,
* сравнивать потребление ресурсов и длительность инициализации вашего сервера.

Исторические метрики показывают средние значения за интервал в 1 минуту и доступны на бесплатном тарифе.

:star2: [**Перейдите на тариф Pay as You Go**](https://app.edgegap.com/user-settings?tab=memberships) **чтобы открыть точные метрики с интервалом в 1 секунду.**

<figure><img src="/files/897aa5e140edcac6ce257a401b101dcefd019ab0" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
[Свяжитесь с нами](mailto:info@edgegap.com) до вашего релиза, чтобы запросить поддержку живого хостинга для крупных релизов.
{% endhint %}

### Контекст и статус

Дополнительную информацию о развертывании можно получить в формате JSON:

* изнутри развертывания (игрового сервера), используя [API контекста развертывания](https://docs.edgegap.com/api/#tag/Context/operation/context-get),
* извне развертывания (бэкенд / сторонний сервис), используя [API статуса развертывания](https://docs.edgegap.com/api/#tag/Deployments/operation/deployment-status-get).

{% hint style="info" %}
API контекста (из развертывания) требует токен Context API, тогда как API статуса использует ваш токен Edgegap.
{% endhint %}

{% hint style="danger" %}
**Слишком много запросов 429 - API Context и Status ограничены до 20 запросов/с на организацию.**
{% endhint %}

{% hint style="success" %}
**Используйте** [#webhooks](#webhooks "mention") **для автоматизаций (кастомного матчмейкинга), чтобы избежать ограничения частоты запросов и обеспечить масштабируемость.** API Context и Status предназначены только для разработки, QA и целей эксплуатации по устранению неполадок.
{% endhint %}

### Фильтр развертываний

Чтобы быстро искать среди всех развертываний, вы можете [использовать нашу панель управления](https://app.edgegap.com/deployment-management/deployments/list):

<figure><img src="/files/27bbc929e7ba07ce4d76c565e02c162f9485c167" alt=""><figcaption></figcaption></figure>

[список развертываний с API](https://docs.edgegap.com/api/#tag/Deployments/operation/deployments-get) и применять фильтры через бэкенд-интеграции:

<table><thead><tr><th width="237">Атрибут развертывания</th><th width="193">Операторы</th><th>Пример значения</th></tr></thead><tbody><tr><td><a href="/pages/4ad5d792bc82dceeaec6d7dd56165ae188da0417#deployment-lifecycle"><code>status</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  или <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"ready"</code> или <code>"error"</code></td></tr><tr><td><a href="#observability"><code>request_id</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a> </td><td><a data-footnote-ref href="#user-content-fn-4"><code>"7e709a0d8efd"</code></a></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>в</code></a>  или <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><a data-footnote-ref href="#user-content-fn-4"><code>[ "7e709a0d8efd", "4ba353100b4b" ]</code></a></td></tr><tr><td><a href="#discoverability"><code>теги</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  или <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"tagA"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>в</code></a>  или <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "tagA", "tagB" ]</code></td></tr><tr><td><a href="#id-1.-start-a-deployment"><code>created_at</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  или <a data-footnote-ref href="#user-content-fn-7"><code>lte</code></a>  или <a data-footnote-ref href="#user-content-fn-8"><code>gte</code></a></td><td><a href="https://en.wikipedia.org/wiki/ISO_8601"><code>2025-05-12T20:03:20Z</code></a></td></tr><tr><td><a href="/pages/f5cb6455be5c828fac78fc0c2b164c4b4cbd9c16"><code>приложение</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  или <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"my-app"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>в</code></a>  или <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "my-app", "my-other-app" ]</code></td></tr><tr><td><a href="/pages/f5cb6455be5c828fac78fc0c2b164c4b4cbd9c16"><code>версия</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  или <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"1.0.0"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-9"><code>в</code></a>  или <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "1.0.0", "prod" ]</code></td></tr><tr><td><a href="/pages/29817f7f12eb7460eb5569ee2fce1cd1a966d23d"><code>fleet_name</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  или <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"my-app-fleet-europe"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>в</code></a>  или <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "fleet-eu", "fleet-us" ]</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-10"><code>ilike</code></a></td><td><code>"%-eu%"</code></td></tr><tr><td><a href="/pages/29817f7f12eb7460eb5569ee2fce1cd1a966d23d"><code>host_name</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  или <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"alpha-north-america-95fab093"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>в</code></a>  или <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "alpha-north-america-95fab093" ]</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-10"><code>ilike</code></a></td><td><code>"%north-america%"</code></td></tr></tbody></table>

{% hint style="info" %}
Каждый атрибут может иметь не более 1 оператора фильтра в одном запросе. См. [Справочник API](/ru/docs/api.md) для подробностей.
{% endhint %}

Сортируйте результаты по нескольким полям в порядке их появления в запросе:

| Атрибут развертывания                                                                  | Порядок                                                                  |
| -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| [`created_at`](#id-1.-start-a-deployment)                                              | [`asc`](#user-content-fn-11)[^11] или [`desc`](#user-content-fn-12)[^12] |
| [`available_session_sockets`](broken://pages/af47f00633ef43a181ec41a0562bbc4e007a3046) | [`asc`](#user-content-fn-13)[^13] или [`desc`](#user-content-fn-14)[^14] |

Примеры запросов с фильтрами:

<details>

<summary>Список <a href="#id-4.-deployment-error">Развертывания с ошибкой</a> для устранения неполадок и удаления.</summary>

Закодированный URL:

```
https://api.edgegap.com/v1/deployments?query={"filters":[{"field":"status","operator":"eq","value":"error"},{"field":"application","operator":"eq","value":"my-app"},{"field":"version","operator":"eq","value":"green"}],"order_by":[{"field":"created_at","order":"desc"}]}
```

Отформатированный JSON-запрос:

```json
{
  "filters": [
    {
      "field": "status",
      "operator": "eq",
      "value": "error"
    },
    {
      "field": "application",
      "operator": "eq",
      "value": "my-app"
    },
    {
      "field": "version",
      "operator": "eq",
      "value": "green"
    }
  ],
  "order_by": [
    {
      "field": "created_at",
      "order": "desc"
    }
  ]
}
```

</details>

<details>

<summary>Список <a href="/pages/4ee817820b702f68c6cecc5b9b02c79aa0da8963#rolling-updates-and-ab-tests">Развертывания с устаревшей версией приложения</a> чтобы подтвердить, что релиз завершён.</summary>

Закодированный URL:

```
https://api.edgegap.com/v1/deployments?query={"filters":[{"field":"status","operator":"eq","value":"ready"},{"field":"application","operator":"eq","value":"my-app"},{"field":"version","operator":"eq","value":"blue"}],"order_by":[{"field":"created_at","order":"desc"}]}
```

Отформатированный JSON-запрос:

```json
{
  "filters": [
    {
      "field": "status",
      "operator": "eq",
      "value": "ready"
    },
    {
      "field": "application",
      "operator": "eq",
      "value": "my-app"
    },
    {
      "field": "version",
      "operator": "eq",
      "value": "blue"
    }
  ],
  "order_by": [
    {
      "field": "created_at",
      "order": "desc"
    }
  ]
}
```

</details>

{% hint style="success" %}
Не забудьте добавить `Authorization` заголовок с вашим токеном API Edgegap в запрос.
{% endhint %}

### Вебхуки

Получайте простые HTTP-уведомления в бэкенд вашей игры об изменениях в [#deployment-lifecycle](#deployment-lifecycle "mention") указав URL вебхука в вашем [запросе к API развертывания](/ru/docs/api/vydelennye-servery.md#post-deployments). Доступно для:

* При Ready: контейнер развертывания [успешно запущен](#id-1.-start-a-deployment) (после этого сервер начинает инициализацию),
* При Error: развертывание не удалось запустить и произошла [#id-4.-deployment-error](#id-4.-deployment-error "mention") ошибка,
* При Terminate: [#id-5.-deployment-stopped](#id-5.-deployment-stopped "mention") и игровой сервер больше недоступен.

Вебхуки Ready и Error никогда не будут сработаны для одного и того же развертывания.

<details>

<summary>Пример полезной нагрузки вебхука</summary>

```json
{
  "request_id": "f68e011bfb01",
  "application": "my-game-server",
  "version": "2024.01.30-16.23.00-UTC",
  "fqdn": "f68e011bfb01.pr.edgegap.net",
  "public_ip": "162.254.141.66",
  "deployed_at": "2026-02-10T20:35:48Z",
  "termination_scheduled_at": "2026-02-10T21:35:48Z",
  "ports": {
    "gameport": {
      "external": 31504,
      "internal": 7777,
      "protocol": "UDP",
      "name": "gameport",
      "tls_upgrade": false,
      "link": "f68e011bfb01.pr.edgegap.net:31504",
      "proxy": null
    }
  },
  "location": {
    "city": "Montreal",
    "country": "Canada",
    "continent": "North America",
    "administrative_division": "Quebec",
    "timezone": "Eastern Time",
    "latitude": 45.513707,
    "долгота": -73.619073
  },
  "tags": [
    "tag1",
    "tag2"
  ],
  "host_id": "alpha-north-america-70364ef8",
  "host_in_private_fleet": false,
  "private_fleet_id": "PUBLIC_CLOUD",
  "vcpu_units": 256,
  "memory_mib": 512
}
```

</details>

{% hint style="warning" %}
**Вебхуки не повторяются**, поэтому если ваш бэкенд не обработает запрос из-за ограничения частоты или ошибки, вебхук может быть потерян. Используйте вебхуки только для **некритичных сценариев или целей отладки**.
{% endhint %}

{% hint style="info" %}
Вебхуки отслеживают жизненный цикл развертывания, но не знают о состоянии инициализации вашей сцены/уровня. Чтобы отслеживать прогресс загрузки вашей сцены/уровня, реализуйте пользовательский вебхук на вашем игровом сервере.
{% endhint %}

## 🚨 Устранение неполадок

При устранении неполадок развертываний:

1. проверьте, что нет ошибок в вашем [#deployment-logs](#deployment-logs "mention") и [#container-logs](#container-logs "mention"),
2. запустите ваш сервер локально, чтобы исключить ошибки интеграции,
3. изучите шаги по устранению неполадок на этой странице,
4. свяжитесь с нами в [Community Discord](https://discord.gg/MmJf8fWjnt) и укажите ID вашего развертывания.

{% hint style="info" %}
См. [#player-issue-resolution](#player-issue-resolution "mention") наши рекомендации по работе с отзывами сообщества игроков.
{% endhint %}

<details>

<summary>Не удаётся подключить клиентов к серверу - <code>Время ожидания запроса истекло.</code>, <code>Тайм-аут запроса</code> , <code>ConnectionFailed</code> , или <code>Проверка порта не удалась</code>.</summary>

* Сначала убедитесь, что развертывание имеет статус Ready, и что в журнале развертывания нет исключений или ошибок во время выполнения. Если ваше развертывание остановилось, проверьте журналы в нашем [Панель управления](https://app.edgegap.com/deployment-management/deployments/list).
* Если вы используете netcode Mirror, вам нужно, чтобы ["Auto Start Server”](https://mirror-networking.gitbook.io/docs/hosting/edgegap-hosting-plugin-guide#build-and-push) было выбрано в вашем `NetworkManager` , затем пересоберите, отправьте и повторно разверните сервер.
* Если вы используете netcode FishNet, вам нужно включить [“Start on Headless”](https://fish-networking.gitbook.io/docs/manual/components/managers/server-manager#settings-are-general-settings-related-to-the-servermanager) в вашем `ServerManager`, затем пересоберите, отправьте и повторно разверните сервер.
* Если вы используете netcode Photon Fusion 2, убедитесь, что ваш сервер передаёт публичный IP развертывания, внешний порт и `roomCode` на сервере, а на клиенте — тот же код комнаты в [“NeworkRunner.StartGame”](https://doc.photonengine.com/fusion/current/manual/network-runner#creating-or-joining-a-room) параметре `StartGameArgs`. ID развертывания (например `b63e6003b19f`) — отличный выбор, поскольку он глобально уникален и легко доступен клиенту через [Матчмейкер](/ru/learn/podbor-sopernikov/matchmaker-in-depth.md) назначение и для [Подробный обзор](/ru/learn/podbor-sopernikov/matchmaker-in-depth.md#injected-environment-variables).
* Далее, пожалуйста, убедитесь, что настройка порта в параметрах netcode вашей сборки сервера совпадает с внутренним портом в вашем [версии приложения](https://app.edgegap.com/application-management/applications/list). Вы можете изменить сопоставление портов, отредактировав [версии приложения](https://app.edgegap.com/application-management/applications/list) без пересборки. Найдите ваш протокол в интеграции netcode.
* Пожалуйста, убедитесь, что ваш игровой клиент подключается к **внешнему порту** указанному на странице деталей вашего развертывания; это значение всегда будет случайным по соображениям безопасности.
* Если вы используете протокол Secure Websocket (WSS) в вашей интеграции netcode, убедитесь, что в [версии приложения](https://app.edgegap.com/application-management/applications/list) конфигурации порта для WSS включено TLS Upgrade.
* Вы находитесь в Китае и используете [Smart Fleets](https://docs.edgegap.com/docs/deployment/session/fleet-manager/fleet)? Ваше соединение может быть заблокировано Великим китайским файрволом. Рассмотрите возможность добавить в ваш флот сервер, расположенный в Китае, или использовать VPN для подключения.

</details>

<details>

<summary>Моё развертывание остановилось/перезапустилось, и я больше не могу получить доступ к его журналам.</summary>

* Если процесс сервера аварийно завершится из-за исключения, наша система попытается автоматически перезапустить сервер. Рекомендуем протестировать ваш сервер локально, чтобы найти первопричину.
* Мы храним журналы только на время развертывания; если вы хотите просматривать журналы после остановки развертывания, пожалуйста [интегрируйте стороннее хранилище журналов](https://docs.edgegap.com/docs/deployment/endpoint-storage).
* См. [#id-5.-deployment-stopped](#id-5.-deployment-stopped "mention") чтобы выяснить все причины остановки вашего развертывания.

</details>

<details>

<summary>Моё развертывание автоматически остановилось через X минут.</summary>

* Развертывания на бесплатном тарифе имеют лимит в 60 минут, пожалуйста, рассмотрите возможность обновить аккаунт.
* Все развертывания будут завершены через 24 часа работы в соответствии с нашей политикой очистки серверов, для обслуживания инфраструктуры и чтобы предотвратить непредвиденные расходы, если развертывание не было корректно остановлено. Для долго работающих серверов рассмотрите использование [Частные парки](/ru/learn/orkestraciya/chastnye-parki.md) с [Постоянство](/ru/learn/orkestraciya/postoyanstvo.md).
* См. [#id-5.-deployment-stopped](#id-5.-deployment-stopped "mention") чтобы выяснить все причины остановки вашего развертывания.

</details>

<details>

<summary>Моё развертывание готово, но я не могу подключиться в течение нескольких минут после этого.</summary>

* Как только развертывание становится Ready, начинается инициализация игрового движка. Этот процесс может занять от нескольких секунд до нескольких минут, и в этот период сервер не принимает подключения игроков.
* Рассмотрите возможность оптимизации инициализации вашего сервера, чтобы сократить это время.
* Игровые клиенты должны повторять попытку подключения с интервалом в 1 секунду в течение ограниченного времени (в зависимости от длительности инициализации), после чего они возвращаются к матчмейкингу.
* Рассмотрите возможность добавления загрузочного экрана, чтобы сервер мог выполнять инициализацию (а в случае Unreal Engine — и переход) одновременно с клиентами, синхронизируя состояние обоих.

</details>

<details>

<summary>Моё устройство Meta Quest выдаёт <code>HTTP 0: Не удаётся разрешить хост назначения</code> .</summary>

* При сборке приложений Unity для Android ваше разрешение на доступ к Интернету может автоматически удаляться из выходного APK-артефакта клиента.
* Снова добавьте разрешения в (после этого потребуется пересобрать клиент):
  * Project Settings / OpenXR / :gear: Meta Quest Support / Force Remove Internet Permissions (снимите галочку).
  * Player Settings / Internet Access (установите require).

</details>

<details>

<summary>Что произойдёт, если игрок покинет моё развертывание?</summary>

* По умолчанию серверы не отклоняют подключения игроков. Аутентификация игроков — задача ваших разработчиков, поскольку можно использовать множество различных методов и провайдеров аутентификации игроков.
* Игровые клиенты могут хранить информацию о подключении локально, чтобы попытаться переподключиться в случае неожиданных сбоев клиента.
* Чтобы позволить игрокам присоединяться к уже идущим играм, рассмотрите использование [Подробный обзор](/ru/learn/podbor-sopernikov/matchmaker-in-depth.md#backfill) или [Сессии](https://docs.edgegap.com/docs/deployment/session).

</details>

<details>

<summary>После перехода в состояние Ready мой сервер показывает загрузку CPU 100%.</summary>

* Это может не быть проблемой, поскольку игровые движки часто выполняют ресурсоёмкие операции CPU во время инициализации сервера. Если загрузка CPU не снижается через 2–3 минуты после запуска развертывания, возможно, вам нужно оптимизировать сервер или увеличить ресурсы версии приложения.
* Снижение частоты тиков может влиять на использование CPU, поскольку сервер выполняет меньше операций обмена сообщениями.
* Если вы используете netcode Mirror, вам нужно, чтобы ["Auto Start Server”](https://mirror-networking.gitbook.io/docs/hosting/edgegap-hosting-plugin-guide#build-and-push) было выбрано в вашем `NetworkManager` , затем пересоберите, отправьте и повторно разверните сервер.
* Если вы используете netcode FishNet, вам нужно включить [“Start on Headless”](https://fish-networking.gitbook.io/docs/manual/components/managers/server-manager#settings-are-general-settings-related-to-the-servermanager) в вашем `ServerManager`, затем пересоберите, отправьте и повторно разверните сервер.
* В бесплатном тарифе вам доступно только 1,5 vCPU и 3 ГБ памяти (RAM).
* Вы можете увеличить выделенные ресурсы при создании новой версии приложения. Вы можете дублировать версию вашего приложения в нашей панели управления и при необходимости изменить эти значения без пересборки сервера или образа.

</details>

<details>

<summary>Моё развертывание постоянно перезапускается и показывает ошибку `OOM kill` .</summary>

* Такое поведение вызвано превышением выделенного объёма памяти. Рассмотрите оптимизацию использования памяти с помощью object pooling, сжатия или удаления ненужных объектов в вашей сцене.
* Убедитесь, что ваш проект загружает сцену по умолчанию, содержащую ваш `NetworkManager` и что сцена включена в Build Settings Unity.
* В бесплатном тарифе вам доступно только 1,5 vCPU и 3 ГБ памяти (RAM).
* Вы можете увеличить выделенные ресурсы при создании новой версии приложения. Вы можете дублировать версию вашего приложения в нашей панели управления и при необходимости изменить эти значения без пересборки сервера или образа.

</details>

<details>

<summary>Иногда использование памяти (RAM) моего сервера резко возрастает до высокого значения — это проблема?</summary>

* Пока вы укладываетесь в выделённый объём памяти версии приложения, это не проблема.&#x20;
* Превышение выделенного объёма памяти версии приложения приведёт к \`OOM kill\` (см. выше).

</details>

<details>

<summary>Будет ли производительность моего сервера ухудшаться из-за других серверов, работающих на той же машине?</summary>

* Нет, наша платформа гарантирует, что выделенные ресурсы не будут использоваться другими студиями или другими серверами на общей инфраструктуре. С Edgegap у вас нет шумных соседей.

</details>

[^1]: сессии могут длиться до 24 часов

[^2]: равно

[^3]: не равно

[^4]: request\_id (ID развертывания)

[^5]: в массиве

[^6]: не в массиве

[^7]: меньше или равно

[^8]: больше или равно

[^9]: &#x20;в массиве

[^10]: сопоставление шаблонов без учёта регистра:

    * используйте `%`  для любой последовательности
    * используйте `_`  для любого одного символа

[^11]: по возрастанию, сначала самые старые

[^12]: по убыванию, сначала самые новые

[^13]: по возрастанию, сначала заполненные

[^14]: по убыванию, сначала пустые


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.edgegap.com/ru/learn/orkestraciya/deployments.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
