楽してMinecraftサーバを立てたい!

久々に友人からMinecraftやろうと誘われたので、Minecraftサーバーを建てることに。

僕がネットワークのネの字もわからなかったその昔、友人たちとそれぞれの家のPCからMinecraftマルチプレイをやりたいといった時は、まずMinecraft入れて、Hamachi (VPN.net – Hamachi by LogMeIn)入れて・・・と結構準備が面倒だった記憶がありました。

今作るならGCPにサーバー置いて、どこかからマイクラコンテナ拾ってきてdockerで動かしたら一瞬で作れそうと考えたのでやってみました。

ホスト作成

GCPダッシュボードより、「Compute Engine」→「VMインスタンス」→「新規作成」

以降はお好みではありますが、今回下記のとおりに指定。
・リージョン:「asia-northeasia1(東京)」(金額が少し上がりますが、なるべく遅延を減らしたいため)
・ゾーン  :「asia-northeast1-a」
・CPU   :「1」
・メモリ  :「3.75GB」
・OS    :「CentOS7」
・HDD   :「100GB」

f:id:ylab-203:20190725142751p:plain

上記条件で起動したままの状態だと月額約4,000円です。
(普段は停止しておき、遊ぶ時だけ起動すればそこまでかかりません。)

Docker インストール

VMが起動したらsshでログインし、dockerのインストールを行います。
一つ一つ環境設定するが面倒だったので、公式のスクリプトを使用して一気にインストールしてしまいます。

# curl -fsSL https://get.docker.com -o get-docker.sh
# sudo sh get-docker.sh

詳細はこちら:
Get Docker Engine - Community for CentOS | Docker Documentation

インストールが完了したか確認。

# docker -v
Docker version 19.03.0, build aeac9490dc

正しくインストールできたら、dockerを起動と自動起動の設定を行います。

# systemctl start docker
# systemctl enable docker 

Minecraftコンテナインストール

Minecraftサーバのコンテナを作ってくださっている方はやはりいるようで、今回は下記のコンテナをお借りします。

hub.docker.com

立ち上げ

# docker run -e EULA=TRUE -d -p 25565:25565 --name mc --restart=always itzg/minecraft-server

メモ
「-e EULA=TRUE」
Minecraftの開発元のMojangが定めるエンドユーザーライセンス条項へ同意するかどうかについて。
詳細: Mojang Account

「-p 25565:25565 」
ホストとコンテナのポート番号の紐付けを設定。
Minecraftが利用しているデフォルトのポート番号は25565なので、変更したい場合は「-p 25575:25565」と設定。(クライアント側でもポートの変更が必要)

「--restart=always」
dockerプロセスが再起動した際、自動的にコンテナを立ち上げるようにする設定。

起動確認

# docker ps
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS                  PORTS                                 NAMES
bc5e2196a9a5        itzg/minecraft-server   "/start"            17 hours ago        Up 17 hours (healthy)   0.0.0.0:25565->25565/tcp, 25575/tcp   mc

ネットワーク設定

GCPVMは再起動するたびにグローバル側のIPが変わってしまうため、固定とする必要があります。
対象の「VMインスタンス詳細」→「編集」→「ネットワーク・インターフェース」の項目より、外部IPに名前をつけて予約します。
f:id:ylab-203:20190725151342p:plain

また、ネットワークタグの項目に「minecraft」というタグをつけます。(後のfirewallの項目で利用します)
f:id:ylab-203:20190725155131p:plain

firewall設定

サイドバーより「ネットワーキング」→「VPCネットワーキング」→「ファイアーウォールルール」に移ります。

「ファイアーウォールルールを新規作成」より、下記のようなルールを作成します。

・優先度:1000以下 (500くらい)
トラフィックの方向:「上り」
・アクション:「許可」
・ターゲット:「指定されたターゲットタグ」
・ターゲットタグ:「minecraft
・ソースフィルタ:プレイする人のグローバルIP
プロトコルとポート:「tcp:25565」
f:id:ylab-203:20190725154755p:plain

プレイ

Mnicraftを起動し、「マルチプレイ」→「サーバの登録」より、先程作成したVMIPアドレスを登録。
f:id:ylab-203:20190725155619j:plain

無事プレイすることができました。

時間があったら ・サーバー監視
・Slackへのログ通知
k8sでオートスケーリング
までやってみたいですねー。