> ## 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 ビルドの作成とデプロイ

> Linux コンテナー イメージまたは GSDK を使用したプロセスベースのサーバーを使用して、PlayFab Multiplayer Servers 上に Linux ゲーム サーバー ビルドを作成しデプロイします。

この記事には、コンテナーとプロセスの両方を使用して PlayFab Multiplayer Servers 上に Linux ビルドを作成する方法の詳細が含まれています。

## Linux コンテナー イメージの作成とデプロイ

このセクションでは、Linux コンテナー イメージの作成とデプロイに役立つ具体的な手順を説明します。

[仮想マシン (VM) の作成](/services/playfab/multiplayer/servers/deploying-playfab-multiplayer-server-builds) で説明されているように、サービスを使用する際、予算と需要に応じてグローバルにゲーム サーバーとして自動的に起動する VM を構成します。そのため、VM を明示的に作成するのではなく、代わりに VM がどのように作成されるかを決定するパラメーターを定義します。このプロセスをビルドのデプロイまたは作成と呼びます。

PlayFab Multiplayer Servers は Linux ベースおよび Windows ベースの両方のゲーム サーバーをデプロイできます。Linux コンテナー用のビルドがデプロイされる方法は、いくつかの重要な違いを除いて、Windows コンテナーと類似しています。詳細については、[Windows と Linux コンテナー イメージの違い](#windows-and-linux-container-image-differences) を参照してください。Linux コンテナーを管理するために PowerShell/API を使用したい場合は、[API を使用した Linux コンテナー イメージの管理](#manage-linux-container-images-using-apis) を参照してください。

Linux ベースのゲーム サーバーを使用する場合、マネージド コンテナー イメージを使用する代わりに、コンテナー イメージを作成してコンテナー レジストリにアップロードする必要があります。コンテナーを簡単にアップロードできるように、アカウントには Azure コンテナー レジストリが付属しています。

## 必要な知識

* [Docker コンテナー](https://learn.microsoft.com/en-us/training/modules/intro-to-docker-containers/)

## Windows 開発デバイスのセットアップ

この手順は、Linux コンテナー イメージを作成するために Windows 開発デバイスを使用したい場合にのみ必要です。または、Docker がインストールされた Linux OS デバイス、VM、またはデュアル OS システムを使用できます。

[Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/) を使用すると、開発デバイスを使い慣れた Windows 環境で Linux コンテナー イメージを作成および管理できます。WSL を使用することで、従来の Linux 仮想マシンやデュアル ブートのセットアップのオーバーヘッドが不要になります。

1. [WSL 2 をインストール](https://learn.microsoft.com/en-us/windows/wsl/) します。マシンを再起動し、WSL 2 を使用していることを確認してください。Linux カーネル更新パッケージもインストールする必要があります。
2. [WSL を使用する Linux ディストリビューションをインストール](https://learn.microsoft.com/en-us/windows/wsl/install#step-6---install-your-linux-distribution-of-choice) します。当社の VM は Ubuntu を使用していますが、コンテナー イメージ用に任意のディストリビューションを選択できます。[Ubuntu 20.04 Long-Term Support (LTS)](https://www.microsoft.com/store/apps/9n6svws3rx71) 以降のバージョンの使用を検討してください。
3. [WSL 2 で Docker Desktop for Windows をインストール](https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-containers) します。直接のダウンロード リンクについては、[Docker Desktop for Windows (外部)](https://hub.docker.com/editions/community/docker-ce-desktop-windows/) を参照してください。

**WSL 2 のセットアップの確認**

* PowerShell を開く
* **wsl -l -v** を実行して、docker-desktop と ubuntu の両方のアプリケーションが WSL 2 (バージョン 2) で実行されていることを確認します

**WSL 用に Docker が正しくセットアップされていることを確認**

* WSL ターミナルを開く
* **docker version** を実行して、Docker がインストールされており、使用されている OS が Linux であることを確認します

<Tip>
  Linux C++ アプリケーションの開発とデバッグには、[Visual Studio 2019 の WSL](https://learn.microsoft.com/en-us/cpp/linux/) を使用してください。
</Tip>

## PlayFab コンテナー レジストリのサインイン資格情報の取得

Azure コンテナー レジストリのアカウントは PlayFab アカウントに関連付けられています。そこにアップロードされたコンテナーにアクセスできるのはあなたのみです。この Azure コンテナー レジストリは無料です。

* Game Manager で、ゲーム タイトルを選択し、次に **Multiplayer** > **Servers** を選択します。**New build** を選択してビルド作成ページを開きます。
* 仮想マシン オペレーティング システムとして **Linux** を選択します。
* サインイン資格情報 (名前、パスワード、customer5555555.azurecr.io) をメモしておきます。この情報は後で必要になります

<img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/create-your-first-server/server-new-build-container-linux.PNG?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=0e2c264ec94672fe84912799f1acab32" alt="New build with Linux platform selected" width="800" height="551" data-path="images/playfab/multiplayer/servers/create-your-first-server/server-new-build-container-linux.PNG" />

PowerShell/API を使用したい場合は、[GetContainerRegistryCredentials](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayerserver/getcontainerregistrycredentials) API を呼び出して、コンテナー レジストリ アドレス、ユーザー名、パスワードを取得します。

## Linux コンテナー イメージの作成と Azure Container Registry へのプッシュ

以下の手順は、カスタム Linux コンテナー イメージを作成してプッシュするのに役立ちます。

#### ゲーム サーバー アプリケーションと GSDK の統合

Windows サーバーを使用するのと同様に、ゲーム サーバー コードを PlayFab Multiplayer Server SDK (GSDK) と統合する必要があります。GSDK 統合はコンテナー イメージの一部にできます。

手順については、[ゲーム サーバー ビルドの作成](/services/playfab/multiplayer/servers/author-a-game-server-build) および [PlayFab Game Server SDK (GSDK) とタイトルの統合](/services/playfab/multiplayer/servers/integrating-game-servers-with-gsdk) を参照してください。

#### Dockerfile の作成

Dockerfile は拡張子のないテキスト ファイルで、特定のコンテナー イメージをビルドするために必要なすべてのコマンドを含みます。

1. **メモ帳** または任意のエディターを開きます
2. コンテナーの実行とビルドに必要な特定のコマンドを追加します。このファイルの例については、[Wrapper サンプル](/services/playfab/multiplayer/servers/wrapper-sample) で提供されている [DockerFile](https://github.com/PlayFab/MpsSamples/blob/master/wrappingGsdk/Dockerfile) を参照してください。このファイルの作成方法の詳細については、[Dockerfile 形式 (外部)](https://docs.docker.com/engine/reference/builder/#format) および [Dockerfile 作成時のベスト プラクティス (外部)](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/) を参照してください
3. ファイルを Dockerfile として保存します。理想的には空のフォルダー/ディレクトリに保存してください。コンテナー イメージのビルドに必要な他のファイルもこのフォルダーに追加する必要があります。

**メモ帳** を使用する場合の保存手順:

* **ファイル**> **名前を付けて保存...** を選択して保存オプションを開きます
* ファイルを保存したいフォルダーに移動します
* **ファイル名:** の下で、クォート付きで **"Dockerfile"** を使用します。
* **ファイルの種類:** には **すべてのファイル** を選択します
* **UTF-8** エンコーディングを選択します
* **保存** を選択します

#### Linux コンテナー イメージのビルドとアップロード

1. Docker がインストールされた Linux ターミナルを開きます。
2. 先ほど取得したサインイン資格情報を使用して、次の Docker コマンドを実行します。次に、画面の指示に従ってユーザー名とパスワードを入力します。

```docker theme={null}
docker login customer5555555.azurecr.io
```

[docker sign in](https://docs.docker.com/engine/reference/commandline/login/) は、Game Manager に示されているように Azure コンテナー レジストリにログインします。

```docker theme={null}
username: customer5555555
password: HRDFOdIebJkvBAS+usa55555555
```

3. コンテナー イメージのビルド

次のコマンドを実行して、現在のディレクトリの Dockerfile を使用してコンテナー イメージをビルドします。**docker build** コマンドの最後に "." があります。

**-t** フラグは、新しいコンテナー イメージの name:tag 情報を指定します。ビルドが成功した場合、name と tag が使用されます。ビルド エラーがある場合、次の手順に進む前にそれらを修正する必要があります。

以下の例では、リポジトリ名は **customer5555555.azurecr.io/pvp\_gameserver** で、タグは **v1** です。詳細については、[docker build コマンド リファレンス (外部リンク)](https://docs.docker.com/engine/reference/commandline/build/) と [Dockerfile のビルド (外部リンク)](https://docs.docker.com/engine/reference/builder/) を参照してください。

WSL を使用している場合、Windows C: ドライブは /mnt/c にマウントされます。

* 次に **cd /mnt/c/path/to/your/Dockerfile** を実行して、Dockerfile があるパスに切り替えます。
  詳細については、[C ドライブへのアクセス](https://learn.microsoft.com/en-us/windows/wsl/faq#how-do-i-access-my-c--drive-) を参照してください。

```docker theme={null}
docker build -t customer5555555.azurecr.io/pvp_gameserver:v1 .
```

<Tip>
  Linux を使用する場合、**pwd** を実行して現在いるディレクトリを確認できます。
</Tip>

4. コンテナー イメージのアップロード

イメージを PlayFab コンテナー レジストリにプッシュするコマンドを実行します。アップロードするコンテナー イメージの意味のある役立つ name:tag の組み合わせを選択してください。コンテナーを PlayFab が運用するレジストリにアップロードするには、[docker push](https://docs.docker.com/engine/reference/commandline/push/) または他のコンテナー レジストリ クライアントを使用してください。

```docker theme={null}
docker tag hello-world customer5555555.azurecr.io/pvp_gameserver:v1
docker push customer5555555.azurecr.io/pvp_gameserver:v1
```

## コンテナーがアップロードされたことを確認する

コンテナーがアップロードされた後、Game Manager の **New Build** ページに戻り、**Refresh Images** を選択します。リスト内にイメージが表示され、選択できるようになります。または、[ListContainerImages](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayerserver/listcontainerimages) API 呼び出しを使用して、アップロードされたコンテナー イメージを一覧表示できます。

これでサーバーをデプロイする準備ができました。手順については、[PlayFab ポータル—Game Manager](/services/playfab/multiplayer/servers/deploy-using-game-manager) および [PowerShell/API の使用](/services/playfab/multiplayer/servers/deploy-using-powershell-api) を参照してください。

## Windows と Linux コンテナー イメージの違い

多くの開発者にとって、Windows マネージド コンテナーの使用は望ましいシンプルなデフォルトの選択肢です。ただし、仮想マシン上にデプロイされる Linux コンテナー イメージには、より安い時間単位料金が適用されます。

<Note>
  Windows または Linux コンテナー イメージのどちらを使用しているかにかかわらず、ゲーム サーバーを完全にカスタマイズできます。Windows サーバーを使用する場合、アセットをアップロードすることでマネージド コンテナー イメージをカスタマイズします。
</Note>

以下の表は、それらを作成および使用する際のいくつかの違いを示しています。

| 開発者オプション   | Windows                                                                         | Linux                                                                                                          |
| ---------- | ------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| 開発デバイスの OS | Windows OS                                                                      | [Windows Subsystem for Linux (WSL)](#set-up-your-windows-development-device) または Linux OS (デュアル OS または VM を使用) |
| コンテナー イメージ | マネージド コンテナー イメージを使用したシンプルなデプロイ。追加のファイルをアセットとしてアップロードすることでコンテナーをカスタマイズすることも可能です。 | 完全な制御を提供する独自のカスタム コンテナー イメージを作成する必要があるため、より多くの作業が必要です。                                                         |

## API を使用した Linux コンテナー イメージの管理

API を使用して Linux コンテナー イメージを管理できます。ビルド ライフサイクルの残りの部分 (使用量の確認、リージョンと standingBy 構成の更新、削除) は、Game Manager を使用して管理します。

* [GetContainerRegistryCredentials](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayer-server/get-container-registry-credentials): コンテナー レジストリのアドレス、ユーザー名、パスワードを取得します
* [ListContainerImages](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayer-server/list-container-images) と [ListContainerImageTags](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayer-server/list-container-image-tags): 新しいイメージとタグがリストされていることを確認します (イメージがシステムに完全に登録されるまで数分かかることがあります)
* [CreateBuildWithCustomContainer](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayer-server/create-build-with-custom-container): カスタム コンテナーでビルドを作成します。先ほどアップロードしたタグ付きイメージを指定します。リクエストで次のプロパティが設定されていることを確認します:
  * **ContainerImageReference** - 先ほどアップロードしたイメージ名とタグ。これらの値は ListContainerImages および ListContainerImageTags で表示されます。
  * **ContainerFlavor** - "CustomLinux"
  * **ContainerRunCommand** (オプション) - コンテナーにデフォルトのコマンドがない場合、このプロパティを使用して実行するコマンドと引数を提供します。

## Linux プロセスベース サーバー用のアセットのパッケージ化

Linux を **プロセス モード** で使用する場合 (コンテナー モードではなく)、コンテナー イメージではなくアセット アーカイブとしてゲーム サーバーをアップロードします。このセクションでは、重要なパッケージ化要件について説明します。

### サポートされているアーカイブ形式

アセットは `.tar.gz` または `.tar` ファイルとしてアップロードする必要があります。これにより、抽出時に Unix ファイル権限 (実行ビットなど) を維持できます。

<Warning>
  **`.zip` ファイルは Linux で Unix ファイル権限を維持しません。** Linux ゲーム サーバー実行可能ファイルを `.zip` アーカイブでアップロードすると、実行権限が失われ、「Permission denied」エラーで起動に失敗します。この問題を回避するには、代わりに `.tar.gz` を使用するか、実行可能ファイルを起動する前にそれに `chmod +x` を実行するシェル スクリプトを Start コマンドに設定してください。
</Warning>

### Tar.gz および tar アーカイブの構造要件

`.tar` または `.tar.gz` アーカイブを抽出する際、PlayFab Multiplayer Servers はアーカイブから最初のディレクトリ レベルを取り除きます (`tar --strip-components=1` と同等)。アーカイブには、すべてのゲーム ファイルを含む単一のトップレベル ラッパー ディレクトリを **必ず** 含める必要があります。

**適切な構造** — ファイルはトップレベル ディレクトリ内:

```
MyGameServer/
├── MyGame.x86_64
├── MyGame_Data/
│   └── ...
├── UnityPlayer.so
└── start_server.sh
```

アーカイブを次のように作成します:

```bash theme={null}
tar czf MyGameServer.tar.gz MyGameServer/
```

<Warning>
  ファイルがラッパー ディレクトリなしでアーカイブのルートにある場合、抽出時に **サイレントにスキップされます**。実行可能ファイルがディスクに書き込まれないため、ゲーム サーバーは「No such file or directory」エラーで失敗します。
</Warning>

### Start コマンドの設定

プロセスベース サーバーの場合、Start コマンドは **抽出後のルート アセット フォルダーからの相対パス** (つまり、トップレベル ディレクトリが取り除かれた後、ファイルが配置されるルートに対する相対パス) にする必要があります。

たとえば、アーカイブに `MyGameServer/MyGame.x86_64` が含まれている場合、抽出後、ファイルはアセット フォルダーのルートにあります。Start コマンドを次のように設定します:

```
MyGame.x86_64
```

実行可能ファイルがサブフォルダー内にある場合 (たとえば、`MyGameServer/bin/MyGame.x86_64`)、Start コマンドを次のように設定します:

```
bin/MyGame.x86_64
```

## API を使用した Linux プロセスベース ビルドの管理

API を使用して Linux プロセスベース ビルドを管理できます。ビルド ライフサイクルの残りの部分 (使用量の確認、リージョンと standingBy 構成の更新、削除) は、Game Manager を使用して管理します。

* [CreateBuildWithProcessBasedServer](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayer-server/create-build-with-process-based-server): ゲーム サーバーがプロセスとして実行されるビルドを作成します。リクエストで次のプロパティが設定されていることを確認します:
  * **OsPlatform** - "Linux"
  * **GameAssetReferences** - ゲーム アセットのリスト (`.tar.gz` または `.tar` ファイルとしてアップロード)。各アセットには、アップロードされたアセット名と一致する **FileName** が必要です。
  * **StartMultiplayerServerCommand** - ゲーム サーバーの開始時に実行するコマンド。パスは抽出後のルート アセット フォルダーからの相対パスにする必要があります (たとえば、`MyGame.x86_64 -server`)。
  * **Ports** - ビルドにマップするポート。
  * **MultiplayerServerCountPerVm** - 単一の VM 上でホストするゲーム サーバー インスタンスの数。
  * **RegionConfigurations** - スタンバイと最大サーバー数を持つ、デプロイ先のリージョン。

## 関連項目

* [Docker コンテナー入門](https://learn.microsoft.com/en-us/training/modules/intro-to-docker-containers/)
* [最初のサーバーを作成する](/services/playfab/multiplayer/servers/create-your-first-server)
* [リソースとサンプル](/services/playfab/multiplayer/servers/server-samples-resources)
* [PlayFab Multiplayer Server Software Development Kits (SDK)](/services/playfab/multiplayer/servers/server-sdks/overview)
* [API リファレンス](xref:titleid.playfabapi.com.multiplayer.multiplayerserver)


## Related topics

- [ゲーム サーバー ビルドの作成](/ja-jp/services/playfab/multiplayer/servers/author-a-game-server-build.md)
- [PowerShell/API を使用したビルドのデプロイ](/ja-jp/services/playfab/multiplayer/servers/deploy-using-powershell-api.md)
- [PlayFab マルチプレイヤー サーバー ビルドのデプロイ](/ja-jp/services/playfab/multiplayer/servers/deploying-playfab-multiplayer-server-builds.md)
- [ウォークスルー: PowerShell/API を使用したビルドのデプロイ](/ja-jp/services/playfab/multiplayer/servers/quickstart-for-multiplayer-servers-api-powershell.md)
- [PlayFab Multiplayer Servers を使ってマルチプレイヤーゲームをホストする](/ja-jp/services/playfab/multiplayer/servers/using-playfab-servers-to-host-games.md)
