AzureにMinecraft統合版サーバを立ち上げる(デプロイ編)
はじめに
Azure上でDocker containerを利用したマイクラサーバ(統合版)を立ち上げます。
今回の記事は仕組みについて詳しい話ではなく、Azureを利用できる(Azureサブスクリプションを持っている or 用意できる)であればこちらに書いた手順通りに行えばデプロイ(構築)できると思います。
キーワードとしては
- 軽量OSであるLinux VM(Flatcar)を選択
- マイクラサーバのプログラムはDockerHub上のパブリックイメージをそのまま利用
- コンテナオーケストレーションにはdocker-composeを利用
- 永続領域はAzure Storage V2を使い、NFS(v3)にてDockerから接続
- セキュリティにはかなり気を使い、Azure StorageはPrivate endpointを適用
といったところです。
マイクラサーバとは?
Microsoftの子会社であるMojangが提供しているアルファ版のサーバプログラムです。
Windows版とLinux版が公開されており、基本マイクラアプリ(クライアント版)の更新に合わせてこちらも更新されます(2022/1/26時点でのバージョンは1.18.1)
https://www.minecraft.net/ja-jp/download/server
こちらは実行ファイル形式での提供となるため、WindowsやLinuxマシンにインストールする際にはファイルの配置やバージョンアップに伴う更新も少し手間になりますが、DockerHub上でこちらのマイクラサーバをDocker Containerで動かすためのパブリックイメージを公開してくださっている人がいます。
https://hub.docker.com/r/itzg/minecraft-bedrock-server
こちらも更新は早く、本家マイクラのバージョンアップの翌日までにはアップデートしてくれている印象です。
今回は、こちらのコンテナイメージを利用して、Azure上にマイクラサーバを構築していきます。
なお、かなり以前ですがAzure Container Instanceを使ったデプロイ記事を書いていたりします。
Azure Container Instanceを使ってMinecraft Bedrock Edition(統合版)サーバを立ち上げる
その時はストレージにはAzure files、デプロイはAzure CLIを使っていましたが、今回はVM+Azure BLOB(NFS)、デプロイにはBicepを採用しました。具体的な技術要素の説明記事は以下を参照ください。
AzureにMinecraft統合版サーバを立ち上げる(技術解説編)
デプロイスクリプトの準備
GitHub上に公開していますので、まずはこれをローカル環境に落としてきます。
https://github.com/katakura/azure-minecraft-bedrock-server
デプロイスクリプトは、bicepテンプレートとbashスクリプトで書かれているため、ローカル環境もLinuxが望ましいです(WindowsでWSL環境でも無論OK)。どうしても準備が難しい場合は、Azure Cloud Shell(bash)も利用可能です。
今回は、こちらのAzure Cloud Shell(bash)からデプロイしていきます。Azureの契約や、Azure Cloud Shellを開くまでの手順については、公式ドキュメントなどを参照ください。
まずはgit cloneで一式落としてきます。
$ git clone https://github.com/katakura/azure-minecraft-bedrock-server.git
各種設定ファイルの編集
まずは、emacsなりvi、もしくはVS Codeなどを使って「config.yml」で必要な個所を変更します。
主にマイクラサーバ起動に関する部分だけでよいので
- LEVEL_SEED (新規で作成したいワールドのSEED値があれば設定)
- ALLOW_CHEATS (チート有効可否)
- DIFFICULTY (難易度)
- GAMEMODE (ゲームモード)
あたりをお好みで修正すればよいと思います。
続いて、「deploy.sh」内の冒頭部分にある環境変数設定を修正します。
LOCATIONはこのまま「japaneast」でよいと思いますが、ご自身の居住地に一番近い場所を選ぶといいと思います。
RGNAMEは作成するリソースグループ名です。もし万が一同じ名前で既に別のリソースが動いているといった場合には変更します。
ADMINNAMEは作成する仮想マシンのログインユーザ名です。気にならなければデフォルトもままでよいと思います。間違っても「anonymous」とかよくある名前には変更しないこと。
ADMINPASSは空の状態だと、このスクリプト実行時にキーボード入力ができるので、空のままでもよいです。忘れそうな方は直接こちらにパスワードを設定します(お勧めはしないけど)。
一番大事なのはMYIPです。こちらが空の場合、中で「https://ifconfig.me」にアクセスして、ご自身の環境のパブリックIPアドレスを取得してきて設定します。このIPアドレスからのみ、VMやストレージ内のファイルにアクセスすることが出来ます。
特に今回のデプロイをAzure Cloud Shellから実行する場合には、その後のSSHアクセスのために、ご自身のパブリックIPアドレスを設定してください。私がよく使っているサイトは以下です。
あなたが現在インターネットに接続しているグローバルIPアドレス確認
また、「VMSIZE」は正直Standard_b1s(1Core, 1GB Memory)では厳しいです。本格的にゲームを楽しみたい場合は、こちらは「Standard_b2s」(2Core, 4GB Memory)あたりに変更しましょう。
デプロイスクリプトの実行
以下例の通り、「deploy.bash」を実行して、必要に応じでパスワードを設定します。あとはしばらく待ちます。
$ bash ./deploy.sh
beadmin password: (ここでパスワードを入力)
Location Name
---------- ---------------------------
japaneast minecraft-bedlock-server-rg
Name State Timestamp Mode ResourceGroup
------ --------- -------------------------------- ----------- ---------------------------
deploy Succeeded 2022-01-26T10:17:13.017402+00:00 Incremental minecraft-bedlock-server-rg
Result
-------------
20.210.xx.xx
最後にマイクラサーバのIPアドレスが表示されれば、Azureリソースのデプロイは完了です。
サーバ起動確認
VMのデプロイ完了直後では、まだマイクラサーバの準備ができていません(VM起動後にマイクラサーバの初期設定が自動で行われる)
先に設定したVMログイン用のID/Passwordにて、sshを使ってVMに接続後、「sudo docker ps」にてマイクラサーバのコンテナが動作中であることを確認します。
$ ssh ssh beadmin@<ip address>
The authenticity of host '20.210.224.21 (20.210.224.21)' can't be established.
ECDSA key fingerprint is SHA256:gn+ZWDqpNb46PgNOVSGB9fKozh67ptP0EFSjM9GtG6A.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes (←yesを入力)
Warning: Permanently added '20.210.224.21' (ECDSA) to the list of known hosts.
Password:
Flatcar Container Linux by Kinvolk stable 3033.2.1 for Microsoft Azure
beadmin@vm-beserver ~ $ sudo docker ps
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
Password: (←パスワードを入力)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f47d4601fed4 itzg/minecraft-bedrock-server "/usr/local/bin/entr…" 11 hours ago Up 11 hours (healthy) 0.0.0.0:19132->19132/udp, :::19132->19132/udp beserver
beadmin@vm-beserver ~ $
「beserver」のSTATUSがUp状態であればOKです。
実際に中のログを「sudo docker logs beserver」で確認してみます。
$ sudo docker ps beserver
最後の方に「Server started.」の出力があれば。まあ大丈夫です。
Azureポータルから、作成されたリソースグループ内のストレージアカウント(stではじまるランダムな文字列のリソース)を選び、メニューから「コンテナー」をクリックします。
コンテナ一覧にある「minecraftdata」をクリックして、中を確認します。マイクラサーバの永続データはすべてこちらの中に保存されており、VMが停止・削除されてもゲームデータはここに残っています。
ちゃんとファイルも作成されているっぽいですね。
マイクラそのものの話ですが、「permissions.json」を編集して、マイクラを遊ぶユーザのXUID毎に権限を変更したりすることもできますが、その際にはこちらのAzureポータルから設定(ファイル)を変更してからVMを再起動すれば適用されます。
(docker, docker-composeに知見のある人は直接VM内から操作しても構いません)
マイクラアプリからの接続
Windows, iOS, Android版のマイクラアプリでの説明です。Nintendo Switchからも独自サーバに接続はできるのですが、少しトリッキーな方法が必要ですので今回は割愛します。
まずは、マイクラアプリ起動後に普段通り「遊ぶ」をクリックします。
上のタブから「サーバー」を選択後、追加のサーバー一覧から「サーバーを追加」をクリックします。
「サーバー名」は適当に、「サーバーアドレス」には先にsshでもログインしたVMのIPアドレスを入力します。「ポート」は19132のままで変更しません。
最後に「保存」をクリックします。
一覧に追加されたサーバを選択後、「サーバーに参加」をクリックします。
マイクラサーバが正常に動作していれば、「世界を生成中」の表示になります。
無事つながりました!
マイクラサーバのルール変更
あまり詳しくは(知らないので)書きませんが、デフォルトのゲームモード(GAMEMODE)や、難易度(DIFFICULTY)は、VM上の「/opt/beserver/minecraft.env」を編集後にVM再起動で適用されます。
ゲーム内での座標の表示設定などは、マイクラサーバのコンテナに以下の方法でアタッチして直接コマンドを叩く方法と、先にちらっと書いたpermissions.jsonを修正して、特定のユーザ(自分)のマイクラアプリからコマンドを叩けるように管理者になってしまう方法があるでしょう。
とりあえず、マイクラサーバのコンテナにアタッチする操作例を以下に示します。
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f47d4601fed4 itzg/minecraft-bedrock-server "/usr/local/bin/entr…" 11 hours ago Up 11 hours (healthy) 0.0.0.0:19132->19132/udp, :::19132->19132/udp beserver
beadmin@vm-beserver /opt/beserver $ sudo docker attach beserver
DEBU[41304] Forwarding signal signal="window changed"
DEBU[41304] Forwarding signal signal="window changed"
help
§2--- Showing help page 1 of 3 (/help <page>) ---
/? <page: int>
/? [command: CommandName]
/deop <player: target>
/gamerule
/gamerule <rule: BoolGameRule> [value: Boolean]
/gamerule <rule: IntGameRule> [value: int]
/help <page: int>
§2Tip: Use the <tab> key while typing a command to auto-complete the command or its arguments
gamerule showcoordinates true
Game rule showcoordinates has been updated to true
read escape sequence
docker attachした後に抜けるときは絶対に[Ctrl + C]を押してはいけません(マイクラサーバが停止します)。
[Ctrl + P][Ctrl + Q]を押して、抜けるようにしましょうね。
おわりに
とりあえず、駆け足での説明でした。
Azure上のインフラ構成について詳しい説明は別記事を用意します。
マイクラサーバ自身の構成やマイクラそのものの情報は、他の方の記事を参考にされるとよいでしょうw