【統合版Minecraft】クロスプレイ可能な統合版MinecraftサーバーをGCEにたてる【GCP】
やりたいこと
統合版のMinecraft で、クロスプレイ可能なサーバーを、Realms使ったりフレンドのワールドにログインするとかなしにたてたい。
統合版Minecraftって?
前々から遊んだりしていたMinecraftはJava版で、PCでのみプレイが可能だった。ところがPC以外のNintendo SwitchだとかXBoxだとかでもMinecraftがリリースされはじめて、それが「統合版」と呼ばれている。ちょっと古い呼び方をすれば「Bedrock Edition」。PCでプレイする場合はJava版もプレイできるし、Microsoft Storeで「Minecraft for Windows 10」をインストールすれば統合版がプレイできる。
Java版のメリットはModとかが自由に導入できることだけれど、その代わりにPC同士でしか一緒に遊ぶことができない。一方で、統合版はModとかは入れることができないけれど、いろんなプラットフォームの人とクロスプレイできるのが特徴。
Minecraft のサーバー
Java版でMinecraftを友だちとかと一緒にプレイするには、サーバーをたてる必要があった。Java版はむかしからサーバー用プログラムが公式からDLすることができて、知識さえあれば自分でたてることが可能だった(実は昔Java版のサーバーをたてる記事も書いているが、だいぶ情報が古くなってしまった......)。
一方統合版ではしばらくの間サーバー用プログラムが配布されておらず、友達と一緒にプレイするには、XBoxのフレンドのワールドに入れてもらうか、Realmsという公式の機能に課金してサーバーを公式にたててもらうみたいな方法を取る必要があった。
しかし最近(2020/12)調べてみると、どうやらついに統合版サーバーの配布が始まったらしい(実は以前から配布されていたが、アルファ版としてMinecraft for Windows 10同士でしか一緒に遊べずクロスプレイのメリットを享受することができなかった)ので、それならせっかくだしサーバーを構築してみようと思い立った。
あとRealms、ラグいし課金期間極端だしスペック低いしで不満が多かった
Minecraft、突発的にやりたくなって飽きてを繰り返すので、やりたい時できる環境がいいよね。
統合版Minecraftサーバーの構築
少し古い状況だが、Java版のMinecraftサーバーを構築する手順がGoogle公式ドキュメントにあるので、これを参考にしながら進めていく。
環境
実行日 2020/12/20
- 全体
- Minecraft: Version 1.16.201
- サーバー
- クライアント
- Minecraft for Windows 10
- Minecraft: Nintendo Switch Edition
- Minecraft PE
インスタンス作成
デフォルトの状態から変更点だけ。
- マシンの構成
- 任意の性能を選びましょう。足りなかったりしたらあとで強化すれば良い
- ブートディスク
- IDとAPIへのアクセス
- アクセススコープ
- 各APIにアクセス権を設定
- ストレージ: 読み取り/ 書き込み (バックアップ用)
- 各APIにアクセス権を設定
- アクセススコープ
- ディスク
- ネットワーキング
これでインスタンスを作成すればOK。次にインスタンスにクライアントからアクセスできるようにファイアウォールの設定をします。
これでアクセスできるようになりました。
サーバー設定
インスタンスにSSH接続します。そしたらサーバーDLしたり各種設定したりとか。
サーバーファイルをどこからDLするかは公式サイトを見ましょう。Bedrock版のUbuntuサーバーソフトウェアのURLをコピーしておく。
#!/bin/bash # 最初にやるもろもろ $ sudo apt update # ディスクをマウントするところをつくる $ sudo mkdir -p /home/minecraft # 追加ディスクをフォーマット(すでにディスクの用意があるならいらない、ディスク名はlsでもして確認。インスタンス作成時設定したやつ) $ sudo mkfs.ext4 -F -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/disk/by-id/google-minecraft-disk # 追加ディスクをマウント $ sudo mount -o discard,defaults /dev/disk/by-id/google-minecraft-disk /home/minecraft # /home/minecraftにアクセスするためにrootユーザへ $ sudo su $ cd /home/minecraft # 統合版MinecraftのサーバーファイルをDL(URLをコピーしてくる) $ wget https://minecraft.azureedge.net/bin-linux/bedrock-server-1.16.201.02.zip # zipを解凍したい $ apt install -y zip unzip $ unzip bedrock-server-1.16.201.02.zip
とりあえず起動してみる。
#!/bin/bash # 公式サイトにあった起動コマンドそのまま $ LD_LIBRARY_PATH=. ./bedrock_server
これでクライアントのMinecraftからとりあえず接続できるようになったはず。難易度設定とかもろもろはserver.propertiesをいじれば良い。どの値がどんな効果かとかは、zipに付属していたbedrock_server_how_to.htmlを読めばわかる。英語だけど頑張って読む。たいして難しい英語ではない。
ただし、このままだとSSH接続をきったらサーバーも終了してしまうので、screenコマンドを使うことにする。コマンド詳細はggられたし。
#!/bin/bash $ cd /home/minecraft $ LD_LIBRARY_PATH=. $ screen -d -m -S bds /home/minecraft/bedrock_server
これで起動できた。ターミナルを閉じてもサーバーが動き続けているのが確認できると思う。
最後に、インスタンスを起動したら自動でMinecraftサーバーが立ち上がって、インスタンスをシャットダウンをしたら自動でサーバーが閉じるようにしたい。一旦インスタンスをシャットダウンして、インスタンスの設定から起動スクリプトとシャットダウンスクリプトを追加する。
keyとvalueの組があるので
key:startup-script
# 追加ディスクをマウント $ mount /dev/disk/by-id/google-minecraft-disk /home/minecraft cd /home/minecraft LI_LIBRARY_PATH=. screen -d -m -S bds /home/minecraft/bedrock_server
key:shutdown-script
screen -r bds -X stuff 'stop\n'
これでインスタンスの起動、終了にあわせてサーバーを起動・終了することができるようになりました。やったー!
ちなみに、うまくサーバーが起動していないときは
#!/bin/bash $ screen -r bds
でサーバーのUIに入れるので、そこをみるといいです。原因がわかるかも。
バックアップの設定
公式ドキュメントでは、タイムスタンプをつけてワールドデータをコピーしていますが、今回はGoogle Cloud Storageのバージョニング機能を使っていこうと思います。
まずバックアップをするストレージバケットを作っておきます。インスタンス内ではgcloudが最初から使えるので使っていきます。このインスタンスからストレージへのアクセスはインスタンス作成したときに有効にしておいたはずです。
#!/bin/bash # バケットの作成(regionとかバケット名は各自自由に) $ gsutil mb -c standard -l us-central1 gs://[PROJECT_ID]-minecraft-backup # バージョニングを有効に $ gsutil versioning set on gs://[BUCKET_NAME]
これで同じ名前のファイルをアップロードすると自動的にバージョニングしてくれるようになりました、やったー!次にバックアップがどんどん蓄積されていくと容量を食ってしまうので、古いバックアップは自動で消すようにします。Google Cloud Platformコンソールから、ストレージを開きます。 - Storage: バケットの詳細 - ライフサイクル: ルールを追加 - オブジェクトを削除する - 新しいバージョンの数: 残しておきたい古いバージョンの数
これで自動でバージョンを管理してくれます。ありがたいね。
ストレージの準備ができたのでバックアップ用のスクリプトを準備します。backup.shを作成して
#!/bin/bash
# 圧縮してアップロードして削除
$ /usr/bin/zip -r ${BASH_SOURCE/*}/worlds.zip ${BASH_SOURCE/*}/worlds.zipworlds
$ /snap/bin/gsutil cp ${BASH_SOURCE/*}/worlds.zip gs://[BUCKET_NAME]
$ /usr/bin/rm ${BASH_SOURCE/*}/worlds.zipworlds.zip
実行できるようにしておかないとね
$ chmod 755 /home/minecraft/backup.sh # テスト実行 $ /home/minecraft/backup.sh
これをバックアップしたいタイミングで実行するようにする。cronなりshutdown-scriptなりを使っていけば良い。ちなみに、bedrock_server_how_to.htmlにかいてあるBackups、サーバーを終了せずにバックアップを取る方法が書いてあったのだけれど、詳しくないのでどう使えばいいかわからんかった。なのでおとなしくサーバー止めて(screen -r bds -X stuff 'stop\n')からbackup.sh実行している。つまりshutdown-scriptの最後に追記しているだけ。
過去のバージョンの参照は
#!/bin/bash gsutil ls -a gs://[BUCKET_NAME]
で見れます。ファイル名の後ろに世代番号がつきます。バックアップの復元とかは
ここで確認。適応したいバージョンのを有効にしてコピーすればOK
これで設定はおわり!GCEインスタンスに統合版Minecraftサーバーを構築して遊ぶ準備ができました!お疲れさまでした!
とりあえずMinecraft for Windows 10、Minecraft: Nintendo Switch Edition、Minecraft PEからログインできることは確認しました。
おまけ
サーバーの起動・終了をDiscordからできるようにすれば、誰でも起動終了できて、遊びたいときにかんたんに遊べて便利ですよね。ってことでJava版のサーバーを構築したときにこんな記事を書いています。
コレの下の方にDiscord botでサーバーの起動・終了を行う方法を書いてあるので、試してみると良いと思います。うちのサーバーはコレを使っています。
おわりに
久しぶりにMinecraftのサーバーを構築したけれど、前の記事から2年たっただけで結構変わっているもんですね。ちょっと知識がないと厳しいかもしれませんがサーバー管理者のひとは頑張ってください。