Unreal Engine
Учитесь на практике и разверните свой первый выделенный сервер на Edgegap. К концу этого руководства вы бесплатно развернёте выделенный сервер с помощью Edgegap.
Сборка с помощью Docker Desktop — самый быстрый, простой и надёжный способ начать.
✔️ Подготовка
Установите расширение Edgegap Quickstart Docker
Установите из Docker Desktop / Extensions / Browse или по ссылке.

Уверены в своих сборках сервера? Перейдите к Unreal Engine и Расширенные возможности.
⚙️ 1. Настройка проекта
Этот способ не требует загрузки исходного кода 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 run для настройки локального теста:
-p 7777:7777/udp— это сопоставление портов вашего локального контейнера,-e ARBITRIUM_PORT_GAMEPORT_INTERNAL=7777— это переменная окружения имитирующая реальное развертывание Edgegap и сообщающая игровому серверу внутренний порт, на котором нужно слушать подключения игроков.
☑️ Когда всё настроено, нажмите Запустить локальный сервер. Выполнение этого шага приведёт к запуску нового контейнера на вашей машине для разработки.
☑️ Теперь пришло время подключить игровой клиент Unreal Engine Editor (PIE) к локальному серверному контейнеру. Откройте консоль Unreal PIE с помощью ~ (тильда) и подключитесь с помощью open <ip>:<port>:
ip=localhostили127.0.0.1(в большинстве случаев эквивалентно),port= случайное внешнее значение порта контейнера в Docker GUI.
✅ Теперь можно перейти к следующему шагу.
Устранение неполадок и FAQ
Не удаётся подключить клиентов к серверу - Время запроса истекло. , 请求超时 , 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 и созданию новой версии приложения в вашем веб-браузере. Не забудьте создать свой вашего локального контейнера при появлении запроса, со значениями по умолчанию.
Найдена ошибка, и нужно снова собрать/опубликовать? Используйте Собрать заново из исходников чтобы Unreal Engine и Unreal Engine быстро использовать текущие значения, введённые в расширении.
✅ Теперь можно перейти к следующему шагу.
🚀 5. Развертывание в облаке
☑️ Теперь мы выполним финальный тест и подключим ваш Unreal Engine Editor к облачному развертыванию. Возьмите ваш Хост развертывания вместо IP сервера и внешнему порту, откройте консоль Unreal в игровом клиенте (тильда ~) и введите open {host}:{port} .
Устранение неполадок и FAQ
Не удаётся подключить клиентов к серверу - Время запроса истекло. , 请求超时 , ConnectionFailed , или Проверка порта не удалась
Сначала убедитесь, что развертывание находится в состоянии Ready и в журнале развертывания нет исключений или ошибок во время выполнения. Если ваше развертывание остановилось, проверьте логи в нашей Панели управления.
Пожалуйста, убедитесь, что настройка порта в сетевых настройках вашей серверной сборки совпадает с внутренним портом в вашем версии приложения. Для сборок плагинов порт устанавливается автоматически. Вы можете изменить сопоставление портов, отредактировав версии приложения без повторной сборки. Найдите свой протокол в интеграции сетевого кода.
Пожалуйста, убедитесь, что ваш игровой клиент подключается к внешнему порту показанную на странице сведений о развертывании; это значение всегда будет случайным по соображениям безопасности.
Пожалуйста, убедитесь, что вы переименовали целевой файл и настроили сборки игры, как описано в шаге Unreal Engine.
Вы находитесь в Китае и используете Smart Fleets? Ваше подключение может быть заблокировано Великим китайским файрволом. Рассмотрите возможность добавить в свой флот сервер, расположенный в Китае, или использовать 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.
Я подключился, но мой экран полностью чёрный.
Проверьте, что у вас правильно Game Default Map установлена в Edit / Project Settings / Maps & Modes.
Проверьте, что проверка совместимости версии Unreal Engine отключена в
DefaultEngine.ini.
Моё развертывание остановилось/перезапустилось, и я больше не могу получить доступ к его логам.
Если процесс сервера аварийно завершится из-за исключения, наша система попытается автоматически перезапустить сервер. Рассмотрите возможность локального тестирования сервера, чтобы выявить первопричину.
Мы храним логи только в течение времени развертывания; если вы хотите просмотреть логи после остановки развертывания, пожалуйста интегрируйте стороннее хранилище логов.
См. Развертывания чтобы узнать все причины остановки вашего развертывания.
Моё развертывание автоматически остановилось через X минут.
Развертывания Free Tier ограничены 60 минутами, пожалуйста, рассмотрите возможность обновления аккаунта.
Все развертывания будут завершены после 24 часов работы в соответствии с нашей политикой санитарной очистки серверов, для обслуживания инфраструктуры и чтобы предотвратить неожиданные расходы, если развертывание не было корректно остановлено. Для длительно работающих серверов рассмотрите использование Частные флоты с Сохранение данных.
См. Развертывания чтобы узнать все причины остановки вашего развертывания.
Что произойдёт, если игрок покинет моё развертывание?
По умолчанию серверы не отклоняют подключения игроков. Аутентификация игроков — задача ваших разработчиков, поскольку можно использовать множество различных методов и провайдеров аутентификации игроков.
Игровые клиенты могут локально сохранять информацию о подключении, чтобы попытаться переподключиться в случае неожиданных сбоев клиента.
Чтобы позволить игрокам присоединяться к уже идущим играм, рассмотрите использование Подробный обзор или Сессии.
На моём сервере после перехода в состояние 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.sh скрипт.
Предпочитаете управлять жизненным циклом из Unreal? См. Инструменты разработчика для blueprints self-stop API.
Подключите свой Хранилище конечных точек чтобы получить логи развертывания, иначе они будут удалены!
Внедряемые переменные
Читайте полезную информацию, такую как ID развертывания, IP-адрес сервера, местоположение сервера и многое другое, обращаясь к внедрённым переменным окружения. Каждое развертывание автоматически включает:
Переменные развертывания - автоматически предоставляются Edgegap,
Переменные матчмейкинга - автоматически предоставляются Edgegap при использовании Подбор игроков,
Переменные версии приложения - настраиваемые пары ключ-значение, задаваемые вами.
Проверьте, является ли текущий экземпляр игровым клиентом или сервером проверив, установлена ли переменная Edgegap:
Профилирование серверов
Чтобы понять и оптимизировать проблемы производительности сервера на Edgegap, изучите Развертывания, Развертыванияи другие Развертывания инструменты, имеющиеся в вашем распоряжении.
Вы также можете использовать существующие инструменты профилирования Unreal Engine с Edgegap:
Настройте трассировку в вашем сервере Unreal Engine (встроенные и пользовательские события):
сохраните trace на диск сервера с помощью
-tracefile, загрузите в стороннее хранилище и проанализируйте офлайн,или передавайте trace-данные с помощью Развертывания для внутреннего порта
1981по протоколу UDP.
Анализировать Memory Insights и Networking Insights и Unreal Engine.
Матчмейкинг
Если запускать развертывания вручную, подставляя URL и порты, этого будет недостаточно для живой игры.
Подробнее о матчмейкинге чтобы развертывать автоматически, как только это нужно, когда игроки выходят в сеть.
Оптимизация сборок сервера
Настройте разбиение ассетов на чанки, чтобы отделить клиентские ассеты от серверных.
Изучите техники и рекомендации по Asset Chunking от Epic.
Исключите ассеты и плагины, которые нужны только клиенту и не требуются для работы сервера.
Пересмотрите стратегию cooking вашего контента.
Рассмотрите Cooking on the Fly (COTF) чтобы отложить cooking клиентских ассетов и ускорить сборки сервера.
Используйте Level Streaming, чтобы уменьшить нагрузку на память во время выполнения.
Если по вашему дизайну игроки в основном находятся вместе в одной области карты, level streaming может сократить использование памяти вашего сервера более чем на 60% и улучшить производительность клиента!
Включайте только то, что абсолютно необходимо для работы вашего сервера.
Копирование неиспользуемых файлов в ваши образы приводит к раздуванию образа, более долгой загрузке, более медленному кэшированию и более медленному общему запуску сервера. Просмотрите рекомендации по оптимизации Docker-образа.
Рассмотрите использование многоэтапных сборок Docker (ссылка).
Вынесите крупные серверные зависимости в отдельный образ, чтобы переиспользовать их в многоэтапных сборках. Docker будет кэшировать каждый слой и просто переиспользовать предыдущую версию, пропуская загрузку этой части, если только не будет прямо указано иное, экономя вам трафик и время ожидания завершения загрузки.
Если вы не уверены, почему одна из команд вашего Dockerfile выдаёт ошибку, попробуйте отладить локально. Создайте новый этап прямо перед возникновением проблемы (добавьте вторую
FROMкоманду), используйте--targetчтобы указать процессу сборки остановиться на проблемном этапе, а затемdocker exec -it {container} /bin/bashчтобы войти в интерактивный терминал внутри контейнера. После этого вы можете использовать команды shell в вашем базовом образе для дальнейшего исследования (например,topв Ubuntu).
Настройка образа сервера
Мы также поддерживаем добавление собственного Dockerfile для пользователей, которым нужно больше контроля над своими образами из-за оптимизации размера сборки, лишних зависимостей или необходимости более сложного процесса запуска. Теперь мы поделимся несколькими советами «сделай сам» и лучшими практиками.
Последнее обновление
Это было полезно?

