Unity
Учитесь на практике и разверните свой первый выделенный сервер на Edgegap. К концу этого руководства вы развернёте выделенный сервер с Edgegap бесплатно.
✔️ Подготовка
Прежде чем начать, убедитесь, что создать бесплатную учетную запись на Edgegap (кредитная карта не требуется).
Настройте несколько основных параметров на вашей машине для разработки:
⚙️ 1. Подключение аккаунта
☑️ Войдите в систему и убедитесь, что в консоли Unity нет новых ошибок, связанных с плагином Edgegap.
✅ Вы можете перейти к следующему шагу.
🔧 2. Сборка игрового сервера
Независимо от того, используете ли вы Windows, Mac или Linux-машину, вам нужно собрать сервер для выполнения на Linux, поскольку большинство облачных провайдеров сегодня (включая Edgegap) работают на Linux. Не волнуйтесь, для этого с нашим плагином не требуется знание Linux.
☑️ Проверьте, что вы установили необходимые инструменты для сборки Unity под Linux.
☑️ Отредактируйте настройки сборки, чтобы убедиться, что все необходимые сцены игры включены.
☑️ Необязательно: добавьте скрипт, специфичный для сетевого кода, для проверки портов и инициализации окружения в вашу начальную серверную сцену через меню Edgegap Server Hosting (правый клик / ➕ в окне иерархии).

☑️ Когда вы довольны конфигурацией, нажмите Собрать сервер, дождитесь завершения процесса и убедитесь, что в консоли Unity нет новых ошибок. Выполнение этого шага приведёт к появлению новой папки в корне вашего проекта - Builds/EdgegapServer/ServerBuild .
✅ Вы можете перейти к следующему шагу.
🐋 3. Контейнеризация сервера
Работа в команде разработчиков означает совместное использование кода. Когда что-то идёт не так, последнее, что вы хотите услышать — «у меня работает». Игровые серверы должны надёжно работать на любой машине, так как успешные игры запускают серверы на тысячах серверных машин по всему миру.
Чтобы сделать ваш сервер надёжным, мы используем Docker — ПО для виртуализации, гарантирующее, что все зависимости вашего серверного кода вплоть до уровня операционной системы всегда будут точно такими же, независимо от того, как и где сервер запускается.
☑️ Пока начните с нажатия Проверить кнопки, чтобы убедиться, что вы выполнили Инструменты разработчика.
☑️ Вы можете настроить следующие параметры (или оставить значения по умолчанию):
Путь сборки — это относительный путь к артефакту сборки сервера, пока оставим значение по умолчанию.
Docker принимает пути сборки только относительно корневой папки проекта, храните сборки внутри папки проекта.
Имя образа — уникальный идентификатор по вашему выбору, маркирующий сборку сервера перед отправкой.
Обычно это включает название вашей игры — например «my-game-server».
Тег образа — идентификатор, указывающий на конкретную версию вашего образа.
Термин «артефакт сборки» иногда используется для обозначения конкретной версии вашего образа.
Метки с временными метками — отличный вариант, например
2024.01.30-16.23.00-UTC.
Путь к Dockerfile может использоваться для настройки рецепта ваших образов.
Мы рекомендуем пока оставить настройку по умолчанию, вы можете прочитать больше позже в разделе Unity.
Необязательные параметры сборки docker могут использоваться для более точных указаний Docker по тонкостям.
Мы рекомендуем пока оставить настройку по умолчанию, вы можете прочитать больше позже в документации Docker.
☑️ Когда вы довольны конфигурацией, нажмите Контейнеризировать с помощью Docker, дождитесь завершения процесса и убедитесь, что в консоли Unity нет новых ошибок. Выполнение этого шага приведёт к появлению новый образ появится на вашей локальной машине. Вы можете проверить это либо в Docker Desktop во вкладке Images под Local (по умолчанию), либо в docker CLI, выполнив docker images .
✅ Вы можете перейти к следующему шагу.
🧪 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 нет новых ошибок. Выполнение этого шага приведёт к запуску нового контейнера на вашей машине разработки.
☑️ Теперь пора подключить клиент вашей игры в Unity Editor к локальному docker-контейнеру чтобы проверить, правильно ли функционирует образ сервера. Найдите настройки клиента сетевого кода и введите:
localhostили127.0.0.1(эквивалент в большинстве случаев) вместо IP сервера,рандомизированное значение внешнего порта, найденное в Docker Desktop / Containers / edgegap-server-test.

☑️ После того как вы убедитесь, что можете подключиться к контейнеру локального сервера и играть без проблем, вы можете удалить контейнер 🗑️, чтобы освободить ресурсы на компьютере для других программ.
✅ Вы можете перейти к следующему шагу.
☁️ 5. Загрузка в Edgegap
Пришло время запустить ваш сервер онлайн! Теперь, когда ваш образ может успешно принимать игроков, мы можем загрузить его на Edgegap и начать запускать в любой точке мира. В этом руководстве мы будем использовать Реестр контейнеров Edgegap (хранилище для образов).
☑️ Вы можете настроить следующие параметры (или оставить значения по умолчанию):
Название приложения в Edgegap может соответствовать имени вашего образа или быть настроено.
Мы решили пока скопировать имя вашего образа.
Версия приложения в Edgegap может соответствовать вашему тегу или быть настроена.
Метки со временными метками — отличный вариант для названий версий приложения, например
2024.01.30-16.50.20-UTC.Несколько версий приложения могут указывать на один и тот же тег образа, например
v1.1.0иdev.Узнать больше о Приложения и версии позже.
Имя образа сервера из шага Unity.
Тег образа сервера из шага Unity.
Найдите любое имя образа и тег, сохранённые на вашей машине, в Docker Desktop / Images.
☑️ Когда вы довольны конфигурацией, нажмите Загрузить образ и создать версию приложения, дождитесь завершения процесса и убедитесь, что в консоли Unity нет новых ошибок.
☑️ Вас перенаправят в нашу Панель управления, где вы можете настроить дополнительные параметры. Выполнение этого шага приведёт к созданию новой версии приложения, а ваш артефакт сборки будет промечен и загружен в реестр контейнеров Edgegap.
☑️ Вам будет предложено определить порт для новой версии приложения. Убедитесь, что установили то же значение порта сервера, что и в шаге Unity в настройках Transport или специфичных для сетевого кода.
✅ Вы можете перейти к следующему шагу.
🚀 6. Развертывание в облаке
Это последний шаг в этом руководстве, после которого у вас будет сервер, развернутый в облаке Edgegap, к которому игроки из любой точки мира смогут подключаться.
☑️ Выберите приложение и версию с предыдущего шага для развертывания.
☑️ Когда будете готовы, нажмите Развернуть в облаке, дождитесь достижения Развёртывания. Завершение этого шага приведёт к запуск нового развертывания в вашей учетной записи Edgegap.
☑️ Убедитесь, что в выводе консоли нет новых ошибок. Также проверьте, что ваши Развёртывания не показывают никаких ошибок и ваши Развёртывания не указывают 100% загрузку ресурсов (vCPU или память), иначе новые подключения игроков могут быть отклонены или ваш сервер застрянет в цикле перезапусков. См. шаги по устранению неполадок ниже для решения любых проблем.
☑️ Теперь мы проведём окончательный тест и подключим клиент вашей игры в Unity Editor к вашему облачному развертыванию. Введите данные подключения клиента игры из:
Хост URL указывающий на IP сервера, обычно в
NetworkManagerкомпоненте.Внешнее сопоставление порта соответствует внутреннему слушающему порту сервера, обычно в компоненте Transport.

Отключите VPN при тестировании для более реалистичных условий и получения развертывания с низкой задержкой.
☑️ Как только вы убедитесь, что можете подключиться к вашему развертыванию без проблем и завершите тестирование, Остановите ваше развертывание чтобы освободить ресурсы в вашей учетной записи для следующей сборки.
Если вы столкнетесь с проблемами, проверьте логи развертывания в панели управления.
Если вы не можете разобраться с проблемой, мы на связи в нашем сообщество Discord и будем рады помочь.
🙌 Поздравляем с вашим первым развертыванием в Edgegap! Если хотите узнать больше, читайте дальше.
👉 Следующие шаги
Как только у вас появится рабочая клиент/сервер конфигурация, убедитесь, что вы сохранили копию вашего проекта (используя систему контроля версий, например git), чтобы вы всегда могли проследить свои шаги в случае возникновения проблем.
Продолжайте чтение, чтобы узнать больше о темах, связанных с жизненным циклом сервера и обнаруживаемостью.
Остановить деплойменты
Узнайте о различных методах остановки деплойментов после завершения матча и выхода игроков.
Внедрённые переменные
Получайте полезную информацию, такую как ID деплоймента, IP-адрес сервера, местоположение сервера и многое другое; через доступ к внедрённым переменным окружения. Каждый деплоймент автоматически включает:
Переменные деплоймента - автоматически предоставляются Edgegap,
Переменные матчмейкинга - автоматически предоставляются Edgegap при использовании Матчмейкер,
Переменные версии приложения - пользовательские пары ключ-значение, настраиваемые вами.
Проверьте, является ли текущий экземпляр клиентом игры или сервером проверив, установлена ли переменная Edgegap:
Матчмейкинг
Запуск деплойментов вручную, вставка URL и портов не подходит для живой игры.
Узнайте больше о матчмейкинге чтобы развертывать автоматически, как раз вовремя, когда игроки выходят в сеть.
Оптимизация серверных сборок
Пересобирайте только изменённые с последней сборки ассеты.
Рассмотрите использование Инкрементальных сборок Unity чтобы ускорить время сборки.
Рассмотрите использование Инкрементальных сборок Unity чтобы ускорить время сборки.
Включайте только то, что действительно необходимо для работы сервера.
Копирование неиспользуемых файлов в образы приводит к раздутому размеру образа, более длительным загрузкам, медленному кэшированию и более медленному старту сервера. Просмотрите рекомендации по оптимизации Docker-образа.
Отключите статическую батчинг мешей, чтобы уменьшить размер образа.
Сжимайте меши, чтобы уменьшить размер образа.
Сжатие вершин не влияет на размер образа.
Реализуйте условную отложенную загрузку ресурсов.
Исключите ресурсы только для клиента, установив для текстур и мешей отключённое чтение/запись на CPU.
Рассмотрите использование Unity Addressables для ваших клиентских сборок, чтобы ускорить сборки и деплойменты путём загрузки ресурсов по мере необходимости, или пропуска загрузки некоторых ресурсов в серверных сборках, проверяя наличие Инжектируемые переменные.
Рассмотрите использование многоступенчатых сборок 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, чтобы собирать и загружать быстрее.
Сценарий: вам нужно задать параметры, такие как стадия развертывания, версия, режим игры, карта, количество игроков на сервер, частота резервного копирования или похожие.
Плохое решение: создавать отдельный образ для каждой комбинации параметров. Вы потратите всё время на пересборку образов с очень небольшими преимуществами от такого подхода.
Лучшее решение — подставлять конфигурационные параметры «как раз вовремя»:
параметры развертывания — поставляются непосредственно перед выполнением развертывания — селекторы матчмейкинга передаются как переменные окружения или ваша собственная система управления сессиями передаёт переменные окружения во время развертывания,
параметры версии — общие для всех развертываний версии приложения — стадия развертывания, тег артефакта, секреты и конечные точки сторонних сервисов и т. п.; затем
один единый образ — содержит все варианты конфигурации и загружает их при запуске.
НЕ запускайте базы данных в развертываниях Edgegap.
Развертывания Edgegap не предназначены для длительно работающих процессов и могут быть завершены после длительного времени работы без предварительного уведомления. База данных (даже распределённая), запущенная таким образом, может быть остановлена, что приведёт к необратимой потере данных. Если вам нужна база данных, рассмотрите сторонний DBaaS.
Рассмотрите возможность использования нашей Managed Clusters для размещения баз данных и длительно работающих сервисов.
Последнее обновление
Это было полезно?



