uUnreal Engine

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

Сборка с помощью Docker Desktop — самый быстрый, простой и надёжный способ начать.

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

chevron-rightУстановите расширение Edgegap Quickstart Dockerarrow-up-righthashtag
circle-info

Уверены в своих сборках сервера? Перейдите к Unreal Engine и Расширенные возможности.

⚙️ 1. Настройка проекта

circle-info

Этот способ не требует загрузки исходного кода Unreal Engine или сборки его из исходников!

☑️ Начните с проверки версии Unreal Engine — предварительно заполнено значением из файлов вашего проекта.

☑️ Введите имя пользователя GitHub и PAT из Unreal Engine, чтобы загрузить зависимости с GitHub.

🔧 2. Сборка игрового сервера

Теперь мы соберём и скомпилируем ваш проект, а затем упакуем его в легко переиспользуемый Docker-образ.

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

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

    • Обычно сюда включают название игры — например, “my-game-server”.

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

    • Термин “build artifact” иногда используется для обозначения конкретной версии вашего образа.

    • Для тегов отлично подходят временные метки, например 2024.01.30-16.23.00-UTC (по умолчанию).

☑️ Собрать проект как только вы будете довольны конфигурацией. Выполнение этого шага добавит новый образ с исполняемым файлом вашего Linux-игрового сервера в локальный Docker-клиент.

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

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

☑️ Выберите тег образа, который вы хотите запустить локально (удалённые образы будут загружены). При желании можно указать дополнительные аргументы docker runarrow-up-right для настройки локального теста:

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

☑️ Теперь пришло время подключить игровой клиент Unreal Engine Editor (PIE) к локальному серверному контейнеру. Откройте консоль Unreal PIE с помощью ~ (тильда) и подключитесь с помощью open <ip>:<port>:

  • ip = localhost или 127.0.0.1 (в большинстве случаев эквивалентно),

  • port = случайное внешнее значение порта контейнера в Docker GUI.

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

chevron-rightУстранение неполадок и FAQhashtag

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

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

  • Пожалуйста, проверьте, что значения портов в команде docker run совпадают.

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

  • Пожалуйста, убедитесь, что вы переименовали целевой файл и настроили сборки игры, как описано в шаге ⚙️ 1. Настройка проекта.


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

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

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

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

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


Предупреждение: не удалось создать сокет для адреса привязки

  • Установите плагин Epic’s Steam Subsystem через магазин ассетов Fab.

  • При использовании Edgegap Integration Kit (EGIK) с исходной версией SteamCore, загруженной с github, плагин Epic’s Steam Subsystem не включён из-за политики распространения плагинов Epic Games.


Я подключился, но мой экран полностью чёрный.

  • Проверьте, что у вас правильно Game Default Map установлена в Edit / Project Settings / Maps & Modes.

☁️ 4. Публикация в Edgegap

☑️ Выберите имя приложения чтобы помечать и группировать похожие образы в Edgegap.

☑️ Выберите тег образа, который вы хотите опубликовать и Загрузить образ. Выполнение этого шага приведёт к загрузке образа вашего сервера в Edgeap Registry и созданию новой версии приложения в вашем веб-браузере. Не забудьте создать свой вашего локального контейнера при появлении запроса, со значениями по умолчанию.

circle-check

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

🚀 5. Развертывание в облаке

☑️ Теперь мы выполним финальный тест и подключим ваш Unreal Engine Editor к облачному развертыванию. Возьмите ваш Хост развертывания вместо IP сервера и внешнему порту, откройте консоль Unreal в игровом клиенте (тильда ~) и введите open {host}:{port} .

chevron-rightУстранение неполадок и FAQhashtag

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

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

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

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

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

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


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

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

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

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

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


Предупреждение: не удалось создать сокет для адреса привязки

  • Установите плагин Epic’s Steam Subsystem через магазин ассетов Fab.

  • При использовании Edgegap Integration Kit (EGIK) с исходной версией SteamCore Integration Kit (SIK), загруженной с github, плагин Epic’s Steam Subsystem не включён из-за политики распространения плагинов Epic Games.


Я подключился, но мой экран полностью чёрный.


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

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

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

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


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

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

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

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


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

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

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

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


На моём сервере после перехода в состояние ready загрузка CPU показывает 100%.

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

  • Снижение частоты тиков может помочь контролировать загрузку CPU за счёт обработки меньшего числа сообщений.

  • В Free Tier вам доступно только 1,5 vCPU и 3 ГБ памяти (RAM).

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


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

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

  • В Free Tier вам доступно только 1,5 vCPU и 3 ГБ памяти (RAM).

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


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

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

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


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

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

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

Остановка развертываний

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

Если вы следовали этому руководству и собрали с помощью нашего Docker Extension, вы можете просто вызвать метод FGenericPlatformMisc::RequestExit . Мы добавили скрипт для управления процессом сервера в упакованном образе, который автоматически выполнит корректное завершение развертывания.

Чтобы настроить управление жизненным циклом сервера, измените наш пример StartServer.sharrow-up-right скрипт.

circle-info

Предпочитаете управлять жизненным циклом из Unreal? См. Инструменты разработчика для blueprints self-stop API.

circle-exclamation

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

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

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

Профилирование серверов

Чтобы понять и оптимизировать проблемы производительности сервера на Edgegap, изучите Развертывания, Развертыванияи другие Развертывания инструменты, имеющиеся в вашем распоряжении.

Вы также можете использовать существующие инструменты профилирования Unreal Engine с Edgegap:

Матчмейкинг

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

circle-check

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

Настройте разбиение ассетов на чанки, чтобы отделить клиентские ассеты от серверных.

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

Пересмотрите стратегию cooking вашего контента.

Используйте Level Streaming, чтобы уменьшить нагрузку на память во время выполнения.

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

chevron-rightПример .dockerignore файл для удаления лишних файлов.hashtag

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

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

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

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

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

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

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