For the complete documentation index, see llms.txt. This page is also available as Markdown.

Unity — Начало работы

Изучайте на практике и разверните свой первый выделенный сервер на Edgegap. К концу этого руководства вы бесплатно развернёте выделенный сервер с помощью Edgegap.

✔️ Подготовка

Прежде чем начать, убедитесь, что вы создали бесплатный аккаунт на Edgegap (кредитная карта не требуется).

Настройте несколько основных вещей на вашей машине для разработки:

Установите модули поддержки сборки Unity для Linux
  • Используйте Unity Hub, чтобы выбрать вкладку Устанавливает, доступ Настройки и Добавить модули для каждой версии Unity, которую вы планируете использовать с платформой Edgegap:

  • Прокрутите вниз, чтобы выбрать и установить следующие модули Unity:

    • Поддержка сборки для Linux (IL2CPP),

      • Поддержка сборки для Linux (Mono),

      • Поддержка сборки выделенного сервера для Linux

Установите Docker Desktop (или Docker CLI)
Установите плагин быстрого старта для выделенных серверов Unity от Edgegap

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

Этот плагин был протестирован и поддерживает версии Unity 2021.2+, включая все версии LTS, Unity 2023 и Unity 6.

Уверены в своих сборках сервера? Перейти к Unity или Расширенные возможности чтобы узнать больше.

⚙️ 1. Подключить аккаунт

☑️ Войдите в систему и убедитесь, что в вашей консоли Unity нет новых ошибок, связанных с плагином Edgegap.

✅ Теперь вы можете перейти к следующему шагу.

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

!Успех: 400 BAD REQUEST - POST | https://api.edgegap.com/v1/wizard/init-quick-start - {"message": "Браузер (или прокси) отправил запрос, который этот сервер не смог понять."}

  • Если вы устанавливали, копируя ZIP-файл, или использовали пример проекта с копией плагина, установленной таким способом, вам потребуется вручную установить зависимости пакетов, включая библиотеку Newtonsoft JSON, см. официальному репозиторию плагина.

  • Пожалуйста, свяжитесь с нами в Discord сообщества за помощью, если это не так.

🔧 2. Собрать игровой сервер

Независимо от того, используете ли вы машину Windows, Mac или Linux, вам нужно собрать сервер для Linux-runtime, поскольку большинство облачных провайдеров сегодня (включая Edgegap) работают на Linux. Не волнуйтесь, для этого с нашим плагином не требуется знание Linux.

☑️ Убедитесь, что вы установили необходимые инструменты сборки Unity для Linux.

Установите модули поддержки сборки Unity для Linux
  • Используйте Unity Hub, чтобы выбрать вкладку Устанавливает, доступ Настройки и Добавить модули для каждой версии Unity, которую вы планируете использовать с платформой Edgegap:

  • Прокрутите вниз, чтобы выбрать и установить следующие модули Unity:

    • Поддержка сборки для Linux (IL2CPP),

      • Поддержка сборки для Linux (Mono),

      • Поддержка сборки выделенного сервера для Linux

☑️ Измените настройки сборки, чтобы убедиться, что все необходимые игровые сцены включены.

Продвинутые пользователи Unity — при желании измените настройки сборки Unity. Осторожно! Это может сломать вашу сборку.

☑️ Необязательно: добавьте специфичный для netcode скрипт для проверки портов и инициализации окружения в вашу начальную серверную сцену из меню Edgegap Server Hosting (правый клик / в окне Hierarchy).

Как только вы завершите шаг Unity, скрипт проверки портов выведет предупреждение, если адрес или порты вашего netcode не совпадают с вашим сопоставлением портов версии приложения Edgegap конфигурации.

☑️ Когда вас устроит ваша конфигурация, нажмите Собрать сервер, дождитесь завершения процесса и убедитесь, что в вашей консоли Unity нет новых ошибок. Выполнение этого шага приведёт к тому, что в корне вашего проекта появится новая папка - Builds/EdgegapServer/ServerBuild .

✅ Теперь вы можете перейти к следующему шагу.

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

Unity: единственные поддерживаемые автономные цели — Windows x64 и OSX с OpenXR.

  • Откройте ваши Packages и отключите OpenXR перед сборкой сервера.

  • Плагин OpenXR требуется только для клиентов и несовместим со сборками Linux-сервера. Исключая его из серверных сборок, вы не теряете никакой функциональности.

🐋 3. Контейнеризируйте сервер

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

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

Мы рекомендуем посмотреть «Никогда не устанавливайте локально» (видео). Вам НЕ нужно использовать Dockerhub с Docker. Docker ≠ Dockerhub. Думайте о Docker как о движке для программирования, а о Dockerhub — как о его магазине приложений.

☑️ Начните с нажатия кнопки Проверить чтобы убедиться, что вы завершили Unity.

Установите Docker Desktop (или Docker CLI)

☑️ Вы можете настроить следующие параметры (или оставить значения по умолчанию):

  • Путь сборки — это относительный путь к артефакту сборки вашего сервера, пока оставим значение по умолчанию.

  • Имя образа — это уникальный идентификатор на ваш выбор, которым вы помечаете сборку сервера перед отправкой.

    • Обычно сюда входит название вашей игры — например, «my-game-server».

  • Тег образа — это идентификатор, указывающий на конкретную версию вашего образа.

    • Термин «артефакт сборки» иногда используется для обозначения конкретной версии вашего образа.

    • Временные метки — отличный вариант для тегов, например 2024.01.30-16.23.00-UTC .

  • Путь к Dockerfile можно использовать для настройки рецепта ваших образов.

    • Мы рекомендуем пока оставить значение по умолчанию, позже вы можете прочитать подробнее в разделе Unity.

  • Дополнительные параметры сборки Docker можно использовать, чтобы дополнительно указать Docker более тонкие нюансы.

☑️ Когда вас устроит ваша конфигурация, нажмите Контейнеризируйте с Docker, дождитесь завершения процесса и убедитесь, что в вашей консоли Unity нет новых ошибок. Выполнение этого шага приведёт к тому, что новый образ, появляющийся на вашей локальной машине. Вы можете проверить это либо в Docker Desktop, на вкладке Images в разделе Local (по умолчанию), либо через docker CLI, выполнив docker images .

Пересобрать из исходного кода будет автоматически собирать и контейнеризовать, чтобы ускорить вашу следующую сборку.

✅ Теперь вы можете перейти к следующему шагу.

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

/bin/bash: docker: команда не найдена , или не удалось найти Packages\com.edgegap.unity-servers-plugin\Editor

  • Сначала убедитесь, что вы завершили Инструменты разработчика.

  • Подтвердите, что вы верифицировали свой аккаунт Edgegap; вы должны были получить ссылку для подтверждения по электронной почте.

  • После обновления Docker Desktop некоторые настройки могли сброситься. Попробуйте перейти в настройки Docker Desktop / Advanced и для пункта «Choose how to configure the installation of Docker’s CLI tools:» выберите «System (requires password)».


docker build требует ровно 1 аргумент

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


(HTTP code 400) unexpected - неверный формат тега


ОШИБКА: не удалось решить задачу: ubuntu:22.04: не удалось получить метаданные исходника для http://docker.io/library/ubuntu:22.04: не удалось авторизоваться: не удалось получить токен OAuth

  • Вы находитесь в Китае? Ваше соединение может прерываться из-за Великого китайского файрвола. Попробуйте выполнить docker pull ubuntu:22.04 в командной строке вручную (откройте командную строку, нажав Win+R, затем введите cmd и нажмите Enter).


System.IndexOutOfRangeException: Индекс был вне границ массива.

  • Если вы установили наш плагин быстрого старта Unity, загрузив ZIP, кэш вашего Unity Editor может быть повреждён. Попробуйте удалить копию плагина и установить его по git URL или из Unity Asset Store. Пакет Newtonsoft.JSON больше не должен быть нужен, так как он автоматически включается вместе с другими исходниками.


Размер моего Docker-образа огромный (более 1 ГБ) / крошечный (менее 100 МБ) — это нормально?

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


У меня возникла другая проблема, не упомянутая нигде в этой документации.

  • Сначала, пожалуйста, попробуйте обновить ваш плагин Edgegap возможно, мы уже выпустили исправление. Если это не поможет, пожалуйста, свяжитесь с нами в нашем Discord сообщества и мы оперативно разберёмся вместе с вами.

🧪 4. Протестировать сервер локально

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

☑️ Вы можете настроить следующие параметры (или оставить значения по умолчанию):

  • Тег образа сервера из предыдущего шага.

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

  • Дополнительные параметры docker run можно указать для публикации нескольких портов или запуска вашего образа на машинах macOS.

    • При необходимости вы можете опубликовать несколько портов для вашего контейнера — просто добавьте параметр -p {внутренний порт}/{протокол} для каждого, например -p 8080/tcp -p 7777/udp чтобы опубликовать и сопоставить порт вашего сервера 8080 с произвольным внешним портом для TCP-подключения и порт сервера 7777 с произвольным внешним портом для UDP-подключения одновременно. Найдите настройку порта сервера в вашем Transport или в специфичных для netcode настройках.

    • Если вы используете машину с архитектурой ARM (macOS M1, M2, M3 и т. д.), вы должны увидеть этот необязательный параметр, включённый в ваши дополнительные параметры сборки Docker: --platform=linux/amd64 .

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

Для более подробной информации см. Docker Desktop / Containers или команду Docker CLI docker ps .

☑️ Теперь пришло время подключить игровой клиент Unity Editor к вашему локальному Docker-контейнеру чтобы убедиться, что ваш серверный образ работает корректно. Найдите настройки клиента netcode и укажите:

  • localhost или 0.0.0.0 (в большинстве случаев эквивалент) вместо IP сервера,

  • случайное значение внешнего порта, найденное в Docker Desktop / Containers / edgegap-server-test.

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

✅ Теперь вы можете перейти к следующему шагу.

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

Я не могу подключиться к локальному Docker-контейнеру с помощью игрового клиента Unity Editor.

  • Сначала убедитесь, что статус контейнера — Up и что он не находится в состояниях Restarting или Exited, что указывает на исключение во время выполнения. Если ваш контейнер не запущен, просмотрите его логи во вкладке Containers в Docker Desktop (нажмите на ваш контейнер) или с помощью docker logs {container_id} --timestamps через docker CLI.

  • Затем проверьте, что настройка порта Network Manager из вашей серверной сборки совпадает с опубликованным портом в Дополнительные параметры docker run. Если это не так, попробуйте сбросить или вручную изменить значение этого поля, чтобы оно соответствовало {container} порту в настройках вашего Network Manager. Найдите ваш протокол в настройках netcode.

  • Наконец, убедитесь, что настройки netcode вашего игрового клиента Unity Editor используют порт, опубликованный в Дополнительные параметры docker run (см. снимок экрана выше).


(Segmentation fault) - core dumped

  • Если вы используете машину с архитектурой ARM (macOS M1, M2, M3 и т. д.), вы должны увидеть этот необязательный параметр, включённый в ваши дополнительные параметры сборки Docker: --platform=linux/amd64 . Если нет, попробуйте сбросить значение этого поля.


SceneId 9120233082191360994 не найден в SceneObjects.

  • Это может означать, что сцена, которую вы пытаетесь загрузить, не была корректно включена в сборку — известная проблема в старых версиях плагина. Чтобы исправить это, попробуйте обновить версию вашей интеграции netcode или обновить ваш плагин Edgegap.


http2: server: ошибка чтения префейса от клиента //./pipe/docker_engine: файл уже был закрыт


Ошибка Curl 35: сбой рукопожатия сертификата. Фатальная ошибка. Код ошибки UnityTls: 7

  • Эта ошибка указывает на проблему проверки корневого SSL-сертификата — известную проблему в старых версиях плагина. Чтобы исправить это, пожалуйста, попробуйте обновить ваш плагин Edgegap.

☁️ 5. Загрузить в Edgegap

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

☑️ Вы можете настроить следующие параметры (или оставить значения по умолчанию):

  • Имя приложения в Edgegap может совпадать с именем вашего образа или быть изменено.

    • Пока мы выбрали копирование имени вашего образа.

  • Образ сервера из шага Unity.

☑️ Когда вас устроит ваша конфигурация, нажмите Загрузить образ и создать версию приложения, дождитесь завершения процесса и убедитесь, что в вашей консоли Unity нет новых ошибок.

☑️ Вас перенаправят в нашу Панель управления, где вы сможете настроить необязательные параметры. Завершение этого шага приведёт к тому, что будет создана новая версия приложения, и ваш артефакт сборки будет помечен тегом и загружен в Container Registry Edgegap.

  • Версия приложения в Edgegap может совпадать с вашим тегом или быть изменена.

    • Временные метки — отличный вариант для названий версий приложения, например 2024.01.30-16.50.20-UTC .

    • Несколько версий приложения могут указывать на один и тот же тег образа, например v1.1.0 и dev .

    • Узнайте больше о Приложения и версии позже.

☑️ Теперь вам будет предложено указать порт для новой версии приложения. Убедитесь, что установили то же значение порта сервера, что и в шаге Unity из ваших Transport или специфичных для netcode настроек.

✅ Теперь вы можете перейти к следующему шагу.

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

отказано: добавление 756,6 МиБ ресурса хранения, которое при обновлении до текущего использования 4,3 ГиБ превысит настроенный верхний предел в 4,7 ГиБ , ошибка фиксации на ref "layer-sha256:--------": неожиданный статус от PUT-запроса к https://registry.edgegap.com/

  • Похоже, у вас закончилось место для хранения образов на Регистр контейнеров. Рассмотрите возможность удаления неиспользуемых артефактов сборки (если они у вас есть) или оптимизации размера сборки сервера. Если вы используете пользовательский Dockerfile или .dockerignore, вы могли скопировать некоторые ненужные файлы в образ.


Вы достигли лимита приложений: 2 , Не удалось обновить тег/версию docker: вы достигли лимита версий приложения: 2

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


Моя новая версия приложения не отображается в плагине/расширении.

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

🚀 6. Развернуть в облаке

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

☑️ Выберите приложение и версию из предыдущего шага для развертывания.

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

☑️ Убедитесь, что в выводе консоли нет новых ошибок. Также проверьте, что ваши Развертывания не показывают ошибок и ваши Развертывания не указывают на 100% загрузку ресурсов (vCPU или память), иначе новые подключения игроков могут быть отклонены, или ваш сервер застрянет в цикле перезапуска. См. ниже шаги по устранению неполадок для решения любых проблем.

☑️ Теперь мы выполним финальный тест и подключим игровой клиент Unity Editor к вашему облачному развертыванию. Введите данные подключения игрового клиента из Deployment's:

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

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

🙌 Поздравляем с вашим первым развёртыванием в Edgegap! Если хотите узнать больше, продолжайте чтение.

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

Не удаётся подключить клиентов к серверу - Превышено время ожидания запроса. , Тайм-аут запроса , ConnectionFailed , или Проверка порта не удалась

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

  • Если вы используете netcode Mirror, вам нужно иметь "Auto Start Server" выбранным в вашем NetworkManager , пересоберите, отправьте и повторно разверните ваш сервер.

  • Если вы используете netcode FishNet, вам нужно включить «Start on Headless» в вашем ServerManager, пересоберите, отправьте и повторно разверните ваш сервер.

  • Если вы используете netcode Photon Fusion 2, пожалуйста, убедитесь, что ваш сервер передаёт публичный IP развертывания, внешний порт и roomCode на сервере, а на клиенте — тот же код комнаты в «NeworkRunner.StartGame» параметре StartGameArgs. Идентификатор развертывания (например, b63e6003b19f) — отличный выбор, поскольку он глобально уникален и легко доступен клиенту через Matchmaker и Подробный обзор.

  • Затем проверьте, что настройка порта в netcode-настройках вашей серверной сборки совпадает с внутренним портом в вашей версии приложения. Вы можете изменить сопоставление портов, отредактировав версии приложения без пересборки. Найдите ваш протокол в вашей интеграции netcode.

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

  • Если вы используете протокол Secure Websocket (WSS) в вашей интеграции netcode, пожалуйста, убедитесь, что в вашей версии приложения конфигурации порта WSS включено TLS Upgrade.

  • Вы находитесь в Китае и используете Smart Fleets? Ваше соединение может быть заблокировано Великим китайским файрволом. Рассмотрите возможность добавить в ваш fleet сервер, расположенный в Китае, или использовать VPN для подключения.


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

  • Если процесс сервера завершается из-за исключения, наша система попытается автоматически перезапустить сервер. Рассмотрите возможность протестировать ваш сервер локально чтобы выявить первопричину.

  • Мы храним логи только на протяжении всего времени развертывания; если вы хотите просмотреть логи после остановки развертывания, пожалуйста, интегрируйте стороннее хранилище логов.

  • См. Развертывания чтобы узнать все причины остановки вашего развертывания.


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

  • Развертывания Free Tier имеют лимит 60 минут, пожалуйста, рассмотрите возможность обновления вашего аккаунта.

  • Все развертывания будут завершены через 24 часа работы согласно нашей политике санитизации серверов, для обслуживания инфраструктуры и чтобы предотвратить накопление неожиданных расходов, если развертывание не было корректно остановлено. Для долго работающих серверов рассмотрите использование Частные флотилии с Сохранение данных.

  • См. Развертывания чтобы узнать все причины остановки вашего развертывания.


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

  • Когда развертывание становится Ready, начинается инициализация игрового движка. Этот процесс может занять от нескольких секунд до нескольких минут, и в течение этого периода сервер не принимает подключения игроков.

  • Рассмотрите возможность оптимизировать инициализацию сервера, чтобы сократить это время.

  • Игровые клиенты должны повторять попытки подключения с интервалом в 1 секунду в течение ограниченного времени (в зависимости от длительности инициализации), после чего они должны возвращаться в matchmaking.

  • Рассмотрите возможность добавить загрузочную сцену, чтобы сервер мог выполнять инициализацию (и переход в случае Unreal Engine) одновременно с клиентами, синхронизируя состояние обоих.


Моё устройство Meta Quest выдаёт HTTP 0: Не удаётся разрешить целевой хост .

  • При сборке приложений Unity для Android ваша permission Internet Access может автоматически удаляться из выходного APK-артефакта сборки клиента.

  • Добавьте разрешения снова (после этого потребуется пересборка клиента):

    • Project Settings / OpenXR / ⚙️ Meta Quest Support / Force Remove Internet Permissions (снимите галочку).

    • Player Settings / Internet Access (установите require).


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

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

  • Игровые клиенты могут локально хранить информацию о подключении, чтобы попытаться переподключиться в случае неожиданных сбоев клиента.

  • Чтобы позволить игрокам присоединяться к уже идущим играм, рассмотрите использование Подробный обзор или Сессии.


Мой сервер показывает загрузку CPU 100% после перехода в Ready.

  • Это может не быть проблемой, поскольку игровые движки обычно выполняют ресурсоёмкие операции во время инициализации сервера. Если загрузка CPU не снижается через 2–3 минуты после запуска развертывания, возможно, вам нужно оптимизировать сервер или увеличить ресурсы версии приложения.

  • Снижение tick rate может повлиять на загрузку CPU, поскольку сервер выполняет меньше операций обмена сообщениями.

  • Если вы используете netcode Mirror, вам нужно иметь "Auto Start Server" выбранным в вашем NetworkManager , пересоберите, отправьте и повторно разверните ваш сервер.

  • Если вы используете netcode FishNet, вам нужно включить «Start on Headless» в вашем ServerManager, пересоберите, отправьте и повторно разверните ваш сервер.

  • В Free Tier вам доступно 1.5 vCPU и 3 ГБ памяти (RAM).

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


Моё развертывание постоянно перезапускается и показывает ошибку OOM kill

  • Это вызвано превышением выделенного объёма памяти. Рассмотрите возможность оптимизации использования памяти с помощью пула объектов, сжатия или удаления ненужных объектов на вашей сцене.

  • Убедитесь, что ваш проект загружает сцену по умолчанию, содержащую ваш NetworkManager и что эта сцена включена в Build Settings Unity.

  • В Free Tier вам доступно 1.5 vCPU и 3 ГБ памяти (RAM).

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


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

  • Пока вы укладываетесь в выделенный объём памяти версии приложения, это не проблема.

  • Превышение выделенного объёма памяти версии приложения приведёт к OOM kill (см. выше).


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

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

👉 Дальнейшие шаги

После того как у вас настроена рабочая клиент/серверная система, убедитесь, что сохранили копию вашего проекта (используя систему контроля версий, такую как git), чтобы вы всегда могли проследить свои шаги в случае возникновения проблем.

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

Если вам нужна помощь, свяжитесь с нами через Discord. Для поддержки по играм в реальном времени см. нашу систему тикетов.

Остановить развертывания

Как только матч закончится (или игроки уйдут), ваше развертывание можно остановить, чтобы сэкономить средства. Запуск пустых или только частично заполненных серверов может неоправданно увеличить ваши расходы!

Внедряемые переменные

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

Автоматизация сессий

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

Подбор игроков:

  • Короткие раунды

  • Матчи по запросу

  • Рейтинговая система и/или Пользовательские правила

Браузер серверов:

  • Постоянные или раунды

  • Региональные социальные хабы

  • Автоматическое назначение и/или Пользовательский поиск

Собственный бэкенд:

Оптимизировать сборки

Пересобирайте только те ресурсы, которые изменились с последней сборки.

Рассмотрите возможность использовать инкрементальные сборки Unity чтобы ускорить время сборки.

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

Отключите статический батчинг мешей, чтобы уменьшить размер образа.

Сожмите меши, чтобы уменьшить размер образа.

Реализуйте условную ленивую загрузку ресурсов.

Рассмотрите возможность использовать многоэтапные сборки Docker (ссылка).

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

  • Если вы не уверены, почему одна из команд в вашем Dockerfile вызывает ошибку, попробуйте отладить локально. Создайте новый этап прямо перед тем, как возникает проблема (добавьте второй FROM команду), используйте --target чтобы указать процессу сборки остановиться на проблемном этапе, а затем docker exec -it {container} /bin/bash чтобы войти в интерактивный терминал внутри вашего контейнера. После этого вы можете использовать команды shell в базовом образе, чтобы продолжить исследование (например, top в Ubuntu).

Настроить образ

Мы также поддерживаем добавление собственного Dockerfile для пользователей, которым нужен больший контроль над образами из-за оптимизации размера сборки, лишних зависимостей или необходимости более сложного процесса запуска. При желании вы можете указать путь к своему пользовательскому Dockerfile на шаге Unity. Теперь мы поделимся несколькими советами и лучшими практиками в стиле «сделай сам».

Возникают проблемы при использовании WebSockets или HTTPS-запросов?

  • Если вы получаете Ошибка Curl 35: сбой рукопожатия сертификата. Фатальная ошибка. Код ошибки UnityTls: 7 не отчаивайтесь, это известная проблема старых базовых (FROM) образов, содержащих просроченный сертификат корневого центра сертификации. Вы можете исправить это, обновив базовый образ до более новой версии (например, ubuntu:22.04), а затем выполнив update-ca-certificates , добавьте это в ваш Dockerfile:

Всегда убедитесь, что вы работаете с рабочей сборкой сервера.

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

Всегда тестируйте локально перед загрузкой.

  • Тестирование образа локально сэкономит вам много времени, пока идет загрузка. Это также полностью бесплатно ✨, так как не требует ресурсов Edgegap.

  • При тестировании локально убедитесь, что правильно указали внутренний порт:

Убедитесь, что вы освоили базовые вещи. Каждый Dockerfile требует нескольких обязательных команд:

  • FROM {image} является вашим базовым образом, для проектов на Unity мы обычно используем долгосрочно поддерживаемый Linux, но подойдет любой образ на основе Linux. Обычно это публичные образы, хранящиеся на Docker Hub. Справочник по Dockerfile здесь. Справочник по Dockerfile здесь.

  • COPY {source} {destination} для копирования вашей Linux-сборки сервера с хост-машины внутрь образа, чтобы вы могли запустить её позже. Справочник по Dockerfile здесь.

  • USER {user} должна следовать после команды useradd (ubuntu) или эквивалентной; лучше не запускать всё от root чтобы быть в большей безопасности. Справочник по Dockerfile здесь.

  • CMD {command} будет последней строкой, скорее всего вызывающей StartServer.sh или какой-то стартовый скрипт, чтобы убедиться, что ваш сервер инициализируется корректно после настройки. Справочник по Dockerfile здесь.

  • НЕ используйте VOLUME - таким образом вы не сможете монтировать локальное хранилище на Edgegap; вместо этого рассмотрите нашу функцию Endpoint Storage и используйте S3-бакет, см. Endpoint Storage,

  • EXPOSE 7777/UDP не обязателен! Это фактически не сделает внутренний порт сервера доступным извне контейнера, это лишь подсказка для разработчика, и порт должен быть

    • опубликован при локальном тестировании с docker run <image> -p 7777/udp ,

    • или замаплен в Edgegap Port Mapping.

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

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

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

  • Лучшее решение — подставлять параметры конфигурации непосредственно к моменту запуска:

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

    2. параметры версии — общие для всех деплоев одной версии приложения — этап деплоя, тег артефакта, сторонние секреты и конечные точки и т. п.; затем

    3. один единый образ — содержит и загружает все варианты конфигурации при запуске.

НЕ запускайте базы данных на деплойментах Edgegap.

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

  • Рассмотрите использование наших Managed Clusters для размещения баз данных и долгоживущих сервисов.

Уперлись в стену? Мы доступны в нашем Discord сообщества и с радостью поможем.

Последнее обновление

Это было полезно?