> For the complete documentation index, see [llms.txt](https://docs.edgegap.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.edgegap.com/ru/learn/orkestraciya/deployments.md).

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

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

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

Запускайте новые серверы за считанные секунды, чтобы удовлетворять потребности в мощности с нашим облачным edge-подходом к вычислениям. Мы относимся к серверам как к [скоту, а не домашним питомцам](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 %}

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

### Привязанные к матчу

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

Сессии обычно автоматизируются через [Подбор игроков](/ru/unity/podbor-igrokov.md) сервис, который разворачивает серверы точно в срок по строгим правилам и при желании позволяет заполнять уже идущие серверы, чтобы [повысить скорость заполнения матчей](https://edgegap.com/blog/how-session-fill-rate-affects-your-multiplayer-hosting-costs).

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

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

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

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

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

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

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

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

Игра с постоянным миром и социальная MMO **срок жизни сервера часто превышает отдельные сессии игроков**.

Сессии обычно назначаются через [Браузер серверов](/ru/learn/brauzer-serverov.md) по предпочтениям игроков (автоматически по региону или через пользовательский поиск), с предварительным горизонтальным масштабированием развёртывания в зависимости от региональной ёмкости.

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

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

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

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

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

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

### Peer-to-peer

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

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

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

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

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

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

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

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

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

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

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

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

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

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FjiPRa6gGEku2oGm3qW5s%2Fimage.png?alt=media&amp;token=306897d4-8ab1-4766-bc90-5d02882b573c" alt=""><figcaption></figcaption></figure>

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

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

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

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

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

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

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FNszxk3uRY78L7V6nLPlp%2Fimage.png?alt=media&amp;token=904b9b3d-7499-45d3-81c6-cc2b5cb6dd32" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FxjsD6ijYWHljBAVuV57w%2Fimage.png?alt=media&amp;token=ab477e89-4afe-4203-9b7f-b85b035dc9eb" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FQfSd4uo9twyxEWCkPLqu%2Fimage.png?alt=media&amp;token=8d3cd64b-9527-48fe-886b-96393c15449d" alt=""><figcaption></figcaption></figure>

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

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

В качестве альтернативы, **укажите желаемые координаты местоположения сервера:**

⭐ **Рекомендуется:** Найдите самый быстрый ping-маяк и отправьте его координаты или IP в поле пользователя.

⚙️ **Пользовательский**: определите регионы (с координатами) в backend вашей игры, получайте их через пользовательский API.

👉 **Проще всего для тестирования:** Определите регионы (с координатами), жёстко прописав их в dev-сборках клиента игры.

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

{% hint style="success" %}
В качестве альтернативы, позвольте игрокам **выбрать постоянный (всегда онлайн) сервер** из списка с [Браузер серверов](/ru/learn/brauzer-serverov.md).
{% endhint %}

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

Некоторые студии предпочитают фиксировать стабильные и предсказуемые локации (например, MMO с [Персистентность](/ru/learn/orkestraciya/persistentnost.md)). Рассмотрите [Браузер серверов](/ru/learn/brauzer-serverov.md) с [региональными политиками масштабирования](/ru/learn/brauzer-serverov.md#automated-scaling) и [автоматически назначаемыми резервированиями](/ru/learn/brauzer-serverov.md#auto-assigned-reservation).

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

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

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

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

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

{% hint style="info" %}
Если вам нужна помощь, [свяжитесь с нами через Discord](https://discord.gg/MmJf8fWjnt). Для поддержки по играм в реальном времени см. нашу [систему тикетов](https://edgegap.atlassian.net/servicedesk/customer/portal/3).
{% endhint %}

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

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

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

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

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

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

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

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

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

Все запросы на развёртывание приложений объединяются для оценки спроса в каждой локации. По умолчанию все организации имеют равный приоритет распределения. **У студий есть возможность добавить пользовательские** [Частные парки серверов](/ru/learn/orkestraciya/chastnye-parki-serverov.md).

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

#### Устранение проблем игроков

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

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

* **Качество матчмейкинга** - по возможности оптимизируйте подбор в пределах одного региона:
  * [Подбор игроков](/ru/learn/podbor-igrokov.md) и [Ping-маяки](/ru/learn/orkestraciya/ping-beacons.md) для наших рекомендаций,
  * [Подробный обзор](/ru/learn/podbor-igrokov/matchmaker-in-depth.md#player-tracing) чтобы найти журналы сервера, связанные с сообщениями игроков.
* **Проблемы региональных сетей и ISP:**
  * локальные интернет-провайдеры (ISP) могут временно устранять инцидент,
  * некоторые регионы (например, Китай, Россия) могут быть ограничены из-за локальных санкций.
* **Уровень кэширования** - без кэширования ваши сессии могут завершаться по тайм-ауту из-за более медленного развёртывания:
  * [включите кэширование, чтобы развёртывать серверы за считанные секунды](/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 или EGIK для проектов Unreal Engine.
* [Unity](/ru/unity.md) - плагина hosting quickstart для проектов Unity.
* [Godot](/ru/godot.md) - плагина hosting quickstart для проектов Godot.
* [Dashboard Web UI](https://app.edgegap.com/deployment-management/deployments/list) - простой веб-интерфейс для быстрого тестирования серверов и итераций.

{% hint style="warning" %}
**Ручной запуск ваших развертываний с вставкой URL и портов не подойдёт для игры в реальном времени.**
{% endhint %}

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

{% columns %}
{% column width="33.33333333333333%" %}
[Подбор игроков](/ru/learn/podbor-igrokov.md):

* Короткие раунды
* Матчи по запросу
* Рейтинговая система и/или\
  Пользовательские правила
  {% endcolumn %}

{% column width="33.33333333333333%" %}
[Браузер серверов](/ru/learn/brauzer-serverov.md):

* Постоянные или раунды
* Региональные социальные хабы
* Автоматическое назначение и/или\
  Пользовательский поиск
  {% endcolumn %}

{% column width="33.33333333333333%" %}
Собственный бэкенд:

* Миграция игр в реальном времени
* [Развёртывайте с помощью API v2](/ru/docs/api/vydelennye-servery.md)
* [Наблюдайте за вебхуками](/ru/learn/orkestraciya/deployments.md#webhooks)
  {% endcolumn %}
  {% endcolumns %}

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

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

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

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

{% hint style="success" %}
Включить [Активное кэширование в вашей версии приложения](/ru/learn/orkestraciya/application-and-versions.md#active-caching) для развертывания серверов за считанные секунды.
{% endhint %}

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

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

После того как развёртывание становится Ready, вашему движку всё ещё есть чем заняться. Движки инициализируют подсистемы и фреймворки, затем загружают ассеты, включая карты, в память. Это происходит после того, как ваше развёртывание становится Ready, и обычно занимает до 1 минуты в зависимости от степени вашей оптимизации.

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

{% hint style="danger" %}
**Обработка сбоя сервера зависит от вашей** [**политики перезапуска процесса**](/ru/learn/orkestraciya/application-and-versions.md#safety-guardrails)**.** [Состояние сервера может быть потеряно](/ru/learn/orkestraciya/persistentnost.md#state-management).
{% endhint %}

В зависимости от статуса [Приложения и версии](/ru/learn/orkestraciya/application-and-versions.md#active-caching) версии вы можете получить:

🟢 **Попадание в кэш**

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

🟡 **Тёплый старт**

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

🔴 **Промах кэша**

Кэширование включено. Развёртывание было медленнее из-за внезапного всплеска трафика до завершения распространения кэша. Включение опции «требовать кэшированные локации» в запросе на развёртывание предотвратит это, но может привести к большему числу непригодных к обработке развёртываний во время неожиданных всплесков трафика.

🔴 **Холодный старт**

Кэширование отключено. Развёртывание было медленнее, образ был загружен во время развёртывания. Включите кэширование для более быстрого развёртывания.

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

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

**За развёртывания с ошибкой плата не взимается; они автоматически останавливаются через 24 часа.**

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

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

{% hint style="info" %}
Если вам нужна помощь, [свяжитесь с нами через Discord](https://discord.gg/MmJf8fWjnt). Для поддержки по играм в реальном времени см. нашу [систему тикетов](https://edgegap.atlassian.net/servicedesk/customer/portal/3).
{% endhint %}

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

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

**Облачные развёртывания будут завершены после 24 часов работы** в соответствии с нашей политикой санитарной очистки серверов для обслуживания инфраструктуры и чтобы предотвратить накопление неожиданных расходов, когда развёртывание не было корректно остановлено из-за неожиданной ошибки.

Для долго работающих серверов свыше 24 часов рассмотрите использование [Частные парки серверов](/ru/learn/orkestraciya/chastnye-parki-serverov.md) с [Персистентность](/ru/learn/orkestraciya/persistentnost.md).

Оптимизируйте свои затраты и заранее останавливайте простаивающие развёртывания с помощью методов:

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

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

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

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

{% hint style="info" %}
**Беспокоят неожиданные расходы на облако?** [Настройте облачные оповещения](https://app.edgegap.com/notifications?notification-table-limit=10\&notification-table-page=1#alarms) чтобы получать уведомления при достижении пользовательских биллинговых порогов, или [свяжитесь с нами](https://discord.com/invite/NgCnkHbsGp) об автоматизированных мерах безопасности.
{% endhint %}

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

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

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

{% hint style="info" %}
**Исходящий трафик (к клиентам или backend'у) с ваших игровых серверов никогда не блокируется** и не фильтруется.
{% 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-igrokov.md#custom-lobby). [Состояние сервера может быть утеряно](/ru/learn/orkestraciya/persistentnost.md#state-management).
{% endhint %}

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

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

{% hint style="success" %}
Получите значения переменных с помощью [Unity SDK](/ru/unity/developer-tools.md#software-development-kit), [Unreal EGIK](/ru/unreal-engine/developer-tools.md#integration-kit)или с помощью методов работы с переменными окружения вашего runtime.
{% endhint %}

{% hint style="info" %}
Смотрите [Переменные версии приложения](/ru/learn/orkestraciya/application-and-versions.md#injected-variables) и [Переменные матчмейкера](/ru/learn/podbor-igrokov/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-serverov.md).

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

* **`ARBITRIUM_HOST_IN_PRIVATE_FLEET`** - напр. `false` , указывая, размещено ли на [Частные парки серверов](/ru/learn/orkestraciya/chastnye-parki-serverov.md).
* **`ARBITRIUM_HOST_BASE_CLOCK_FREQUENCY`**  - напр. `2300` , частота процессора в МГц.
* **`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 transport.

{% 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-serverov.md) с [Ping-маяки](/ru/learn/orkestraciya/ping-beacons.md).
* **`ARBITRIUM_HOST_BEACON_PUBLIC_IP`**  - напр. `139.177.198.69` , публичный IP ближайшего маяка.
* **`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><code>ARBITRIUM_DEPLOYMENT_LOCATION</code></strong></summary>

```json
ARBITRIUM_DEPLOYMENT_LOCATION="{
  "city": "Монреаль",
  "country": "Канада",
  "continent": "Северная Америка",
  "administrative_division": "Квебек",
  "timezone": "Eastern Time",
  "latitude": 45.513707,
  "longitude": -73.619073
}"
```

</details>

<details>

<summary><strong><code>ARBITRIUM_PORTS_MAPPING</code></strong></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="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FLxDp1yFvkj5kB6AC4xVb%2Fimage.png?alt=media&amp;token=c0eff5f1-a374-41e0-a49a-9b3ecf0bfd1b" alt=""><figcaption></figcaption></figure>

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

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

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

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FM4h0itPU5ntPaV5N5ZlW%2Fimage.png?alt=media&amp;token=98028901-9a40-4a2d-969e-db5f990e334f" 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="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FfDpIQxoFUJZNE77LJIwZ%2Fimage.png?alt=media&amp;token=94e730ad-3907-486b-8a06-0f469acd19ea" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Скопления точек баланса в необычных местах (например, в Гренландии) указывают на подбор игроков, находящихся далеко друг от друга. Узнайте о [#connection-quality](#connection-quality "mention") и [Ping-маяки](/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="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FfkyAYtylnOFmSp3yyiId%2Fimage.png?alt=media&amp;token=6a4f6ac4-5780-46a7-bcdd-1d8829c4abd7" alt=""><figcaption></figcaption></figure>

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

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

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

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FTiaARmb6aAZfm0rjQmiT%2Fimage.png?alt=media&amp;token=7eb49138-954d-44a1-a025-1f88ed855366" 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="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FoIpCR3x9ibiXMEIWFgKG%2Fimage.png?alt=media&amp;token=86dcd914-db9f-4e81-8444-6c83805be9b6" alt=""><figcaption></figcaption></figure>

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

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

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

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

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

{% hint style="danger" %}
**Too Many Requests 429 — для Context и Status API действует ограничение 20 запросов/с на организацию.** Эти API предназначены для использования во время специальных операций, а не для автоматической оркестрации сессий.
{% endhint %}

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

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

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

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2F42IaKG0pFQXSkvPCRH1T%2Fimage.png?alt=media&amp;token=6aba8781-13c9-4c0f-87e9-2d9612a57342" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
В качестве альтернативы, позвольте игрокам **выбрать постоянный (всегда онлайн) сервер** из списка с [Браузер серверов](/ru/learn/brauzer-serverov.md).
{% endhint %}

[Получайте список развертываний через 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="/ru/learn/orkestraciya/deployments.md#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>tags</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="/ru/learn/orkestraciya/application-and-versions.md"><code>application</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="/ru/learn/orkestraciya/application-and-versions.md"><code>version</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="/ru/learn/orkestraciya/chastnye-parki-serverov.md"><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="/ru/learn/orkestraciya/chastnye-parki-serverov.md"><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="/ru/learn/podbor-igrokov/matchmaker-in-depth.md#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). Доступно для:

* При готовности: контейнер развертывания [успешно запущен](#id-1.-start-a-deployment) (после этого сервер начинает инициализацию).
* При ошибке: развертывание не удалось запустить, и [#id-4.-deployment-error](#id-4.-deployment-error "mention") произошла ошибка.
* При завершении: [#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": "Монреаль",
    "country": "Канада",
    "continent": "Северная Америка",
    "administrative_division": "Квебек",
    "timezone": "Eastern Time",
    "latitude": 45.513707,
    "longitude": -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="success" %}
**Вебхуки — это основной рекомендуемый способ для пользовательских интеграций бэкенда с развертыванием.**
{% endhint %}

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

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

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

При устранении неполадок с деплоями:

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

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

<details>

<summary>Не удается подключить клиентов к серверу - <code>Время ожидания запроса истекло.</code>, <code>Тайм-аут запроса</code> , <code>Ошибка подключения</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-igrokov/matchmaker-in-depth.md) назначение и к [Подробный обзор](/ru/learn/podbor-igrokov/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>

* У деплоев Free Tier есть лимит в 60 минут, рассмотрите возможность обновления аккаунта.
* Cloud-деплои будут завершены через 24 часа работы в соответствии с нашей политикой очистки серверов, для обслуживания инфраструктуры и чтобы предотвратить неожиданные расходы, если деплой был корректно не остановлен. Для серверов с длительным временем работы более 24 часов рассмотрите использование [Частные парки серверов](/ru/learn/orkestraciya/chastnye-parki-serverov.md) с [Персистентность](/ru/learn/orkestraciya/persistentnost.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 разрешение Internet Access может быть автоматически удалено из итогового APK-артефакта клиентской сборки.
* Снова добавьте разрешения в (после этого потребуется пересобрать клиент):
  * Project Settings / OpenXR / :gear: Meta Quest Support / Force Remove Internet Permissions (снимите флажок).
  * Player Settings / Internet Access (установите Require).

</details>

<details>

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

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

</details>

<details>

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

* Это может не быть проблемой, поскольку игровые движки обычно выполняют ресурсоемкие операции CPU во время инициализации сервера. Если загрузка CPU не снизится через 2–3 минуты после запуска деплоя, вам может потребоваться оптимизировать сервер или увеличить ресурсы версии приложения.
* Снижение tick rate может повлиять на загрузку 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`, пересоберите, отправьте и заново разверните сервер.
* В Free Tier вам доступно не более 1,5 vCPU и 3 ГБ памяти (RAM).
* Вы можете увеличить выделенные ресурсы при создании новой версии приложения. Вы можете дублировать версию приложения в нашей панели управления и при необходимости изменять эти значения без пересборки сервера или образа.

</details>

<details>

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

* Такое поведение вызвано превышением выделенного объема памяти. Рассмотрите возможность оптимизировать использование памяти с помощью object pooling, сжатия или удаления ненужных объектов в вашей сцене.
* Убедитесь, что ваш проект загружает сцену по умолчанию, содержащую ваш `NetworkManager` и что эта сцена включена в Build Settings Unity.
* В Free Tier вам доступно не более 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]: по убыванию, сначала пустые
