見出し画像

持て余したVPSにMinecraftのマルチサーバーを立ててみた話(統合版1.20.41)

こんにちは、かたさんです。

最近マイクラをやり始めたのですが、前々から借りているVPSが暇しがちだったので、マイクラのサーバを立ててみました。

かなり貧弱なVPSですが、4人プレイなら十分快適に遊べています。

参考: 貧弱なVPS上で動いていたアプリ

2週間ほど運用してみて大きな問題もなかったので、これまで得た知見をまとめようと思います。

この記事の主なターゲット

  • Linuxをある程度触ったことがある人(sudo, crontab, systemctl, viと聞いて何のことか分かる程度)

  • マイクラ サーバ 立て方とかで調べても業者ブログが多すぎて辟易している人

そのため、OSのインストール等基礎中の基礎みたいな部分は書いていません。
一応、OSが動いている環境下で本記事の内容をそのままなぞればサーバが立つつもりです。

注意しておきますが、本記事はマイクラサーバのホスティングサービス等は使わずに1から構築する人向けとなります。

今回使ったマイクラのバージョン

統合版 1.20.41.02
DL先: https://www.minecraft.net/ja-jp/download/server/bedrock

マルチサーバのメリット

  • 24時間稼働しているため、いつでも作業可能

  • 出先からでも同じワールドにアクセスできる

自分がプレイしていない時間帯に他のメンバが作業を進めてくれたことが何度もありました。
Realmsと違って、ホストがログインしてなくても使えることも大きいと思います。コストはかかりますけどね。

また、暇な電車移動の時間にスマホからログインしてアイアンゴーレムトラップで鉄を稼ぐ、みたいなこともできたりするので、ソロプレイでも十分大きなメリットがあると言えます。

今回使ったVM

Conoha(VPS) 1GBプラン (年間12,000円ぐらい)

  • OS: Ubuntu 20.04 LTS

  • RAM: 1GB

  • CPU: Xeon E5-2660 v3 @ 2.60GHz (2core)

  • Storage: SSD 100GB

4人プレイ時にはRAM2GBが推奨されているようですが、このスペックでも快適に動いています。
エリトラ使用時にたまにラグを感じることがあるとの声はありましたが、私の環境では分かりませんでした。

インストール方法

$USERはVPS(Linux)上のユーザ名に置き換えて読んでください。
また、(必要に応じて)と付いている部分は不要ならスルーしてください。

サーバアプリのインストール

cd (ダウンロードしたファイルの保存先)
scp bedrock-server-1.20.41.02.zip (サーバのIPアドレス):/home/$USER/
  • (以下VPS内での作業)保存先を決めてzipファイルを解凍する
    ここでは、VPS側のマイクラサーバ用ディレクトリを/home/$USER/minecraftに作るものとします。

mkdir /home/$USER/minecraft
mv /home/$USER/bedrock-server-1.20.41.02.zip minecraft
cd /home/$USER/minecraft
unzip *.zip

マイクラサーバのサービス化

インストール方法を紹介した記事ではscreenやtmuxを使ってバックグラウンド起動させる方法が多く見られますが、ログ参照のしやすさなどからこちらの方法を推奨します。

sudo vim /lib/systemd/system/minecraft.serviceを実行し、以下のように書いて保存する。

[Unit]
Description=minecraft
After=network.target local-fs.target

[Service]
Type=simple
User=自分のユーザ名
Group=自分のユーザ名
WorkingDirectory=/home/自分のユーザ名/minecraft/1.20.41.02
Environment=LD_LIBRARY_PATH=.
ExecStart=/home/自分のユーザ名/minecraft/1.20.41.02/bedrock_server
Restart=always

[Install]
WantedBy=multi-user.target

以下を実行してsystemdにサービスを登録する。

sudo systemctl daemon-reload

OS起動時にマイクラサーバを自動起動したい方は以下を実行する。

sudo systemctl enable minecraft

(必要に応じて)既存のワールドの取り込み

Windows版で作ったワールドをサーバで流用する場合は以下のようにやるとよいです。

  • 以下のフォルダ内から流用したいワールドのフォルダを見つける
    複数ある場合は更新時刻などから特定してください。

C:\Users\(ユーザID)\AppData\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\minecraftWorlds\
  • 上で見つけたフォルダごと/home/$USER/minecraft/worlds/内にコピーする 

    ここで、worlds/内に置くディレクトリの名前は特殊文字を使わない範囲で自由に変更しても構いません。
    私は/home/$USER/minecraft/worlds/tanuki_landとしています。
    設定ファイルにここのフォルダ名を指定する項目があります。

    注意 ワールドのフォルダに使えない文字: \n \r \t \f ` ? * \ <> | \ "

Allowed values: Any string without semicolon symbol or symbols illegal for file name: /\n\r\t\f`?*\\<>|\":

マイクラサーバの設定

設定ファイル(server.properties)の編集

セキュリティ性を担保したり、その他マルチ向けの設定をしたりします。

vim /home/$USER/minecraft/server.properties 
で対応する部分を以下のように変更する。
allow-list=trueだけは絶対に設定した方が良いです。

server-name=tanuki_land # ログイン時に表示されるサーバ名、好きな名前をつけてよい
max-players=4 # 最大同時ログインユーザ数。VPSのスペックに応じて決める。
allow-list=true # true:ID許可制にする
server-port=19132 # ポート番号を変えたい場合は変える
level-name=MYWORLDDIR # minecraft/worlds/内のワールドフォルダ名を指定

Windows版で作ったワールドを持ち込んだ場合は、level-nameでフォルダ名の指定をするようにしてください。
これをやらないとワールドが新規作成されてしまうので注意

荒らし対策として、サーバへのログインをID許可性にしています。この通りに設定すると、許可するユーザのゲーマータグ(統合版で表示されるプレーヤ名)を登録したユーザしかログインできなくなります。

許可ユーザリスト(allowlist.json)の編集

マイクラサーバへのログインを許可するユーザを登録します。

vim /home/$USER/minecraft/allowlist.json
で以下のようにログインするユーザを全員登録してください。

[
    {"ignoresPlayerLimit":true,"name":"Kata Tanuki"},
    {"ignoresPlayerLimit":false,"name":"2人目のゲーマータグ"}
]

ここで、ignoresPlayerLimitはそのユーザをサーバの人数上限で計算に含めないというフラグになります。必要に応じてtrueにしてください。

注意事項ですが、最後のユーザの{}の後には,(カンマ)を入れないようにしてください。jsonのパースに失敗してバグります。

登録されたユーザがログインすると、このファイルにxuid(16桁の数字)が登録されます。

(必要に応じて)ユーザに管理者権限をつける(permissions.json)

デフォルト設定では難易度変更等やチートのon/off等ができないですが、ユーザごとに権限を与える場合は、
vim /home/$USER/minecraft/permissions.json から

[
    {"permission": "operator", "xuid":"25354xxxxxxxxxxx"},
    {"permission": "operator", "xuid":"25354xxxxxxxxxxx"}
]

のように、権限を与えるメンバのxuidを登録してください。xuid取得のために、一度サーバにログインしてもらってallowlist.jsonが更新されるのを待つ必要がある点に注意してください。

(必要に応じて)自動バックアップの設定

これだけの対策をしても荒らされた場合や、その他ロールバックしたい問題が起きた場合に備えて、自動バックアップを行います。

  • vim /home/$USER/minecraft/worlds/backup.sh を以下のように書いて保存する。

!/bin/bash

dst_dir="."
world_dir="/home/$USER/minecraft/worlds/MYWORLDDIR"

if [ "$1" == "daily" ];then
        date=`date "+%Y-%m-%d"`
        fileheader="bkd"
        dst="${dst_dir}/${fileheader}_$date.tar.gz"
        age="2"
        tailage="+3"
else
        date=`date "+%Y-%m-%d_%H-%M"`
        fileheader="bkh"
        dst="${dst_dir}/${fileheader}_$date.tar.gz"
        age="3"
        tailage="+4"
fi

tar zcf $dst $world_dir
echo "backup done. (-> $dst)"

# remove old files
delfilelist=```ls -1t ${dst_dir}/${fileheader}_*.tar.gz|tail -n ${tailage}```
rm -rfv ${delfilelist}
  • crontab -eから以下を書き込んで保存する。

# 毎日深夜2時にバックアップする (2世代残す)
0 2 * * * bash /home/$USER/minecraft/worlds/backup.sh daily

# 2時間おきにバックアップする (3世代残す)
0 */2 * * * bash /home/$USER/minecraft/worlds/backup.sh

dst_dirにはバックアップファイルの保存先を指定してください。
私の場合、HTTPサーバを立てて公開しているディレクトリを指定することで、メンバがバックアップファイルを閲覧できるようにしています。

world_dirにはワールドのデータがあるディレクトリ名を指定してください。

本スクリプトは、

引数なし: 2時間おきの定時バックアップ用 (3世代残す)

引数dailyを指定: 1日1回のバックアップ用 (2世代残す)

のように使い分ける想定をしています。

(必要に応じて)リソースパックを適用する

リソースパックをサーバに適用する場合は以下のようにするとできます。
(配布形式が様々だと思うので詳述はしません)

  • リソースパック(.mcpack)をダウンロードし、/home/$USER/minecraft/worlds/resource_packs内に転送する

  • mcpackファイルの拡張子を.zipに変更し、unzipで解凍する
    (resource_packs/のサブフォルダ内に解凍されるようにしてください)

  • vim /home/$USER/minecraft/worlds/world_resource_packs.jsonを以下のように編集して保存する。

[
        {
                "pack_id" : "そのリソースパックのID",
                "version" : [ 1, 0, 0 ]
        }
]

ここで、pack_idとversionはインストールしたいリソースパックのmanifest.jsonのuuid、versionをそれぞれ指定するようにしてください。

                "uuid": "a0a23e81-5262-4301-92e4-27996933c497",
                "version": [1, 0, 0],

複数のリソースパックを指定することもできます。

サーバの操作方法

起動・停止・ログ表示

  • 起動

sudo systemctl start minecraft
  • 停止

sudo systemctl stop minecraft
  • ログ表示

各ユーザのログイン・ログアウト時刻ぐらいしか見られないですが一応。
もう少し色んな情報が見られると良いんですが。

journalctl | grep bedrock_server | less

サーバへのログイン

マイクラ統合版のスタート画面でプレイ→サーバタブ→一番下のサーバーを追加を押して、

サーバ名: 好きな文字列
サーバーアドレス: マイクラサーバのIPアドレス
ポート: server.propertiesで指定したポート番号(デフォルトは19132)

のように指定してください。
サーバーアドレスはVPSならグローバルIPアドレスを、
自宅内LANとかならローカルIPアドレスを指定してください。
どちらの場合もip aを叩けば表示されると思います。

サーバ情報設定画面

ロールバック

やることは以下です。

  1. サーバを停止する

  2. ワールドフォルダをバックアップしていたものと置き換える

  3. サーバを起動する

sudo systemctl stop minecraft

cd /home/$USER/minecraft/worlds/
rm -rf MYWORLDDIR
tar zxvf (ロールバック対象ファイル名).tar.gz

sudo systemctl start minecraft

クリエイティブモードでの検証

サーバ側のワールドフォルダをWindows側のワールド保存先にコピーするだけでできます。

繰り返しになりますが、Windows版のワールド保存先は以下です。

C:\Users\(ユーザID)\AppData\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\minecraftWorlds\

その他補足

Raspberry Piでは動くか?

恐らく動くと思いますが、私のRaspi4は32bit版OSが入っていたのでダメでした。
去年リリースされた64bit版を入れてやれば、同じような手順で動くはずです。

おわりに

ということで、余ったVPS(そんな概念ある?)でマイクラサーバを立てる手順をまとめてみました。

必要最低限しか書いていないですが、それなりにLinuxを触ってきた人であれば数分で構築できると思います(zipのダウンロード時間を除く)。

今回立てたサーバ(たぬきランド)は自分含めて4人で共有していますが、何故か全員SP皆伝の音ゲーマーサーバになりました(?)
サーバを立てた男はプレイ歴1ヶ月くらいの初心者ですが、皆に教えられながら楽しくやっております。

たぬきランドの拠点に作られたたぬき看板

この記事が何かの助けになりましたら幸いです。

よいマイクラライフをお送りください。

では!


この記事が気に入ったらサポートをしてみませんか?