Google Compute Engine で Minecraft サーバを構築する

10183 ワード

はじめに

こんにちは! です。
最近、友達とマルチプレイヤーで Minecraft がやりたいという話になり、インフラに関する知識はほとんどないですが、マインクラフトのサーバを構築することになりました。
この記事では、Google Compute Engine を使って、Minecraft サーバを構築する方法や学んだことを書きます。

この記事が他の人の参考になったら幸いです。
また、この記事の内容に誤った記載がありましたら、指摘してもらえるとありがたいです。

環境

名前 バージョン
macOS Monterey 12.3.1
Google Cloud SDK 383.0.1

Compute Engine の仮想マシンのリソースを決める

Minecraft サーバに必要なリソースはどのくらいか?

まず、Minecraft サーバにどのくらいのリソースが必要か調べました。
さくらの VPS のおすすめでは以下のようになっていました。

人数 CPU メモリ(GB) SSD(GB)
1 ~ 4 2 1 50 ~ 100
5 ~ 10 4 4 200 ~ 400 GB
10 ~ 6 8 400 ~ 800

ConoHa VPS の推奨プランでは以下のようになっていました。

人数 CPU メモリ(GB) SSD(GB)
1 ~ 4 3 2 100
5 ~ 10 4 4 100
10 ~ 6 8 100

この情報を参考にしながら、Compute Engine の料金と見比べて、構築するサーバのリソースを決定します。

Compute Engine のリソースと料金

この記事では Compute Engine 上に Minecraft サーバを構築します。
Compute Engine は仮想マシンを作成して実行できるコンピューティング、およびホスティングサービスです。
今回、Compute Engine 上に Minecraft サーバを構築するのは Compute Engine が従量課金制で利用できるからです。ゲームをするときだけ起動してそれ以外のときは停止します。

今回の用途からマシンファミリーは汎用、マシンシリーズは E2N1 を考えました。
E2N1 の用意されているマシンタイプのリソースと料金は以下のようになります。
注意点として以下の表の料金は GCP Console で月間予想として表示される料金であり、リージョンなどによって変わる異なる可能性があるので参考程度に見てください。

マシンタイプ vCPU メモリ(GB) 料金 永続ディスクの最大数 永続ディスクの最大合計サイズ(TB) 最大下り帯域幅(Gbps)
e2-micro 0.25 1 $9.14 ($0.01) 16 3 1
e2-small 0.5 2 $16.99 ($0.02) 16 3 1
e2-medium 1 4 $31.38 ($0.04) 16 3 2
e2-standard-2 2 8 $64.05 ($0.09) 128 257 4
e2-standard-4 4 16 $126.81 ($0.17) 128 257 8
e2-highcpu-2 2 2 $47.68 ($0.07) 128 257 4
e2-highcpu-4 4 4 $94.06 ($0.13) 128 257 8
e2-highcpu-8 8 8 $186.81 ($0.26) 128 257 4
n1-standard-1 1 3.75 32.44 ($0.04) 128 257 2
n1-standard-2 2 7.50 63.58 ($0.09) 128 257 10
n1-standard-4 4 15 125.86 ($0.17) 128 257 10

私は Minecraft サーバに必要なリソースと、Compute Engine のリソースと料金の兼ね合いから e2-highcpu-2 を使用することにしました。

参考

Minecraft サーバを構成する

ここからは GCP の CLI ツール gcloud を使って、サーバを実際に構築します。
GCP のプロジェクトは作成済みで必要な API も有効済みであり、gcloud のセットアップも終わっているものとして進めます。

Compute Engine の仮想マシンを作成する

まず、以下のコマンドで外部静的 IP アドレス(グローバル IP アドレス)を作成します。
Minecraft サーバに外部からアクセスするために必要です。

gcloud compute addresses create minecraft-ip

以下のコマンドで、作成したアドレスの IP アドレスを確認しておいて下さい。

gcloud compute addresses describe minecraft-ip

そして、以下のコマンドで Compute Engine の仮想マシンを作成します。
--adress には上記で確認した IP アドレスを使用します。
--tag はファイアウォールを設定するのに使用します。

gcloud compute instances create minecraft-server \
  --image=ubuntu-2204-jammy-v20220420 \
  --image-project=ubuntu-os-cloud \
  --machine-type=e2-highcpu-2 \
  --address=<IP アドレス> \
  --tags=minecraft-net

作成した仮想マシンに対して、ファイアウォールルールを作成します。
このファイアウォールルールは任意の IPv4 アドレス(0.0.0.0/0)からの 25565 ポートへの TCP もしくは UDP プロトコルの通信のみを許可します。
Minecraft サーバとクライアントはデフォルトの場合に 25565 ポートで通信を行うので、その通信のみを許可するようにしています。

gcloud compute firewall-rules create minecraft-firewall \
  --priority=1000 \
  --direction=ingress \
  --action=allow \
  --rules=tcp:25565,udp:25565 \
  --source-ranges=0.0.0.0/0 \
  --target-tags=minecraft-net

参考

仮想マシンに接続し、Minecraft サーバを構築する

以下のコマンドで作成した仮想マシンに対して SSH 接続できます。
事前に SSH キーを作成していなくても対話的に自動で生成できます。

gcloud compute ssh "minecraft-server"

仮想マシンに接続できたら、Minecraft のサーバを構築していきます。
server.jar公式よりダウンロードします。
サーバのファイル名はバージョンが分かるように名前を server.1.18.2.jar に変更しています。
eula.txt は EULA (https://account.mojang.com/documents/minecraft_eula) に同意したことを示すためのファイルでサーバを起動するのに必要です。

screen -d -m コマンドによってデタッチされたウィンドウでサーバが起動されます。
もし、そのウィンドウにアタッチしたい場合は screen -r minecraft でアタッチできます。
現在のウィンドウをデタッチしたい場合はキーマップ ctrl-a d で出来ます。
また、screen -ls で起動しているウィンドウを見れます。

$ sudo apt update && sudo apt upgrade

# Java のインストール
$ sudo apt install openjdk-18-jre-headless

# Minecraft: Java Edition のサーバをダウンロード
$ mkdir ~/minecraft && cd ~/minecraft
$ curl -Ol https://launcher.mojang.com/v1/objects/c8f83c5655308435b3dcf03c06d9fe8740a77469/server.jar
$ mv server.jar server.1.18.2.jar
$ echo "eula=true" >> eula.txt

# Minecraft サーバを起動する
$ screen -S minecraft -d -m java -Xmx1024M -Xms1024M -jar server.1.18.2.jar nogui

起動したサーバを停止したい場合はサーバを起動しているウィンドウにアタッチして stop とコマンドを打ちます。

参考

Minecraft サーバに接続する

サーバが起動できたので、Minecraft からサーバに接続します。
Minecraft Java Edition を開き、Multiplayer > Add Server からサーバを追加します。
Server Name に任意の名前を入れて、Server Address に Compute Engine の作成時に --adress に指定した値を入れます。
Server Resource PacksPrompt のままで Done をクリックすると接続できます。

最後に

ここまでの Minecraft サーバの構築はどうだったでしょうか?
自分が初めてサーバ構築をやってみた感想としては、知らないことばかりで難しすぎるというものです笑。
今回 Minecraft サーバを構築したのはいい経験になりました。
もっとインフラ関係に強くなりたいです。