😊

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

2022/05/02に公開

はじめに

こんにちは!minguu42です。
最近、友達とマルチプレイヤーで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をクリックすると接続できます。

GitHubで編集を提案

Discussion