> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 将 Linux Unreal 服务器部署到 MPS 云

> 构建并将 Unreal Engine 5 Linux 专用服务器部署到 PlayFab Multiplayer Servers (MPS),包括从 Windows 交叉编译以及 UE 4.26 或 4.27 的相关说明。

# 在 PlayFab 上设置 Linux 专用服务器

本指南旨在描述构建和验证 Linux 专用服务器所需的所有步骤。以下步骤专门针对 Unreal Engine 5(包括抢先体验版和正式版)。相同的步骤已经过测试,也适用于 UE 4.26 和 UE 4.27,只是在 Unreal Engine UI 上打包选项的位置有些细微差别,UE 4.27 和 UE5 抢先体验版中的位置不同。

有关更多 Linux 部署信息,请参见[此处](https://github.com/PlayFab/MpsAgent/blob/main/LocalMultiplayerAgent/MultiplayerSettingsLinuxContainersOnWindowsSample.json)

## 要求

* 安装 [Unreal Linux 先决条件](https://docs.unrealengine.com/SharingAndReleasing/Linux/GettingStarted/)
* 安装 [Docker for Windows](https://docs.docker.com/desktop/windows/install/)

## 说明

* 从 **Unreal Linux 先决条件**中,下载与您已安装的 Unreal Engine 对应的工具链,并运行可执行文件。请注意,与本指南中的许多部分一样,这些步骤仅在您的 Unreal Engine 是从源代码构建时才有效。
  * 安装完成后,检查您的 Windows 环境变量,并确认存在以下系统变量:**LINUX\_MULTIARCH\_ROOT**。
* 在您的 Unreal Engine 源代码目录中:
  * 重新运行:`Setup.bat`
  * 重新运行:`GenerateProjectFiles.bat`
* 返回到您自己的项目:
  * 右键单击您的 `{ProjectName}.uproject` 文件,选择 **Generate Visual Studio project files**
  * 在 Visual Studio 中打开 \{ProjectName}.sln 文件
  * 将配置设置为 **Development Editor**
  * 构建并运行 Unreal Editor
* 此时,您应该能够将您的项目打包为 Linux 服务器到您选择的目录中。
  * 对于 Unreal Engine 5,在编辑器中,选择屏幕右上角的打包选项,现在应该可以选择 Linux 选项。对于 UE 4.26 和 UE 4.27,打包选项在 file 标签下。
  * 确认您的 Server & Shipping 配置,选择 **Linux** 进行构建,然后选择输出目录。

## 创建 Linux 服务器的 Docker 镜像

在本节中,我们将设置一个包含您的 Linux 服务器的 Docker 镜像

* 现在您已经创建了 Linux 服务器,请导航到该目录(Windows 资源管理器或您选择的终端)
* 创建一个名为:`Dockerfile` 的新文件
* 使用您选择的编辑器编辑该文件(notepad、vim、emacs 等)
* 复制并粘贴下方显示的内容。请务必将 \[YourProjectNameServer].sh 替换为您自己的 linux 服务器可执行文件的名称(位于同一目录中)

```Docker theme={null}
FROM ubuntu:18.04

# Unreal refuses to run as root user, so we must create a user to run as
# Docker uses root by default
RUN useradd --system ue
USER ue

EXPOSE 7777/udp

WORKDIR /server

COPY --chown=ue:ue . /server
USER root
CMD chown -R ue.ue $PF_SERVER_LOG_DIRECTORY && su ue -c ./YourGameNameServer.sh
```

注意:**chown** 命令使 \$PF\_SERVER\_LOG\_DIRECTORY 可被您的服务器进程访问,然后 && 链接命令以执行您的服务器

* 使用您选择的终端,导航到 Linux 服务器目录
  * Windows 用户通常使用 cmd 或 powershell,不过也可以通过第三方工具或 WSL 使用 bash
  * Mac 和 Linux 用户通常使用 bash
* 运行:`docker build -t "[imageName]:[tag]" .`,其中 imageName 和 tag 是您选择的选项。
  * 记住这些名称,您稍后将再次使用它们
  * 例如:分别为 **YourProjectNameServer** 和 **01**
  * **tag** 元素通常用于对服务器实例进行版本控制
  * 这些标签将在稍后的步骤中使用
  * 如果您忘记了,可以在终端上输入 **docker images** 来检索 imageName 和 tag
* 在终端上输入 **docker images** 来检查 docker 镜像是否成功创建。
* 保持此终端窗口打开并放在一旁,因为我们稍后还会有更多命令
  * (在后续步骤中标记为 \[Docker terminal])

## 将容器镜像上传到 PlayFab Azure 注册表

此时,您已准备好将 docker 镜像推送到 PlayFab Azure Container Registry,以便可以将其用于在 PlayFab 上启动您的构建。

* 导航到 [PlayFab 开发者门户](https://developer.playfab.com/)
* 选择您的标题
* 选择左侧的 **Multiplayer** 选项卡
* 选择屏幕右侧的 **New Build**。
* 选择一个名称
* 选择 VM 类型,对于 ThirdPersonMP 项目,**Dasv4 (2 cores)** 就足够了
* 在 Server Details 下,将 Server Type 设置为 **Container**,将 Operating System 设置为 **Linux**。
* 选择 **Upload to container registry**。
* 在弹出的窗口中:
  * 记住此窗口中的 \[AzureUsername],后续步骤中将多次使用
  * 选择 **Copy Docker Login Command**
* 返回到 \{Docker terminal} 窗口
  * 将 Docker Login 命令粘贴到 \[Docker terminal] 中。此命令将您登录到 PlayFab 使用的 Azure 注册表。
  * 输入:`docker tag [imageName]:[tag] [AzureUsername].azurecr.io/[imageName]:[tag]`
  * 输入:`docker push [AzureUsername].azurecr.io/[imageName]:[tag]`
  * 请记住,AzureUsername 显示在 PlayFab 开发者门户上,而 imageName 和 tag 是您之前选择的。
* 返回到 PlayFab 网站,在 New Build 页面的 Server Details 下,选择 Container image 旁边的 Refresh。
* 单击箭头按钮,您应该能够看到并选择您上传的 docker 镜像以及相应的标签。
* 在 Regions 区块中,选择靠近您的区域,并将 Standby 和 Max 都设置为 1(仅用于测试)
* 在 Network 区块中,将 Port Name 字段设置为 `gameport`
  * 必须定义将用于连接到游戏服务器的端口
  * Unreal GSDK 包含自动读取此端口的代码,并根据此值在内部覆盖 Unreal 服务器主机端口
  * 此端口的名称必须是 `gameport`
* 选择 **Add Build**,然后等待您的构建状态变为 **Deployed**

## 后续步骤

许多用户可能希望通过[连接游戏客户端](/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/connect-to-mps-hosted-build)来测试他们的服务器。

否则,您可以返回到主要的 [Unreal GSDK 插件](/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk)指南。


## Related topics

- [GSDK 项目云部署](/zh-CN/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-cloud-deployment.md)
- [PlayFab Unreal GSDK 插件概览](/zh-CN/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/index.md)
- [GSDK 项目测试和调试](/zh-CN/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-local-deployment-and-debugging.md)
- [使用 PowerShell/API 部署构建](/zh-CN/services/playfab/multiplayer/servers/deploy-using-powershell-api.md)
- [创建和部署 Linux 构建](/zh-CN/services/playfab/multiplayer/servers/deploying-linux-based-builds.md)
