Unity

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

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

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

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

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

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

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

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

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

Установите Docker Desktop (или Docker CLI)
Установите Quickstart-плагин Edgegap для Unity Dedicated Servers

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

Уверены в своих сборках сервера? Перейти к 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, поскольку большинство облачных провайдеров сегодня (включая Edgegap) работают на Linux. Не волнуйтесь, для этого с нашим плагином не требуется знание Linux.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

🐋 3. Контейнеризация сервера

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

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

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

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

Установите 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. Попробуйте перейти в Settings / Advanced в Docker Desktop и для «Choose how to configure the installation of Docker’s CLI tools:» выберите «System (requires password)».


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

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


(HTTP код 400) unexpected - invalid tag format


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

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


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

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


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

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


Я сталкиваюсь с другой проблемой, не упомянутой в этой документации.

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

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

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

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

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

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

    • Вы можете опубликовать несколько портов для контейнера при необходимости, просто добавьте параметр -p {внутренний порт}/{протокол} для каждого, например -p 8080/tcp -p 7770/udp чтобы опубликовать и сопоставить порт сервера 8080 с случайным внешним портом для TCP-соединения и порт сервера 7777 с случайным внешним портом для UDP-соединения одновременно.

    • Найдите настройку порта сервера в ваших настройках Transport или сетевых настройках.

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

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

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

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

  • localhost или 127.0.0.1 (эквивалент в большинстве случаев) вместо 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. Найдите ваш протокол в настройках сетевой интеграции.

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


(Segmentation fault) - core dumped

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


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

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


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


Curl error 35: Cert handshake failed. Fatal error. UnityTls error code: 7

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

☁️ 5. Загрузка в Edgegap

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

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

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

    • Мы решили пока скопировать имя вашего образа.

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

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

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

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

  • Имя образа сервера из шага Unity.

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

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

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

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

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

Поиск и устранение неполадок и 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 к вашему облачному развертыванию. Введите данные подключения клиента игры из:

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

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

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

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

Клиенты не могут подключиться к серверу - Время запроса истекло. , 请求超时 , ConnectionFailed , или Проверка порта не прошла

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

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

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

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

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

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

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

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


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

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

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

  • См. Развёртывания чтобы узнать все причины остановки деплоймента.


Мой деплоймент автоматически остановился через X минут.

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

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

  • См. Развёртывания чтобы узнать все причины остановки деплоймента.


Мой деплоймент готов, но в течение нескольких минут я не могу подключиться.

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

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

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

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


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

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

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

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

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


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

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

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

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


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

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

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

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

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

  • В Free Tier вам доступно до 1.5 vCPU и 3 ГБ оперативной памяти.

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


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

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

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

  • В Free Tier вам доступно до 1.5 vCPU и 3 ГБ оперативной памяти.

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


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

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

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


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

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

👉 Следующие шаги

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

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

Остановить деплойменты

Узнайте о различных методах остановки деплойментов после завершения матча и выхода игроков.

Ваш Unity Server будет автоматически перезапущен в случае падения или исчерпания памяти.

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

Получайте полезную информацию, такую как ID деплоймента, IP-адрес сервера, местоположение сервера и многое другое; через доступ к внедрённым переменным окружения. Каждый деплоймент автоматически включает:

Проверьте, является ли текущий экземпляр клиентом игры или сервером проверив, установлена ли переменная Edgegap:

Матчмейкинг

Запуск деплойментов вручную, вставка URL и портов не подходит для живой игры.

Оптимизация серверных сборок

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

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

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

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

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

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

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

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

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

Настройка образа сервера

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

Проблемы при использовании Websockets или HTTPS-запросов?

  • Если вы получаете Curl error 35: Cert handshake failed. Fatal error. UnityTls error code: 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 и будем рады помочь.

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

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