Thursday,November 17

GCPでウェブサーバ構築(こうちく)チャレンジ・10【閑話休題(かんわきゅうだい) (5 photos)

GCPでウェブサーバ構築(こうちく)チャレンジ、10ログ()
現在(げんざい)、ローカルPCじょうから(しん)ウェブサーバに移行(いこう)するための準備(じゅんび)継続(けいぞく)(ちゅう)です。

そのあいだ、なにもしないのもGCPがもったいないとPCゲームのマルチプレイができるサーバを構築(こうちく)してみたり。

今回(こんかい)はGCP、Debian GNU/Linux8でMinecraft(マインクラフト)サーバーを()ててみたのでそのメモです。

GCPでウェブサーバ構築チャレンジ・10【閑話休題】_sb_04.jpg

サンドボックスという人気(にんき)のゲームジャンルを確立(かくりつ)した元祖(がんそ)ともいえるMinecraft(マインクラフト)。世界(せかい)がすべて1m四方(しほう)のサイコロ(じょう)のブロックで構成(こうせい)されており、それらすべてが材料(ざいりょう)資源(しげん)として活用(かつよう)できる。材料(ざいりょう)資源(しげん)()()わせて工作(こうさく)(クラフティング)したり、多彩(たさい)なブロックを()みあげて建築(けんちく)(ビルディング)するのがゲームの(おも)目的(もくてき)だが、PC(ばん)であれば世界(せかい)(ひろ)さは地球(ちきゅう)()(ぶん)にもおよぶともいわれており、多彩(たさい)大量(たいりょう)資源(しげん)をつかった巨大(きょだい)建築(けんちく)可能(かのう)()わりの()えない奥深(おくふか)さが(すう)(おお)くのプレイヤーを(とりこ)にしています。ゲームのプレイ動画(どうが)画像(がぞう)をインターネットで発表(はっぴょう)することをオフィシャルが許可(きょか)しており、Minecraftをキーにネットユーザーとつながることが可能(かのう)となっているのも魅力(みりょく)


参考(さんこう)にしたのは「Minecraft」の日本語(にほんご)Wiki
Minecraft Japan Wiki
https://www26.atwiki.jp/minecraft/

ほとんどWikiのとおりに(すす)めることで構築(こうちく)できましたが、GCPとDebian GNU/Linux8によるクセみたいのがあります。


GCPでインスタンスを作成(さくせい)

Minecraftサーバーは容量(ようりょう)(てき)には(ちい)さいので、前回(ぜんかい)「7 days to die」で作成(さくせい)したインタンスの()容量(ようりょう)利用(りよう)します。GCP>Compute Engineに作成(さくせい)したVMインスタンスの構成(こうせい)以下(いか)のとおり。

名前(なまえ):お()きなように。(みじか)名前(なまえ)のほうがあとあとラクです。
コア(すう):6
メモリ:20GB
ディスク:Debian GNU/Linux8(jessie)
ディスク容量(ようりょう):SSD永続(えいぞく)ディスク15GB

これを「HTTP、HTTPSともにチェックを()れずに」作成(さくせい)しました。


ファイアウォールの構成(こうせい)とインスタンスへの適用(てきよう)

マルチサーバを()てるひとがだれもがいちどはハマるであろうポート開放(かいほう)
GCPではポートごとにルール()できます。前回(ぜんかい)「7 days to die」での方法(ほうほう)とおなじくこれを利用(りよう)します。(かさ)ねて()いますが、ポート開放(かいほう)自己(じこ)責任(せきにん)です。

「GCP>ネットワーキング>ファイアウォールルール」に移動(いどう)

「ファイアウォールルールを追加(ついか)

名前(なまえ):minecraft-rule
説明(せつめい)空欄(くうらん)でも()
ネットワーク:defaultのまま
ソースフィルタ:「すべてのソースから許可(きょか)(0.0.0.0/0)」選択(せんたく)
許可(きょか)対象(たいしょう)プロトコル:tcp:25565
ターゲットタグ:minecraft-tag

としてルールを作成(さくせい)します。
許可(きょか)対象(たいしょう)プロトコル部分(ぶぶん)開放(かいほう)するポート番号(ばんごう)とプロトコル。
ターゲットタグがルールを認識(にんしき)するためのタグです。

※「Minecraft」はデフォルトではひとつのポート25565を使用(しよう)します。

このルールをインスタンスに適用(てきよう)すれば完了(かんりょう)です。

「GCP>Compute Engine」で適用(てきよう)したいインスタンスをクリックして「編集(へんしゅう)」、「タグ」の部分(ぶぶん)に「minecraft-tag」と入力(にゅうりょく)して「保存(ほぞん)」すれば、インスタンスにルールが適用(てきよう)されます。

Debian GNU/Linux8(jessie)作業(さぎょう)

作成(さくせい)したインスタンスにSSH接続(せつぞく)して、以下(いか)作業(さぎょう)(おこな)います。
(なが)れのほとんどはWikiの(とお)り。Debianなので(ちが)部分(ぶぶん)があります。

sudo apt-get update...パッケージリスト更新(こうしん)

sudo apt-get install -y openjdk-8-jre…Minecraftの実行(じっこう)環境(かんきょう)Javaをインストール
2016(ねん)11(つき)18(にち)加筆(かひつ)…openjdk-8-jreはインストールしたらダメです! --理由(りゆう)はこちら!!--

cd /var/minecraft/…たとえばこんなディレクトリ

--Minecraftサーバーをインストールしたいディレクトリに移動(いどう)

--必要(ひつよう)(おう)じて sudo mkdir でディレクトリ作成(さくせい)


minecraft.net - Minecraft Server Download
https://minecraft.net/ja/download/server

sudo wget https://s3.amazonaws.com/Minecraft.Download/versions/*.*.*/minecraft_server.*.*.*.jar…Minecraftサーバーのインストール

--*.*.*はバージョン


sudo vi mc_start.sh起動(きどう)(よう)スクリプトを作成(さくせい)

(いち)(れい)
-----------------------------------------------------------
#!/bin/bash
java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
-----------------------------------------------------------

sudo chmod 744 mc_start.sh…パーミッションを設定(せってい)

sudo ./mc_start.sh…Minecraftサーバ起動(きどう)

--初回(しょかい)起動(きどう)()のみ、Minecraftサーバは必要(ひつよう)環境(かんきょう)自動的(じどうてき)作成(さくせい)してすぐ終了(しゅうりょう)する

--このあとはeula=trueやserver.propertiesやscreenなどWikiやインターネットでお(この)みのように


サーバー管理(かんり)メモ
Minecraft Serverの終了(しゅうりょう)方法(ほうほう)
Minecraft Serverコンソールで「stop
あるいはオペレーター権限(けんげん)のあるプレイヤーが「/stop


Minecraftサーバにログインできない

解決(かいけつ)しました!

2016(ねん)11(がつ)16(にち)、サーバの設定(せってい)問題(もんだい)はないと(おも)うのですがゲームクライアント(がわ)からログインしようとするとこんなメッセージが表示(ひょうじ)されました。

GCPでウェブサーバ構築チャレンジ・10【閑話休題】_sb_01.jpg

Authentication servers are down.Please try again lter,sorry!


認証(にんしょう)サーバがダウンしてます」というメッセージ。

Minecraftサーバのデフォルト設定(せってい)では、クライアントが接続(せつぞく)要求(ようきゅう)をしてきたときにオフィシャルの認証(にんしょう)サーバにクライアントの登録(とうろく)有無(うむ)()()わせます。どうやらそこでサーバの処理(しょり)がコケているようです。


このときのMinecraftサーバのログ

[19:35:15] [User Authenticator #1/INFO]: Disconnecting com.mojang.authlib.GameProfile@**********[id=,name=**********,properties={},legacy=false] (/**********:**********): Authentication servers are down. Please try again later, sorry!
[19:35:15] [User Authenticator #1/ERROR]: Couldn't verify username because servers are unavailable
[19:35:15] [Server thread/INFO]: com.mojang.authlib.GameProfile@**********[id=,name=**********,properties={},legacy=false] (/**********:**********) lost connection: Authentication servers are down. Please try again later, sorry!

「Disconnecting com.mojang.authlib.GameProfile~」として認証(にんしょう)サーバに接続(せつぞく)できない(むね)表示(ひょうじ)されています。しかしこの認証(にんしょう)エラー、サーバから外部(がいぶ)()かう接続(せつぞく)がファイアウォールなどで遮断(しゃだん)されているときも出力(しゅつりょく)されるとのこと。GCP(がわ)調整(ちょうせい)ミスなのか、オフィシャルの認証(にんしょう)サーバが不具合(ふぐあい)()こしているのか判断(はんだん)できません。

さらに調(しら)べたところ、Minecraft1.11のバージョンがリリースされたのは2016(ねん)11(がつ)14(にち)。たった2日(ふつか)(まえ)のことだったんです。これはキビしいです。

GCPは基本(きほん)(てき)内部(ないぶ)から外側(そとがわ)へむかう通信(つうしん)(アウトバウンド)を一部(いちぶ)(のぞ)いて遮断(しゃだん)していません。外部(がいぶ)から内部(ないぶ)()かう通信(つうしん)(インバウンド)をファイアウォールで制限(せいげん)する(かんが)(かた)です。ファイアウォールルールでポートは()けているはずですから、GCP(がわ)には認証(にんしょう)サーバとの通信(つうしん)支障(ししょう)になるようなものはないように(おも)われました。

しかし、オフィシャル(がわ)では認証(にんしょう)サーバに障害(しょうがい)発生(はっせい)していないようで、GCP(がわ)もしくはサーバー(がわ)になにかしらの問題(もんだい)があるようにも()けとれました。

Minecraftオフィシャルサーバの状態(じょうたい)
https://help.mojang.com/

Minecraft Serverのログも、もうちょっと原因(げんいん)特定(とくてい)しやすく出力(しゅつりょく)してくれれば(たす)かるんですが……。

認証(にんしょう)サーバのものと(おも)われるIPアドレスにpingを送信(そうしん)したあたりで「()()いきれねえ!」となりまして((えみ)) 認証(にんしょう)サーバとの接続(せつぞく)はあとまわしにして、とにかくクライアントをMinecraft Serverに接続(せつぞく)することを優先(ゆうせん)しました。

じつは、オフィシャルの認証(にんしょう)(とお)さずにサーバーへの接続(せつぞく)許可(きょか)することもできるんですが、不正(ふせい)ソフトからの接続(せつぞく)許可(きょか)することになってしまい、セキュリティが低下(ていか)するとしてオフィシャルが()推奨(すいしょう)にしているんですよね。

そこで、あくまで認証(にんしょう)サーバとの接続(せつぞく)問題(もんだい)原因(げんいん)特定(とくてい)できるまでの緊急(きんきゅう)回避(かいひ)として、ホワイトリスト設定(せってい)併用(へいよう)することにしました。解決(かいけつ)しました!

Minecraftサーバーには接続(せつぞく)許可(きょか)するユーザーを管理(かんり)できるホワイトリスト機能(きのう)があります。デフォルトはこの機能(きのう)はオフになっていますが、これを併用(へいよう)すればオフィシャルの認証(にんしょう)(とお)さなくてもセキュリティはそれなりに担保(たんぽ)できると(おも)いました。

以下(いか)、その設定(せってい)です。

sudo vi server.properties

online_mode=true → false…オフィシャル認証(にんしょう)をOFF

※※()推奨(すいしょう)設定(せってい)です!※※


white_list=false → true…ホワイトリスト機能(きのう)をON

sudo ./mc_start.sh…Minecraftサーバ起動(きどう)

この状態(じょうたい)でクライアントから接続(せつぞく)しようとすると、

GCPでウェブサーバ構築チャレンジ・10【閑話休題】_sb_02.jpg

You are not white-listes on this server!


「あなたはホワイトリストに登録(とうろく)がありません」となってwhitelist機能(きのう)動作(どうさ)していることが確認(かくにん)できます。

ここでMinecraftサーバーコンソールで

whitelist add [ユーザー(めい)]

クライアントから(さい)接続(せつぞく)すると、

GCPでウェブサーバ構築チャレンジ・10【閑話休題】_sb_03.jpg

つながったー! ニワトリさーん、つながったよー!


接続(せつぞく)できます。


online_modeはtrue設定(せってい)推奨(すいしょう)されています。
今回(こんかい)falseにしたのは、あくまで認証(にんしょう)サーバエラーを回避(かいひ)するための緊急(きんきゅう)措置(そち)です。
原因(げんいん)特定(とくてい)されしだいonline_modeをtrueに(もど)しても接続(せつぞく)できる状態(じょうたい)にいたします。
この問題(もんだい)(かん)してなにか有益(ゆうえき)情報(じょうほう)をお()ちのかたがいたら、ぜひ提供(ていきょう)をお(ねが)いしたいです。解決(かいけつ)しました!

進展(しんてん)があれば加筆(かひつ)修正(しゅうせい)するかもしれません。


ちなみに。おそらくバグだと(おも)うのですが、ワールドが形成(けいせい)される(まえ)にwhite_list=true→sudo ./mc_start.sh→add whitelistをしてwhitelist.jsonにデータを登録(とうろく)しても、どういうわけかクライアントが接続(せつぞく)しようとすると「ホワイトリストにいません」となって接続(せつぞく)できません。とにかくいちど接続(せつぞく)してワールドを形成(けいせい)してからadd whitelistをすると有効(ゆうこう)になるようです。たぶんオペレータ権限(けんげん)のあるユーザーじゃないとワールド形成(けいせい)できないとかそういうことで、それならエラーメッセージでそういう(むね)(おし)えて()しいですね。「ワールドがありません。ワールドを形成(けいせい)できるのはオペレータ権限(けんげん)のあるユーザーだけです」とか。



サーバー管理(かんり)メモ
whitelist追加(ついか)
Minecraft Server コンソールで「whitelist add [ユーザー(めい)]
オペレーター権限(けんげん)のあるプレイヤーが「/whitelist add [ユーザー(めい)]

whitelistから除外(じょがい)
Minecraft Server コンソールで「whitelist remove [ユーザー(めい)]
オペレーター権限(けんげん)のあるプレイヤーが「/whitelist remove [ユーザー(めい)]

オペレーター権限(けんげん)プレイヤー追加(ついか)
Minecraft Server コンソールで「op [ユーザー(めい)]
オペレーター権限(けんげん)のあるプレイヤーが「/op [ユーザー(めい)]

オペレーター権限(けんげん)プレイヤー()()
Minecraft Server コンソールで「deop [ユーザー(めい)]
オペレーター権限(けんげん)のあるプレイヤーが「/deop [ユーザー(めい)]




2016(ねん)11(つき)18(にち)加筆(かひつ)
いろいろ検討(けんとう)して(かんが)えた結果(けっか)、そもそも(ろん)()()たりました。

実行(じっこう)環境(かんきょう)であるJavaが対応(たいおう)してないんじゃないか?」

Javaにはいろいろなバージョンがあります。
(いきお)いで(あたら)しいほうがいいだろうとopenjdk-8-jreなんてインストールしてましたけど、その判断(はんだん)がダメで、もっと実績(じっせき)のあるJavaを(えら)ぶべきだったのでは……。

(ため)してみる価値(かち)はあると(おも)い、現在(げんざい)のJavaをアンインストールして納得(なっとく)のいくJavaをインストールし(なお)すことにしました。
以下(いか)作業(さぎょう)内容(ないよう)です。

sudo apt-get purge openjdk-8-jre…openjdk-8-jreのアンインストール

java -version…アンインストール確認(かくにん)

参考(さんこう)ページ
Setting up a Minecraft server on Google Compute Engine
https://cloud.google.com/solutions/gaming/minecraft-server

sudo apt-get install -y default-jre-headless…default-jre-headlessのインストール

java -version…インストール確認(かくにん)

Javaを()()えただけです。
さて。これでどうなるか()てみました。

sudo vi server.properties
online_mode=false → true…オフィシャル認証(にんしょう)をON

推奨(すいしょう)設定(せってい)(もど)しました


sudo ./mc_start.sh…Minecraftサーバ起動(きどう)

GCPでウェブサーバ構築チャレンジ・10【閑話休題】_sb_05.jpg

つながったー! ウシさーん、つながったよー!


サーバのログにも認証(にんしょう)サーバーの接続(せつぞく)エラーは表示(ひょうじ)されず、(なん)なくつながりました。
この問題(もんだい)にはかなり(あたま)(なや)まされました。
原因(げんいん)はインストールするJavaの選択(せんたく)にあったようです。

あっ、スクリーンショットで体力(たいりょく)()っているのは、ログイン直後(ちょくご)にお日様(ひさま)(のぼ)るぐらいの時間(じかん)(たい)でして。サーバログに異常(いじょう)がないかどうか確認(かくにん)しているあいだに、ギリギリでスポーンしたゾンビにタコ(なぐ)りされたからです。

あわてて()(まわ)り、日光(にっこう)()()きたゾンビがドロップしたゾンビ(にく)入手(にゅうしゅ)して()()いたところでスクリーンショットを()りました。


≫ NEXT_LOG GCPでウェブサーバ構築(こうちく)チャレンジ・11【移行(いこう)前夜(ぜんや)

≪ PREV_LOG GCPでウェブサーバ構築(こうちく)チャレンジ・9【閑話休題(かんわきゅうだい)(1 photos)

PAGE UP

Google+

スタジオムーンリーフ(2005年1月開設/Since 2005)
代表者:野口 卓洋(Takuhiro Noguchi)
Add:356-0006 埼玉県ふじみ野市霞ヶ丘3-1-22-504

Twitter:@StudioMoonLeaf
Facebook:facebook.com/noguchi.takuhiro


©2017 STUDIO MOON LEAF ALL RIGHTS RESERVED.