去年Azureに設置していたマインクラフトサーバーを消してしまったんで、またやり直すことにしました。
AzureのVM設定手順など、多少変わっていたので改めてステップ・バイ・ステップで最新の手順としてQiitaに投稿することにしました。
前提
- マインクラフト(クライエント)をインストールしている。
- Azureのサブスクリプションを持っている。
- Windows 10 Anniversary Update から操作する。
マインクラフトの購入や体験版などに関してはこのブログ記事がよさそうです。
Windows 10 Anniversary Updateはどうしてもじゃないけど、bashシェルが使えるようになったのでssl接続するときに便利。PuTTyがあればそれでもOK。
手順1 AzureにUbuntuのVMを作る
まずはホストマシーンとしてVMを作る。OSはUbuntu Server 16.04 LTS(2016年9月現在最新)を選んだ。
VMの新規作成手順の詳細は省く。Authentication TypeにはPasswordを選ぶ。
User NameとPasswordは後で必要なので書き留めておく。
手順2 VMのDNS名を設定する
VMをスタートするとIPアドレスは設定されいるが、DNS名はまだ設定されていない。静的IPサービスを利用しない限りIPアドレスは一定ではないので、安定した別名としてDNS名を設定しておく。
以下は設定が完了した状態。PUBLIC IP ADDRESS/DNS NAME LABELのリンクからDNS名の設定画面に行ける。
手順3 マインクラフトサーバー用にポートを開く
マインクラフトサーバーはデフォルトでポート25565でゲームクライエントからの接続を待ちます。しかし新規作成されたVMは25565を開いていないので、以下のようにポート25565へのInboundの接続を許可するルールを新たに加える。
ちなみにルールの名前はなんでも構わない。私はminecraft-server-portにした。
手順4 VMにssh接続する
Windows 10 Anniversary Updateから利用可能になったBashシェルを開く。
次にsshコマンドを実行し、
ssh <user>@<fully-qualified-domain-name>
-
<user>
VM作成時に指定したUser Name -
<fully-qualified-domain-name>
VM作成後に設定したDNS名
パスワードを聞かれたら、VM作成時に指定したPasswordを入力してssh接続を完了する。以下はsshコンソール内での作業。
手順5 Ubuntu側でもマインクラフト・サーバー用のポートを開く
iptables
コマンドを使って、ポート25565を新規ファイアウォール・ルールとして加える。AzureVMとUbuntuOSの両方でポートが開いて初めてクライエントが接続できるようになることに注意。
sudo iptables -I INPUT -p tcp -m tcp --dport 25565 -j ACCEPT
確認のため sudo iptables -L
コマンドを実行して以下のように設定されていれば完了。
手順6 必要なツールをインストールする
次にjavaとgitをインストールする。
sudo apt-get install openjdk-8-jre-headless
(javaはビルドおよびマインクラフトサーバーの実行に必要)
sudo apt-get install git
(ビルドに必要)
手順7 サーバー関連ファイル用の新規ディレクトリを作成
サーバーのファイル類を保存するためのディレクトリを作成する。名前はなんでも構わないが、サーバーにはSpigotを使用するのでminecraft_spigot
と指定することにした。
mkdir minecraft_spigot
手順8 SpigotサーバーのBuildToolsをダウンロードする
SpgotサーバーファイルはBuildToolsと呼ばれるjarファイルをローカルに保存し、それをJavaでビルドすることによって配布する形をとっている。
以下のコマンドを実行する。
cd minecraft_spigot
(上の手順で作成したディレクトリに移動)
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastStableBuild/artifact/target/BuildTools.jar
(このURLは常に最新の安定したバージョンを指している。)
手順9 Spigotをビルドする
ダウンロードしたBuildTools.jarをJavaで実行することで自動的にGitレポジトリが複数クローンされ、成果物が生成される。ビルドが完了するのに5分~10分ぐらいはかかると思う。
java -jar BuildTools.jar
以下のようなjarファイルが生成されれば成功。このファイル以外にもいくつかアウトプットが生成される。
手順10 EULA合意のために一旦マインクラフトサーバーを実行する
マインクラフトサーバーを初めて実行すると
java -Xmx1024M -Xms1024M -jar spigot-1.10.2.jar nogui
"You need to agree to EULA in order to run the server." というメッセージとともにサーバープロセスが終了する、と同時にeula.txt
というファイルが生成される。
EULAはEnd User License Agreement(利用許諾契約)の略。先に進むためには、eula.txt
ファイルをエディターで開いてfalse
をtrue
にして保存しなくてはならない。
以下、nanoを使って編集した様子。
手順11 いよいよサーバーを実行
コマンドは上の手順と全く同じだが、今回はEULAに合意済みなのでサーバーがロードされ実行が始まる。
java -Xmx1024M -Xms1024M -jar spigot-1.10.2.jar nogui
これを何度も打ち込むのは面倒なのでスクリプトファイルに保存しておく。
echo java -Xmx1024M -Xms1024M -jar spigot-1.10.2.jar nogui > ./start.sh
chmod +x ./start.sh
以下のようなプロンプト画面になればサーバースタート完了。この状態でクライエントから接続できる。
手順12 クライエントからサーバーに接続する
サーバーアドレスに手順2で設定したDNS名を入力する。IPアドレスでも構わないが、友達を招待して遊ぶ場合などDNS名の方が名前が変わらなくて便利。
完了!
サーバーの終了の仕方
サーバーに接続して遊んでいない間は、課金されないようにVMをStopして置いた方が良いのは言うまでもない。その際、ゲームの内容が正しく保存されるように、まずマインクラフトサーバーは終了する。
番外編 ScriptCraftプラグインでJavaScriptを使う
手順1 ScriptCraftプラグインをダウンロード
まずScriptCraftをScriptCraftのgithubレポジトリーからscriptcraft.jar
をplugins
という名前のサブ・ディレクトリーにダウンロードする。
cd plugins
wget https://github.com/walterhiggins/ScriptCraft/releases/download/3.2.0/scriptcraft.jar
手順2 ユーザーをOP(オペレータ)にする
ScriptCraftを使ってJavaScriptを実行するにはOP権限が必要。マインクラフトサーバーのコンソールから以下のコマンドを実行。(yoshionminecraftは私のユーザー名)
これでマインクラフトでJavaScriptプログラミングが出来る環境が整いました。
例えばマインクラフトのゲーム画面から以下を実行すると、幅5ブロック、高さ6ブロック、奥行き8ブロックの「石」でできた立方体を作ることができるようになります。
/js box(blocks.stone, 5, 6, 8)