今回は、iOS版のマイクラから接続できるサーバを作ってみます。
無料枠のGCPの仮想マシン
以前の投稿で、ちょっと触れてますが、GCPは特定のスペックの仮想マシンを特定の条件で、永久無料で利用できます。
当時とは、スペックが変わりまして、少し性能がよくなりました。自分もVMのスペックを更新することで無料を継続しています。
詳しくは、下記のGCPの説明をご覧ください。
新規の導入方法は、あちこちに記事化されてますので、そちらにおまかせします(^^)
マイクラサーバはubuntuをサポートしてまして、前回構築したGCPのVMもubuntuでしたのでちょうど良かったです。
新規で導入される方は是非ubuntuで(^^;
尚、自分は外部固定IPにしています(外部固定IPもこのVMに限り無料枠ですー)が、mydns.jpみたいなので名前解決させてもいいかもです。
ファイアウォールの設定
仮想マシンができたら(自分の場合はもとからあるVMですが・・)、その仮想マシンにマイクラのポートがつながるようにします。
デフォルトでは、
IPv4 supported, port: 19132
IPv6 supported, port: 19133
で、今回は、とりあえず そのままのつもりなので、
GCPのコンソールの「VPCネットワーク」→「ファイアウォール」で、
default-allow-19132
ターゲットタグ:
minecraft19132
ソースフィルタ IP範囲:
0.0.0.0/0
プロトコルとポート:
tcp:19132
udp:19132
default-allow-19133
ターゲットタグ:
minecraft19133
ソースフィルタ IP範囲
::/0
プロトコルとポート:
tcp:19133
udp:19133
で、ルールを作ります。
次に、「Compute Engine」で作ったVMを選び、ネットワークタグで、上記の2つを入れておきます。
これで、OK。
統合版minecraft
マイクラにはPCで遊ぶJAVA版と、iPhoneなどで遊ぶ統合版があります。
普段はiPhoneなので、統合版のサーバを導入します。
使うパッケージを事前にインストール
マイクラサーバは、zipで提供されるので、もしunzipが入ってなければ入れときます。
また、常駐させるために、tmuxを使いたいので、入れておきます。
$ sudo apt update
$ sudo apt install unzip
$ sudo apt install tmux
bedrock_serverのダウンロード
PCやMacで、下記にアクセスし、対象のファイルのダウンロードURLをコピります。
https://www.minecraft.net/ja-jp/download/server/bedrock
Windows版とUbuntu版の表示がされますので、Ubuntu版のほうの「同意」をチェックして、ダウンロードボタンを右ボタンで触って、リンクをコピります。
これを、ubuntu側で、wgetでダウンロードします。
今後は、いつものように、めんどくさいっていう理由で、sudo su
しちゃって作業してます。
$ sudo su
# cd
# mkdir bedrock_server
# cd bedrock_server
# wget https://minecraft.azureedge.net/bin-linux/bedrock-server-1.18.12.01.zip
上記のダウンロードURLは、今回の作業時点のものなので、上記の通り、最新のURLを取得して使います。
/root/bedrock_server
に導入しています。
展開します。
$ unzip bedrock-server-1.18.12.01.zip
server.propertiesのカスタマイズ
自分は下記な感じにしました。
# vi server.properties
#
server-name=##自分のサーバ名##
gamemode=creative
force-gamemode=true
difficulty=easy
allow-cheats=true
max-players=5
online-mode=true
allow-list=true
# ↑ここをtrueにして、接続できるユーザを絞る
server-port=19132
server-portv6=19133
view-distance=32
tick-distance=4
player-idle-timeout=30
max-threads=8
level-name=##接続するときに表示されるレベルの名前##
level-seed=
level-type=amplified
default-player-permission-level=member
texturepack-required=false
content-log-file-enabled=false
compression-threshold=1
# Allowed values: 0-65535
server-authoritative-movement=server-auth
player-movement-score-threshold=20
player-movement-action-direction-threshold=0.85
player-movement-distance-threshold=0.3
player-movement-duration-threshold-in-ms=500
correct-player-movement=false
server-authoritative-block-breaking=false
enable-command-block=true
allow-nether=true
#
これであってるのか、自信なしです。
統合版とJAVA版で違うみたいなんですが、よくわかんないです・・(;_;)
というわけで、プロパティは、ネット等で検索して、自分用に良い感じに設定してください。
allow-listの設定
server.propertiesで、allow-list=true
としましたので、allowlist.json
に接続できるユーザを設定します。
設定には、xuid
が必要なので、それを知るために、とりあえずserver.propertiesのallow-list
をfalse
にして、自分のiPhoneから接続してみます。
# vi server.properties
・・・省略
#allow-list=true
allow-list=false
・・・省略
以下が起動コマンドです。
# LD_LIBRARY_PATH=. ./bedrock_server
画面に下記な感じで表示されます。カーソルが点滅して入力待ち?みたいな状態で起動します。
# LD_LIBRARY_PATH=. ./bedrock_server
NO LOG FILE! - setting up server logging...
[2022-02-27 11:04:25:543 INFO] Starting Server
[2022-02-27 11:04:25:543 INFO] Version 1.18.12.01
[2022-02-27 11:04:25:543 INFO] Session ID ee74ba4a-3f19-4ab1-b5e8-2e91c7d4d36d
[2022-02-27 11:04:25:543 INFO] Level Name: hogehogelevel
[2022-02-27 11:04:25:544 INFO] Game mode: 1 Creative
[2022-02-27 11:04:25:544 INFO] Difficulty: 1 EASY
[2022-02-27 11:04:25:584 INFO] opening worlds/hohehogelevel/db
[2022-02-27 11:04:26:126 INFO] IPv4 supported, port: 19132
[2022-02-27 11:04:26:126 INFO] IPv6 supported, port: 19133
[2022-02-27 11:04:26:434 INFO] Server started.
[2022-02-27 11:04:26:461 INFO] IPv4 supported, port: 49358
[2022-02-27 11:04:26:461 INFO] IPv6 supported, port: 49605
(ここでカーソル点滅)
ここで、iPhoneでマイクラを起動し、サインイン後、「遊ぶ」→「サーバ」と選び、一番下まで行って、サーバの追加を選ぶと下記の画面が出ますので、サーバ名と仮想マシンの外部IPを入力します。
接続がうまくいくと、サーバのコンソールに下記のように出ます。
[2022-02-27 11:04:43:745 INFO] Player connected: [ゲーマータグ], xuid: 9999999999999
上記の9999999999999の部分が接続したユーザのxuid
です。
これをコピペしておきます。
他の接続したい人にもつないでもらって、同様にxuid
をメモります。
stop
コマンドで一旦サーバを止めます。
stop
[2022-02-27 11:08:01:763 INFO] Server stop requested.
[2022-02-27 11:08:01:812 INFO] Stopping server...
Quit correctly
#
次に、allowlist.json
を編集します。
# vi allowlist.json
今回は、2名だけ登録したので、こんな感じ・・
[
{
"ignoresPlayerLimit": false,
"name": "hogehogeuser1",
"xuid": "9999999999999"
},
{
"ignoresPlayerLimit": false,
"name": "hogehogeuser2",
"xuid": "9999999998888"
}
]
server.propertiesのallow-list
をtrue
に戻して、さっきと同じように、サーバを起動して、つながるか試してみます。
# LD_LIBRARY_PATH=. ./bedrock_server
まだ続きますので、また、stop
コマンドで止めておきましょう。
permissions.jsonの編集
接続したアカウントをオペレータにしたいです。
これは、permissions.json を編集するとできるようです。
# vi permissions.json
[
{
"permission": "operator",
"xuid": "9999999999999"
},
{
"permission": "operator",
"xuid": "9999999998888"
}
]
さて、オペレータになったか、また、さっきと同じように、サーバを起動して、つながるか試してみます。
# LD_LIBRARY_PATH=. ./bedrock_server
まだまだ続きますので、また、stop
コマンドで止めておきましょう。
常時起動させたい!(バックグラウンドで動かしたい!)
上記の起動コマンドはシェルを専有しちゃうので、とても不便です。シェルが切っちゃうと、サーバも止まっちゃいます。
そこで、最初に導入しておいたtmux
を使って、バックグラウンドでっていうか裏画面で動かしとくようにします。
起動のスクリプトを作っちゃいます。
# vi brs_script.sh
#!/bin/bash
#
SESSION_NAME='bedrock'
LD_LIBRARY_PATH='/root/bedrock_server'
SERVICE='/root/bedrock_server/bedrock_server'
cd /root/bedrock_server
start() {
if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
echo "$SERVICE は起動済です。"
else
echo "$SERVICE 起動中・・"
tmux new-session -d -s $SESSION_NAME
tmux send-keys -t $SESSION_NAME:0 "LD_LIBRARY_PATH=$LD_LIBRARY_PATH $SERVICE" C-m
fi
}
stop() {
if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
echo "$SERVICE を10秒後に停止します・・"
tmux send-keys -t $SESSION_NAME:0 "say SERVER SHUTDOWN after 10 SECONDS. Please Save..." C-m
sleep 10
tmux send-keys -t $SESSION_NAME:0 "stop" C-m
sleep 10
echo "Bedrock Server を停止します"
else
echo "$SERVICE は起動していません・・"
exit
fi
while :
do
if
pgrep -u $USERNAME -f $SERVICE > /dev/null; then
echo "$SERVICE 停止処理中・・・"
sleep 10
else
tmux kill-session -t $SESSION_NAME
echo "$SERVICE を停止しました"
break
fi
done
}
case "$1" in
start) start ;;
stop) stop ;;
*) echo $"Usage: $0 {start|stop}"
esac
実行可能にします。
# chmod 755 brs_script.sh
動くかなぁ・・
# cd /root/bedrock_server
# ./brs_script.sh start
/root/bedrock_server/bedrock_server は起動済です
って出ればOK。
さて、止めてみます。
ログインしている人退出させるために、10秒待つようにしました。
# ./brs_script.sh stop
/root/bedrock_server/bedrock_server を10秒後に停止します・・
Bedrock Server を停止します
/root/bedrock_server/bedrock_server を停止しました
で出れば止まってます。
ちなみに、
# tmux ls
ってすると、
bedrock: 1 windows (created Fri Mar 4 17:22:08 2022) [80x24]
みたいに表示され、動いているのがわかります。
なので、さらにちなみに、
# tmux a -t bedrock
で、セッションに入れます(アタッチ)ので、ここで、bedrockのコマンドを打てます。
さらに さらに ちなみに、セッションから抜ける(デタッチする)には[CTRL] + [b] + [d]
です。
完成
めでたしめでたし