# Дополнительные методы сборки

Эти подходы обычно медленнее и требуют более глубокого понимания Unreal Engine.

{% hint style="success" %}
См. [](https://docs.edgegap.com/ru/unreal-engine "mention") для ваших первых шагов с хостингом игровых серверов Unreal Engine на Edgegap.
{% endhint %}

Изучите альтернативные методы сборки, подходящие для более продвинутых пользователей Unreal Engine и Edgegap:

1. [#build-from-containers](#build-from-containers "mention") — это быстрый и автоматизированный метод, подходящий для непрерывной интеграции.
2. [#build-from-plugin](#build-from-plugin "mention") — устаревший метод сборки, требующий сборки Unreal Engine из исходников.

## ⚡ Сборка с помощью скриптов

Сборка с помощью скриптов — это быстрый, полностью автоматизированный и простой метод, подходящий для непрерывной интеграции.

### Подготовка <a href="#scripts-before-starting" id="scripts-before-starting"></a>

### 1. Настроить проект <a href="#scripts-configure-game-builds" id="scripts-configure-game-builds"></a>

### 2. Собрать и опубликовать <a href="#scripts-build-and-upload-to-edgegap" id="scripts-build-and-upload-to-edgegap"></a>

☑️ **Убедитесь, что Docker установлен и запущен.**

{% embed url="<https://github.com/edgegap/edgegap-unreal-buildutils>" %}

☑️ **Скачайте наш Edgegap Build Utils** архив, включающий:

* платформенно-специфичные скрипты сборки:
  * `BuildAndUpload.ps1`  для Windows,
  * `BuildAndUpload.sh`  для macOS и Linux,
* `Dockerfile`  — рецепт для сборки ваших docker-образов,
* `dockerignore`  — список некритичных файлов для удаления и ускорения сборок,
* `StartServer.sh`  — утилитный скрипт, управляющий жизненным циклом Unreal Engine во время выполнения.

☑️ **Переместите `edgegap-unreal-buildutils` папку в корневой каталог вашего проекта.**

☑️ **Отредактируйте `BuildAndUpload`  скрипт для вашей платформы** чтобы настроить:

* учетные данные GitHub, используемые для получения предсобранных образов Unreal Engine для Linux-серверов,
* детали проекта — версия движка, конфигурация сервера, имя файла .uproject,
* [Edgegap Registry](https://app.edgegap.com/registry-management/repositories/list) учетные данные, используемые для загрузки ваших готовых сборок.

☑️ **Выполните отредактированный скрипт** чтобы запустить процесс сборки и загрузки. Завершение этого шага добавит новый **образ в вашу** [страницу панели реестра контейнеров Edgegap в вашем репозитории](https://app.edgegap.com/registry-management/repositories/list).

☑️ Вы будете автоматически перенаправлены на **создание нового** [#app-versions](https://docs.edgegap.com/ru/learn/orkestraciya/application-and-versions#app-versions "mention") в [панели управления](https://app.edgegap.com/application-management/applications/list)**.**

✅ Теперь вы можете перейти к следующему шагу, перейдите к [#test-your-server-locally](#test-your-server-locally "mention").

## ⚡ Сборка из плагина <a href="#build-from-plugin" id="build-from-plugin"></a>

Наш устаревший плагин включает расширенные утилиты и требует сборки Unreal Engine из исходников.

### Подготовка <a href="#plugin-before-starting" id="plugin-before-starting"></a>

<details>

<summary>Настройте вашу среду разработки</summary>

* [Скачайте исходный код Unreal Engine](https://dev.epicgames.com/documentation/en-us/unreal-engine/downloading-unreal-engine-source-code#downloadingthesourcecode).
* [Настройте Visual Studio](https://dev.epicgames.com/documentation/en-us/unreal-engine/setting-up-visual-studio-development-environment-for-cplusplus-projects-in-unreal-engine).

</details>

<details>

<summary>Установите официальный плагин Edgegap для Unreal Engine</summary>

Выберите один из официальных плагинов:

* скачать [#integration-kit](https://docs.edgegap.com/ru/developer-tools#integration-kit "mention"),
* или скачать [#legacy-plugin](https://docs.edgegap.com/ru/developer-tools#legacy-plugin "mention").

</details>

### 1. Настроить проект <a href="#scripts-configure-game-builds" id="scripts-configure-game-builds"></a>

☑️ [Соберите вашу версию Unreal Engine из исходников](https://dev.epicgames.com/documentation/en-us/unreal-engine/building-unreal-engine-from-source) на вашей машине разработчика,

* установите [конкретную ветку релиза (например, ](https://github.com/EpicGames/UnrealEngine/tree/5.5)[`5.5`](https://github.com/EpicGames/UnrealEngine/tree/5.5)[)](https://github.com/EpicGames/UnrealEngine/tree/5.5) чтобы собирать на стабильной основе,
* **используйте твердотельный накопитель (SSD)** для ускорения сборок (с \~12+ часов до \~2+ часов),
* это требуется только в первый раз и каждый раз при обновлении версии Unreal Engine.

{% hint style="warning" %}
**Скачивайте ветку с помощью git-клиента!** Использование интерфейса GitHub всегда скачает нестабильную `release` ветку.
{% endhint %}

☑️ [Установите Unreal Cross-Compiling Toolchain](https://dev.epicgames.com/documentation/en-us/unreal-engine/linux-development-requirements-for-unreal-engine) для сборки игровых серверов для Linux.

☑️ **Перезагрузите вашу машину разработчика**, иначе позже вы столкнетесь с ошибками!

### 2. Собрать и опубликовать <a href="#plugin-build-and-upload-to-edgegap" id="plugin-build-and-upload-to-edgegap"></a>

☑️ **Убедитесь, что Docker установлен и запущен.**

☑️ [Пересоберите наш плагин](https://dev.epicgames.com/community/learning/tutorials/qz93/unreal-engine-building-plugins) для вашей пользовательской версии Unreal Engine, собранной из исходников.

☑️ **Скопируйте скомпилированный плагин** в вашу `Plugins` папку **в корне вашего проекта Unreal** (не движка).

☑️ **Запустите ваш новый Unreal Engine** из Visual Studio и **откройте пункт панели инструментов Edit / Plugins**.

☑️ **Включите наш плагин** в разделе **INSTALLED / Other**.

☑️ **Настройте наш плагин** открыв пункт панели инструментов **Edit / Project Settings / Edgegap**:

{% hint style="warning" %}
Всегда нажимайте Enter после редактирования вводимых значений, чтобы **убедиться, что они корректно сохранены**.
{% endhint %}

* **API Token** нужен для загрузки вашего сервера в Edgegap, получите его, нажав Get Token.
* **Название приложения** в Edgegap может совпадать с названием вашего проекта или быть настроенным; убедитесь, что используете только строчные буквы, цифры или символы дефис `-` и нижнее подчеркивание `_`.
* **Image Path** при необходимости предоставляет пользовательскую иконку для вашего игрового сервера на Edgegap, пока пропустите.
* **Название версии** полезно для отслеживания совместимости клиент/сервер и отката в случае проблем.
  * Метки времени — отличный вариант для названий версий приложения, например, `2024.01.30-16.50.20-UTC` .
  * Несколько версий приложения могут указывать на один и тот же тег образа, например `v1.1.0` и `dev` .
  * Узнайте больше о [application-and-versions](https://docs.edgegap.com/ru/learn/orkestraciya/application-and-versions "mention") позже.

{% hint style="warning" %}
**Не переиспользуйте `latest` версию** чтобы предотвратить развертывание нашей системой устаревшего (кэшированного) образа.
{% endhint %}

☑️ Нажмите **Create Application.** Завершение этого шага приведет к **появлению нового приложения** в [в Edgegap Dashboard](https://app.edgegap.com/application-management/applications/list).

☑️ Пока пропустите настройки пользовательского реестра контейнеров, позже вы можете использовать сторонний реестр, если захотите.

☑️ Когда вы будете довольны конфигурацией, нажмите **Build and Push**, дождитесь завершения процесса и убедитесь, что в консоли Unreal не появилось новых ошибок. Завершение этого шага приведет к **появлению новой папки в корне вашего проекта** - `Saved/LinuxServer`. Кроме того, **в вашем** [разделе панели реестра контейнеров Edgegap под вашим репозиторием теперь появился новый образ](https://app.edgegap.com/registry-management/repositories/list), и новая [#app-versions](https://docs.edgegap.com/ru/learn/orkestraciya/application-and-versions#app-versions "mention") **появилась в вашем** [разделе панели управления под вашим приложением](https://app.edgegap.com/application-management/applications/list)**.**

☑️ В вашей новой версии приложения установите переменную окружения `TARGET_FILE_NAME`  чтобы она совпадала с вашим значением `DefaultServerTarget`  из шага [#id-2.-configure-game-server-builds-1](#id-2.-configure-game-server-builds-1 "mention").

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

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

Продолжайте к [#id-5.-deploy-to-cloud](https://docs.edgegap.com/ru/unreal-engine/..#id-5.-deploy-to-cloud "mention") с нашей функцией [Dashboard Deployment](https://app.edgegap.com/deployment-management/deployments/list) и узнайте больше об остановке ваших развертываний, внедряемых переменных и параметризации, а также обнаруживаемости сервера.
