🌊

Minecraftサーバ(Spigot) in GCE

2022/02/18に公開約4,600字

はじめに

友人とMinecraftをやりたかったのでGCPの勉強がてらGCE(Compute Engine)のインスタンスを無料でもらえる300ドルで運用してみました。

GCPは初回利用時に各サービスの無料枠とは別に3ヶ月間この300ドルで様々なサービスを自由に触ることができるのでおすすめです。

構成

インスタンス構成

  • e2-medium(vCPU x 2、メモリ 4 GB)
  • SSD 30GB

無料で使えると言ってもできるだけ費用は抑えたいので4人程度までで遊べるスケールで最小構成にしてみました。この構成で大体4,000円/月くらいです。

ソフトウェア構成

  • Spigot-1.17.1
  • openjdk-16-jre (Java 16の実行環境)

将来的にプラグインも使ってみたかったので公式サーバではなく、Spigotというサードパーティ製のサーバを採用しました。ここで言うプラグインは俗に言うModとは異なり、サーバ側が導入するだけでクライアント側は何も行わずに使えるものです。Modを使用したい場合はForgeサーバを建てなければいけないみたいです。今回はリソースの関係上断念しました。

サーバの構築

GCPアカウントの作成

GCPのアカウント作成等々についてはこちらのサイトがわかりやすくまとまっているので、こちらを参考にプロジェクトの作成まで行っていただければと思います。

GCPの設定

インスタンス作成

左上のプロジェクトが先程作ったプロジェクト名になっていることを確認の上、左側のメニューから[Compute Engine]-[VM インスタンス]を選択します。

APIの有効化を求められるので[有効]を押してください。

インスタンス一覧画面に遷移するので[インスタンスを作成]を押してください。

インスタンスの作成画面に遷移されるので、ここで具体的な構成を行います。
主に下画像の赤枠を変更していくと思います。

ブートディスクの設定例

  • [名前]は任意の名前で大丈夫です。
  • [リージョン]はゲームサーバという性質上なるべく近い東京大阪がおすすめです。[ゾーン]に関しては任意で大丈夫です。
  • [ブートディスク]は使用するOSやHDD,SSDの設定となります。おすすめはUbuntu20.04SSDの組み合わせです。特にSSDはマップの読み込み速度の向上が期待できるので出来れば入れておきたいところです。

設定が完了次第[作成]を押してください。

これでインスタンス作成は完了です。
作成が完了すると先程のインスタンス一覧画面に新たにインスタンスが追加されているのがわかります。

ファイアウォール設定

さて、無事にインスタンスが作成できたわけですが加えてサーバとして運用するためポート開放が必要となります。Minecraft Java EditionのサーバはTCP 25565番ポートをデフォルトで使用するのでこのポートを開けていきます。

左側のメニューから[VPCネットワーク]-[ファイアウォール]を開きます。

その後、[ファイアウォールルールを作成]を押し作成画面を開きます。

色々と入力項目がありますが、[名前]を適当に入力した後に以下の3点のみを変更してください。

  • ターゲットタグ: 任意の名前(※後で使うのでタイポに注意)
  • ソースIP: 0.0.0.0/0
  • プロトコルとポート: TCP 25565

    入力が終わったら作成を行ってください。

今行った作業は「TCP 25565ポートを開ける」というルールを作成するというもので、これをインスタンスに適応するにはもう1ステップ作業が必要です。そこで必要となるのが先程入力したターゲットタグです。インスタンスにこのタグを付けてやることでルールを適応させることができます。

インスタンス一覧画面から作成したインスタンスを選択し、[編集]を押すことで設定の変更を行います。中央あたりに[ネットワークタグ]項目があると思うので、ここに先程決めたターゲットタグ(画像の場合は"minecraft-server")を入力し、保存します。

以上でGCPの設定は完了となります。

コンソールを開く

GCEでは面倒な作業なく、ブラウザでコンソール画面を操作することができます。
開きたいインスタンスの[SSH]を押してください。

すると、別タブでコンソール画面が開かれると思うのでここで操作していきます。ローカルでSSHする方法ももちろんあるので興味のある方は別途調べてください。

Spigot等のインストール

Minecraft 1.7からはJava16が必要となったのでJava16の実行環境をインストールします。

console
# パッケージの更新
user@minecraft-server:~$ sudo apt update -y
user@minecraft-server:~$ sudo apt upgrade -y

# Java16インストール
user@minecraft-server:~$ sudo apt install -y openjdk-16-jre-headless

以下サーバファイルはopt/spigotに配置していきますが、そのへんは自由で大丈夫です。

console
# Spigotをダウンロード
user@minecraft-server:~$ sudo mkdir /opt/spigot
user@minecraft-server:~$ cd /opt/spigot
user@minecraft-server:/opt/spigot$ sudo curl -o BuildTools.jar https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar

# Spigotのビルド
user@minecraft-server:/opt/spigot$ sudo java -jar BuildTools.jar --rev 1.7.1
# spigot-1.17.1.jarの実行
user@minecraft-server:/opt/spigot$ sudo java -jar spigot-1.17.1.jar

実行するとすぐに終了され、eula.txtが生成されるので中身のuela=Falseurla=Trueに書き換えてください。その後再実行します。

console
# spigot-1.17.1.jarの実行
user@minecraft-server:/opt/spigot$ /opt/spigot$ sudo java -jar spigot-1.17.1.jar

"Done"が出たら起動完了です。stopを入力してサーバを終了させてください。

次にサーバをデーモン化させるためのスクリプトを作成します。今回は簡易化のためGitリポジトリを用意したので、cloneしてください。

console
user@minecraft-server:/opt/spigot$ /opt/spigot$ sudo git clone https://github.com/rom6621/minecraft-server-script.git

Discussion

ログインするとコメントできます