GCPで無料のMinecraftサーバを立ててみた

2022/02/09に公開

今回は、GCPのお勉強用に仮想マシンを作成してみます。
ただ作るだけだと面白くないので、作成後はMinecraftサーバにして遊んでみることに。おまけで稼働状況をモニタリングまでできればバンバンザイ。

GCP設定

アカウント登録

以下のサイトからアカウント情報を作成します。

「Google Cloud Platform」のページにアクセス、「無料で開始」を選択します。

ニーズの説明と利用規約に同意して「続行」を選択します。

電話番号やクレジットカート情報を入力して「完了」を選択します。完了後にGCPが使用できるようになります。

仮想マシンの作成

ダッシュボード画面が表示されるので、左ペインから「Compute Engine」-「VMインスタンス」を選択します。

「VMインスタンス」の画面になるので「インスタンスを作成」を選択します。初めてアクセスする場合、初期設定のために数分間待たされる場合があります。

「インスタンスの作成」画面になるので、設定を行っていきます。今回はトライアル版で名前の変更しかできないため「minecraft-sv」で作成しました。右の方には月額料金が表示され、今回のマシンスペックだと約3000円かかるとのこと。(3ヶ月後に有料に切り替えるかの通知は出るらしいが、削除を忘れないようにする)

その他は変更せず「作成」を選択します。

作成後は「SSH」を選択し、仮想マシンへのSSH接続を実施します。

「接続」を選択します。

コンソール接続でログインできました。

Minecraftサーバ作成

■パッケージのアップデートとアップグレード

sudo apt update && sudo apt upgrade

■jdkのインストール
jdkが入ってる場合はしなくてもOK。バージョン指定しても良かったんですが、面倒くささが勝ったので、このときは一旦デフォルトで作成してます。

sudo apt install default-jdk

■バージョン確認

java -version 
openjdk version "11.0.14" 2022-01-18
OpenJDK Runtime Environment (build 11.0.14+9-post-Debian-1deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.14+9-post-Debian-1deb10u1, mixed mode, sharing)

■Minecraftダウンロード
作業用のディレクトリを作成します。後で見返してもわかるように名前はminecraftにしました。

mkdir minecraft
cd minecraft

Minecraftの最新版は以下のURLから。今回は1.18.1のリンクアドレスをコピーして使用します。
https://www.minecraft.net/ja-jp/download/server

curl -OL https://launcher.mojang.com/v1/objects/125e5adf40c659fd3bce3e66e67a16bb49ecc1b9/server.jar

■minecraft実行

java -Xmx1024M -Xms1024M -jar server.jar nogui

■サーバが起動せず以下のErrorが出た
LinkageErrorの内容を調べてみると、jdkのバージョンが古すぎてjarファイルが実行できなかったよう。デフォルトで入れてたのでちゃんと互換性調べないとだめですね。。

minecraft-sv:~/minecraft$ java -Xmx1024M -Xms1024M -jar server.jar nogui
Error: LinkageError occurred while loading main class net.minecraft.bundler.Main
        java.lang.UnsupportedClassVersionError: net/minecraft/bundler/Main has been compiled by a more recent versi
on of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versi
ons up to 55.0

■JDKのバージョン更新
JDKのバージョンを更新していきます。JDK17であれば互換性があるようなので、17に上げてみます。
以下のサイトからURLを拝借
https://jdk.java.net/17/

curl -OL https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz

sudo tar zxvf openjdk-17.0.2_linux-x64_bin.tar.gz -C /usr/lib/jvm

ディレクトリを変更して、以下のコマンドを実行します。

cd /usr/lib/jvm

sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk-17.0.2/bin/java" 1

変更したいJavaのバージョンを選択します。

sudo update-alternatives --config java

■バージョン再確認

$ java -version
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)

17.0.2に上がりました!!

再度server.jarを実行してみます。

minecraft-sv:~/minecraft$ java -Xmx1024M -Xms1024M -jar server.jar nogui
Starting net.minecraft.server.Main
[08:25:40] [ServerMain/INFO]: Environment: authHost='https://authserver.mojang.com', accountsHost='https://api.moja
(略)
[08:26:34] [Worker-Main-2/INFO]: Preparing spawn area: 3%
[08:26:35] [Worker-Main-2/INFO]: Preparing spawn area: 52%
[08:26:35] [Worker-Main-2/INFO]: Preparing spawn area: 52%
[08:26:36] [Server thread/INFO]: Time elapsed: 46827 ms
[08:26:36] [Server thread/INFO]: Done (47.111s)! For help, type "help"

最終行のステータスが表示されれば、マイクラサーバの起動は完了です!!

GCP(ファイアウォール設定)

このインスタンスを外部から接続できるように、minecraftで使用するポートを開放します。

「VPCネットワーク」-「ファイアウォール」を選択し、ファイアウォールルールを追加します。

新しくルールを追加するので、「ファイアウォールルールを作成」を選択します。

名前はminecraftのサーバーで使うルールであることが分かりやすいように「minecraft-sv」にしました。

下へスクロールし、残りの設定を行っていきます。ターゲットタグの欄も、タグだけで設定が分かるように「minecraft-sv-25565」としておきます。ソースIPの範囲は「0.0.0.0/0」にして、プロトコルとポートにはminecraftのデフォルト値であるtcp:25565に設定しました。

作成を押したあとに「ファイアウォールルール」を確認すると、新しいルールが追加されたことが確認できます。

続いてこのファイアウォールルールを仮想マシンに適用していきます。
「VMインスタンス」で対象の仮想マシンを指定し、「編集」を選択します。

「ネットワーク タグ」にターゲットタグで設定したものと同じ値(今回はminecraft-sv-25565)を設定して、保存を選択します。

これでアクセスすることができるようになりました。

minecraftへ接続

「Server Address」へ今回構築した仮想マシンのIPアドレスを入力します。

「Server Address」へ今回構築した仮想マシンのIPアドレスを入力します。

暫く待つと、、

minecraftにログインできました!一人でしか試してないですが、ログインした限りはラグなどの不安要素はなかったです。

まとめ

GCPを使ってminecraftにログインまでやってみました。トライアル期間で使用できるアプライアンスはスペックに難ありなのでメインとして遊ぶことはできませんが、負荷かけて遊んでみようと思います。

Discussion