Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2882

統合版Minecraftのサーバを建てる

$
0
0
はじめに Java版のサーバ設置に関してはあちらこちらに参考になる記事があるのですが、こと統合版に関してはあまり情報がなく、手探りでサーバの設定をしなくてはなりません。 そこで今後統合版のサーバを自宅サーバやレンタルVPS上に設置してみたいという方のために作業の記録を残しておきます。 私はRealmsからの乗り換えとなります。毎月1000円でメンテフリーでマルチができるのは魅力ですが、マップが拡大するにつれて処理能力の限界を感じて来たり、レンダリング距離が短く高スペックなPCがあっても生かせなかったり、カスタマイズ性にも乏しいので1年ほど遊んでいるとなんだか物足りなくなってきたので自前でサーバ設置を考え始めました。 本記事の執筆にあたり様々なネット記事を参考にしました。特にKagoya VPSさんが出しているJava版サーバ設置方法の記事とほとんど同じ方法で統合版もサーバを建てることができます。 前提 サーバはKagoya VPSというレンタルVPSを利用します。プランは3コア/2GB RAMの月1000円ほどのものを選んでいますが、それ以上でもそれ以下でもサーバ設置に当たっては問題ありません。 Kagoya VPS上のOSはUbuntu 20.04 LTSです。 また各種操作を行うにあたり、ssh接続ができたりnanoやvim等のエディタが使えることを前提として話を進めて行きます。 やりたいこと 公式サーバをインストールして走らせる screenで操作できるように(後述) 毎日3回バックアップを取る 最大5個のバージョンを残しておく 毎月1回アーカイブを残す Minecraft Overviewerで地図を作るため 毎日1回再起動する 再起動にあたり自動でbedrock_serverも起動したい 参考程度に、ディレクトリ構成図を載せておきます。 /home/minecraft ├── backups/ │   ├── annual/ │   ├── backup.sh* ├── bedrock/ │   ├── 1.17.31.01/ │   │   ├── bedrock_server* │   │   ├── permissions.json │   │   ├── server.properties │   │   ├── worlds/ │   ├── bedrock-server-1.17.31.01.zip │   └── update.sh* ├── reboot.sh* ├── run.sh* I. サーバを設置する 最初に必要なパッケージがいくつかあるのでインストールしておきましょう。 おそらく一つだけで大丈夫ですが、適宜rootでインストールしておいてください。 ~ $ sudo apt install iptables-persistent # ポートを常時開放するためのパッケージ 次にサーバ管理を行うためのユーザminecraftを作りましょう。 移行の操作は ~ $ sudo adduser minecraft ~ $ su - minecraft 続いてMojangの公式サイトから統合版サーバをVPSにダウンロードして展開します。 下記ページにアクセスしてLinux用サーバのダウンロードリンクを取得してください。 作業用フォルダbedrock/を作ってそこにダウンロード、さらにその下にサブフォルダ1.17.31.01/を作って展開します。 サブフォルダを作るのは、サーバのアップデートの際に便利という理由です。 サブフォルダの名称は便宜上バージョンを付けていますが、必ずこの通りにはしなくて大丈夫です。 ~ $ mkdir bedrock/ ~ $ cd bedrock/ ~/bedrock/ $ wget https://minecraft.azureedge.net/bin-linux/bedrock-server-1.17.31.01.zip ~/bedrock/ $ unzip bedrock-server* -d 1.17.31.01/ 既にワールドデータがある場合は、scpなどの方法でサーバに保存し、~/bedrock/1.17.31.01 ポート開放をします。VPSの場合であれば以下で終わると思いますが、自宅サーバの場合は別途ルータなどのポート開放が必要になる場合があります。 iptables -A INPUT -p tcp --dport 19132 -j ACCEPT # ポート19132を開放 iptalbes -A INPUT -p tcp --sport 19132 -j ACCEPT # 統合版の初期値なので、他のポートでも問題ないです これでサーバの設定にひと段落ついたので試運転します。 以下のコマンドでホストを動かしましょう。 ~/bedrock/ $ cd 1.17.31.01/ ~/bedrock/1.17.31.01/ $ /bedrock_server クライアント側でこのように表示されればOKです。 ただこのままではbedrock_serverを起動したsshが閉じてしまうとbedrock_serverの諸操作ができなくなってしまいます。 次項でこれを改善します。 II. screenでホストを走らせる screenとは、仮想環境のようなものです。複数のセッションを一括管理できるものです。 bedrock_serverを起動するには以下のようなコマンドを打てばいいのですが、毎回タイプするのは面倒です。 cd ~/bedrock/1.17.31.01; screen -dm -S minecraft /bin/bash -c ~/bedrock/1.17.31.01/bedrock_server そこでホームディレクトリにrun.shというスクリプトを書いて配置します。 run.sh #!/bin/bash cd ~/bedrock/1.17.31.01/ screen -dm -S minecraft /bin/bash -c ~/bedrock/1.17.31.01/bedrock_server 今後スクリプトが出た際は実行権限も忘れずに。 ~ $ chmod 755 run.sh 実際にこのスクリプトを走らせてみます。 ~ $ ./run.sh このままだと画面には何も変化ありません。 screenコマンドの詳しい使い方は他の方の解説に譲るとして、bedrock_serverに入って何か操作するときは以下のコマンドを実行します。 ~ $ screen -r minecraft # minecraftという名前のセッションに接続 [2021-09-27 07:30:55:803 INFO] Level Name: OurCity [2021-09-27 07:30:55:804 ERROR] xuid or permission missing from permissions file: permissions.json (略) title @a title hello # プレイヤーの画面にhelloと表示できる op Steve # プレイヤーSteveにOperator権限を付与 stop # bedrock_server終了 screenはCtrl-a dでセッションを一旦閉じることができます。閉じたセッションを開きなおすにはscreen -r <セッション名 or ID>と覚えておきましょう。 III. 再起動を定期的に行う 毎日1回サーバの再起動を行い、再起動前にプレイヤーにアナウンスして再起動後は自動的にbedrock_serverを起動するようにします。 ホームディレクトリに以下のスクリプトを配置します。 reboot.sh #!/bin/bash # tellrawコマンドの表示プリセット STR_1="tellraw @a {\"rawtext\":[{\"text\":\"[SERVER] Reboot in " STR_2=" sec\"}]}\\015" STR_3=" min\"}]}\\015" # 再起動する旨をプレイヤーに告知 screen -S minecraft -p 0 -X stuff 'tellraw @a {"rawtext":[{"text":"[SERVER] The server will be rebooted in 10 min"}]}\015' # 9分前から1分前まで2分刻みでカウントダウン for i in {10..2}; do sleep 1m screen -S minecraft -p 0 -X stuff "$STR_1$i$STR_3" done # 60秒前から20秒前まで10秒刻みでカウントダウン for i in 60 50 40 30 20; do sleep 10s screen -S minecraft -p 0 -X stuff "$STR_1$i$STR_2" done # 10秒前から1秒刻みでカウントダウン for i in {10..0}; do sleep 1s screen -S minecraft -p 0 -X stuff "$STR_1$i$STR_2" done # bedrock_serverを終了 screen -S minecraft -p 0 -X stuff 'stop\015' # サーバを再起動 shutdown -r now カウントダウンの方法はもう少しやりようがあった気もしますが、まあだいたいでいいかなと思います。 このスクリプトを自動実行するように設定をしておきます。 ~ $ crontab -e @reboot /home/minecraft/run.sh # 再起動した後は必ずrun.shを走らせる 0 7 * * * /home/minecraft/reboot.sh # 毎日AM7:00に再起動 IV. バックアップを定期的に行う bedrock_serverには標準でバックアップ機能がついているのですが、バージョン管理ができないなどあまり便利とは言えないものなので、ワールドデータを圧縮してバックアップ用フォルダに保存する方法を考えます。 先述の通り、万が一の復元用のバックアップは1日3回、また地図を作成するためのデータは月1回生成します。 /home/minecraft ├── backups/ # 毎日バックアップ用フォルダ │   ├── annual/ # 毎月バックアップ用フォルダ | ├── backup.sh # バックアップスクリプト ├── bedrock/ │   ├── 1.17.31.01/ │   │   ├── worlds/ # ワールドデータ バックアップを行うスクリプトは以下の通りです。 backup.sh #!/bin/bash # バックアップ元 TARGET_DIR=/home/minecraft/bedrock/1.17.31.01/worlds/OurCity/ # バックアップ先 BACKUP_DIR=/home/minecraft/backups/`date +%Y-%m-%d_%H:%M:%S` # 毎月バックアップ先 ANNUAL_DIR=/home/minecraft/backups/annual/`date +%Y-%m` # 毎日バックアップの保管数 NUM_GENS=5 # コマンドライン引数からバックアップモードを指定 # 0 : 毎日バックアップ # 1 : 毎月バックアップ BACKUP_MODE=$1 # 古いバックアップを消去する関数 delete_file () { CNT=0 for file in `ls -1t *zip` do CNT=$((CNT+1)) if [ $CNT -le $NUM_GENS ]; then continue fi eval "rm ${file}" done } # zipファイルを作成する関数 make_zip () { zip ${1} -r ${2} } # BACKUP_MODEの判定 if [ $BACKUP_MODE -eq 0 ]; then make_zip $BACKUP_DIR $TARGET_DIR delete_file elif [ $BACKUP_MODE -eq 1 ]; then make_zip $ANNUAL_DIR $TARGET_DIR fi このコマンドを定期的に実行させるためにcrontabを編集します。 ~ $ crontab -e ... # 以下追加行 0 3 * * * /home/minecraft/backups/backup.sh 0 # 毎日AM3:00に実行 0 12 * * * /home/minecraft/backups/backup.sh 0 # 毎日PM12:00に実行 0 19 * * * /home/minecraft/backups/backup.sh 0 # 毎日PM19:00に実行 0 3 * * * /home/minecraft/backups/backup.sh 1 # 毎月1日に実行 さいごに 今回は統合版Minecraftのサーバ設置の一部始終をお伝えいたしました。 お伝えした内容で以下のことができるようになりました。 公式サーバをインストールして走らせる screenで操作できるように(後述) 毎日3回バックアップを取る 最大5個のバージョンを残しておく 毎月1回アーカイブを残す Minecraft Overviewerで地図を作るため 毎日1回再起動する 再起動にあたり自動でbedrock_serverも起動したい まだ粗削りな部分がありますので、今後もサーバに手を加えつつこちらのページも更新していきます。

Viewing all articles
Browse latest Browse all 2882

Trending Articles