Unreal Engine
Учитесь на практике и разверните свой первый выделенный сервер на Edgegap. К концу этого руководства вы развернёте выделенный сервер с Edgegap бесплатно.
Сборка с помощью Docker Desktop — самый быстрый, простой и надёжный способ начать.
✔️ Подготовка
Прежде чем начать, убедитесь, что создать бесплатную учетную запись на Edgegap (кредитная карта не требуется).
Настройте несколько основных параметров на вашей машине для разработки:
⚙️ 1. Настройка проекта
Будь то машина с Windows, Mac или Linux, вам потребуется собрать сервер для среды выполнения Linux, так как большинство облачных провайдеров в наши дни (включая Edgegap) работают на Linux. Не беспокойтесь, знание Linux не требуется.
☑️ Начните с проверки версии Unreal Engine - автоматически заполнено значением из файлов вашего проекта.
☑️ Введите имя пользователя GitHub и PAT из Unreal Engine, чтобы загружать зависимости с GitHub.
☑️ Отключить проверку совместимости версии Unreal Engine для выделенных серверов и установить IpNetDriver в качестве драйвера по умолчанию или запасного драйвера для сетевой репликации:
Убедитесь, что ввели ваш DefaultServerTarget в конце этого фрагмента!
☑️ Перезапустите Unreal Engine чтобы загрузить последние изменения.
☑️ Создайте скрипт целевой сборки для выделенного сервера скопировав ваш <PROJECT>Editor.Target.cs файл в корневой папке проекта и переименовав копию в <PROJECT>Server.Target.cs.
☑️ Замените любые ссылки на слово Editor с Сервер в вашем скрипте целевой сборки сервера.
☑️ Включите вывод стандартных логов сервера добавив переопределения в ваш скрипт целевой сборки сервера:
✅ Теперь вы можете перейти к следующему шагу.
🔧 2. Сборка игрового сервера
Теперь мы соберём и подготовим ваш проект и упакуем его в легко переиспользуемый образ Docker.
Работа в команде разработчиков означает совместное использование кода. Когда что-то идет не так, последнее, что вы хотите услышать — «у меня работает». Игровые серверы должны надежно работать на любой машине, поскольку успешные игры запускают серверы на тысячах серверных машин по всему миру.
Чтобы сделать ваш сервер надежным, мы используем Docker — программное обеспечение виртуализации, гарантирующее, что все зависимости вашего серверного кода вплоть до уровня операционной системы всегда будут точно такими же, независимо от того, как и где запускается сервер.
☑️ Вы можете настроить следующие параметры (или оставить значения по умолчанию):
Имя образа — уникальный идентификатор по вашему выбору, маркирующий вашу сборку сервера перед доставкой.
Обычно это будет включать название вашей игры — например «my-game-server».
Тег образа — идентификатор, указывающий на конкретную версию вашего образа.
Термин «артефакт сборки» иногда используется для обозначения конкретной версии вашего образа.
Метки с отметками времени — отличный вариант для тэгирования, например
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 (PIE) к локальному контейнеру сервера. Откройте консоль Unreal PIE с помощью ~ (тильда) и подключитесь с помощью open <ip>:<port>:
ip=localhostили127.0.0.1(в большинстве случаев эквивалентно),порт= случайное внешнее значение порта контейнера в графическом интерфейсе Docker.

☑️ После того как вы убедитесь, что можете подключиться к контейнеру локального сервера и играть без проблем, вы можете удалить контейнер 🗑️, чтобы освободить ресурсы на компьютере для других программ.
✅ Теперь вы можете перейти к следующему шагу.
☁️ 4. Публикация в Edgegap
Пришло время запустить ваш сервер онлайн! Теперь, когда ваш образ может успешно принимать игроков, мы можем загрузить его на Edgegap и начать запускать в любой точке мира. В этом руководстве мы будем использовать Реестр контейнеров Edgegap (хранилище для образов).
☑️ Выберите имя приложения для маркировки и группировки похожих образов на Edgegap.
☑️ Выберите тег образа, который вы хотите опубликовать и Загрузить образ. Завершение этого шага приведёт к загрузке вашего образа сервера в реестр Edgegap и созданию новой версии приложения в вашем веб-браузере. Обязательно создайте портов контейнера когда будет предложено, с значениями по умолчанию.
Нашли баг и нужно пересобрать/опубликовать снова? Используйте Пересобрать из исходников чтобы Unreal Engine и Unreal Engine с текущими значениями ввода расширения быстро.
✅ Теперь вы можете перейти к следующему шагу.
🚀 5. Развертывание в облаке
Это последний шаг в этом руководстве, после которого у вас будет сервер, развернутый в облаке Edgegap, к которому игроки из любой точки мира смогут подключаться.
☑️ Выберите приложение и версию с предыдущего шага для развертывания.
☑️ Когда будете готовы, нажмите Развернуть в облаке, дождитесь достижения Развёртывания. Завершение этого шага приведёт к запуск нового развертывания в вашей учетной записи Edgegap.
☑️ Убедитесь, что в выводе консоли нет новых ошибок. Также проверьте, что ваши Развёртывания не показывают никаких ошибок и ваши Развёртывания не указывают 100% загрузку ресурсов (vCPU или память), иначе новые подключения игроков могут быть отклонены или ваш сервер застрянет в цикле перезапусков. См. шаги по устранению неполадок ниже для решения любых проблем.
☑️ Теперь мы проведём финальный тест и подключим ваш редактор Unreal Engine к развертыванию в облаке. Возьмите Host развертывания вместо IP сервера и внешнему портуразвертывания, откройте консоль Unreal в игровом клиенте (тильда ~) и введите open {host}:{port} .

Отключите VPN при тестировании для более реалистичных условий и получения развертывания с низкой задержкой.
☑️ Как только вы убедитесь, что можете подключиться к вашему развертыванию без проблем и завершите тестирование, Остановите ваше развертывание чтобы освободить ресурсы в вашей учетной записи для следующей сборки.
Если вы столкнетесь с проблемами, проверьте логи развертывания в панели управления.
Если вы не можете разобраться с проблемой, мы на связи в нашем сообщество Discord и будем рады помочь.
🙌 Поздравляем с вашим первым развертыванием в Edgegap! Если хотите узнать больше, читайте дальше.
👉 Следующие шаги
Как только у вас появится рабочая клиент/сервер конфигурация, убедитесь, что вы сохранили копию вашего проекта (используя систему контроля версий, например git), чтобы вы всегда могли проследить свои шаги в случае возникновения проблем.
Продолжайте чтение, чтобы узнать больше о темах, связанных с жизненным циклом сервера и обнаруживаемостью.
Остановить развертывания
Узнайте о различных методах, как останавливать развертывания когда матч завершился и игроки ушли. Подключите ваш Хранилище конечных точек чтобы получить логи развертывания, иначе они будут удалены!
Внедрённые переменные
Читайте полезную информацию, такую как ID развертывания, IP-адрес сервера, местоположение сервера и многое другое; получая доступ к внедрённым переменным окружения. Каждое развертывание автоматически включает:
Переменные развертывания - автоматически предоставляются Edgegap,
Переменные матчмейкинга - автоматически предоставляются Edgegap при использовании Matchmaker,
Переменные версии приложения - пользовательские пары ключ-значение, настраиваемые вами.
Проверьте, является ли текущий экземпляр клиентом игры или сервером проверив, установлена ли переменная Edgegap:
Профилирование серверов
Чтобы понять и оптимизировать проблемы производительности серверов на Edgegap, изучите Развёртывания, Развёртывания, и другие Развёртывания инструменты, доступные вам.
Вы также можете использовать существующие инструменты профилирования Unreal Engine с Edgegap:
Настройте трассировку на вашем сервере Unreal Engine (встроенные и пользовательские события):
сохраните трассу на диске сервера с помощью
-tracefile, загрузите в стороннее хранилище и анализируйте офлайн,или стримьте данные трассировки с помощью Развёртывания для внутреннего порта
1981по протоколу UDP.
Анализ Memory Insights и Networking Insights и Unreal Engine.
Матчмейкинг
Ручной запуск развертываний, вставка URL и портов не подойдёт для живой игры.
Читать подробнее о матчмейкинге чтобы развертывать автоматически, как раз вовремя, когда игроки приходят онлайн.
Оптимизация сборок серверов
Настройте разделение ассетов, чтобы изолировать ассеты только для клиента от серверных ассетов.
Изучите техники и рекомендации по Asset Chunking от Epic.
Исключите ассеты и плагины, которые предназначены только для клиента и не требуются для работы сервера.
Пересмотрите стратегию подготовки контента (cooking).
Рассмотрите Cooking on the Fly (COTF) чтобы отложить подготовку клиентских ассетов и ускорить сборки сервера.
Реализуйте Level Streaming, чтобы снизить загрузку памяти во время выполнения.
Если в вашем дизайне игроки в основном находятся вместе в одной области карты, level streaming может сократить использование памяти сервером более чем на 60% и улучшить производительность клиентa!
Включайте в сборку только то, что абсолютно необходимо для работы сервера.
Копирование неиспользуемых файлов в ваши образы приводит к раздутому образу, более долгим загрузкам, медленному кешированию и медленному общему запуску сервера. Посмотрите рекомендации по оптимизации Docker-образов.
Рассмотрите использование многоступенчатых сборок Docker (link).
Выделите большие зависимости сервера в отдельный образ для повторного использования в многоступенчатых сборках. Docker кеширует каждый слой и просто переиспользует предыдущую версию и пропустит загрузку этой части, если специально не указано иначе, экономя ваш трафик и время ожидания завершения загрузки.
Если вы не понимаете, почему одна из команд в вашем Dockerfile вызывает ошибку, попробуйте отладить локально. Создайте новый этап непосредственно перед проблемой (добавьте вторую
FROMкоманду), используйте--targetчтобы указать процессу сборки остановиться на проблемном этапе, и затемdocker exec -it {container} /bin/bashчтобы войти в интерактивный терминал внутри контейнера. Затем вы можете использовать shell-команды в базовом образе для дальнейшего исследования (например,topв Ubuntu).
Настройка образа сервера
Мы также поддерживаем добавление вашего собственного 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, чтобы собирать и загружать быстрее.
Сценарий: вам нужно задать параметры, такие как стадия развертывания, версия, режим игры, карта, количество игроков на сервер, частота резервного копирования или похожие.
Плохое решение: создавать отдельный образ для каждой комбинации параметров. Вы потратите всё время на пересборку образов с очень небольшими преимуществами от такого подхода.
Лучшее решение — подставлять конфигурационные параметры «как раз вовремя»:
параметры развертывания — поставляются непосредственно перед выполнением развертывания — селекторы матчмейкинга передаются как переменные окружения или ваша собственная система управления сессиями передаёт переменные окружения во время развертывания,
параметры версии — общие для всех развертываний версии приложения — стадия развертывания, тег артефакта, секреты и конечные точки сторонних сервисов и т. п.; затем
один единый образ — содержит все варианты конфигурации и загружает их при запуске.
НЕ запускайте базы данных в развертываниях Edgegap.
Развертывания Edgegap не предназначены для длительно работающих процессов и могут быть завершены после длительного времени работы без предварительного уведомления. База данных (даже распределённая), запущенная таким образом, может быть остановлена, что приведёт к необратимой потере данных. Если вам нужна база данных, рассмотрите сторонний DBaaS.
Рассмотрите возможность использования нашей Managed Clusters для размещения баз данных и длительно работающих сервисов.
Последнее обновление
Это было полезно?


