4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GCP無料VMに、Minecraft サーバを作ってみる(統合版:bedrock_server)

Last updated at Posted at 2022-03-04

今回は、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-listfalseにして、自分の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を入力します。
マイクラ接続スクショ1.PNG

保存できたら、そのサーバに接続してみます。
マイクラ接続スクショ2.PNG

接続がうまくいくと、サーバのコンソールに下記のように出ます。

[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-listtrueに戻して、さっきと同じように、サーバを起動して、つながるか試してみます。

 # 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]です。

完成

めでたしめでたし

4
4
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?