> ## 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 多人遊戲伺服器 (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 搶先體驗版的位置不同。

您可以[在此處](https://github.com/PlayFab/MpsAgent/blob/main/LocalMultiplayerAgent/MultiplayerSettingsLinuxContainersOnWindowsSample.json)找到更多 Linux 部署資訊

## 需求

* 安裝 [Unreal Linux 先決條件](https://docs.unrealengine.com/SharingAndReleasing/Linux/GettingStarted/)
* 安裝 [Windows 版 Docker](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，封裝選項位於檔案索引標籤下。
  * 確認您的 Server 和 Shipping 設定，選取 **Linux** 進行建置，然後選取輸出目錄。

## 建立 Linux 伺服器的 Docker 映像

在本節中，我們將設定包含您 Linux 伺服器的 Docker 映像

* 您已建立 Linux 伺服器，請瀏覽至該目錄 (使用 Windows 檔案總管或您選擇的終端機)
* 建立名為 `Dockerfile` 的新檔案
* 使用您選擇的編輯器 (記事本、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 Server 主機連接埠
  * 此連接埠的名稱必須是 `gameport`
* 選取 **Add Build**，並等待您的組建狀態變為 **Deployed**

## 後續步驟

許多使用者會想要透過[連線遊戲用戶端](/zh-TW/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/connect-to-mps-hosted-build)來測試他們的伺服器。

否則，您可以返回主要的 [Unreal GSDK 外掛程式](/zh-TW/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk)指南。


## Related topics

- [GSDK 專案雲端部署](/zh-TW/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-cloud-deployment.md)
- [PlayFab Unreal GSDK 外掛程式概觀](/zh-TW/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/index.md)
- [GSDK 專案測試和偵錯](/zh-TW/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-local-deployment-and-debugging.md)
- [連線至雲端裝載的 Unreal 伺服器](/zh-TW/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/connect-to-mps-hosted-build.md)
- [使用 PowerShell/API 部署組建](/zh-TW/services/playfab/multiplayer/servers/deploy-using-powershell-api.md)
