搭建整合版Minecraft的服务器
首先
关于Java版服务器的设置,有许多参考文章可以找到,但是关于集成版的信息并不多,我们必须摸索着进行服务器设置。
因此,我将记录下为那些想要在家中或租用VPS上设置集成版服务器的人进行的操作。
我从Realms平台上转过来。每月1000日元可以享受无需维护的多人游戏非常有吸引力,但随着地图扩大,我开始感觉到处理能力的限制,渲染距离也很短,即使有高配电脑也无法充分发挥作用,而且缺乏定制性。玩了一年左右后,我开始考虑自己搭建服务器。
在撰写本文时,我参考了许多网络文章。尤其是Kagoya VPS的Java版服务器设置方法与集成版设置方法几乎相同,可以用来搭建服务器。
前提 – 先决条件
服务器使用的是Kagoya VPS这个租用VPS。选择了每月约1000日元的3核/2GB RAM的套餐,但服务器的安装不会受到更高或更低的限制。
Kagoya VPS上的操作系统是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*
设立服务器
因为有一些必要的软件包,所以请先安装好。可能只需要一个,但请根据需要进行安装。
~ $ sudo apt install iptables-persistent # ポートを常時開放するためのパッケージ
让我们创建一个名为minecraft的用户来进行服务器管理。除非另有说明,今后的所有操作都将由用户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/worlds目录下。
接下来将进行端口开放。对于VPS,我认为只需要完成以下步骤即可结束,但对于家庭服务器,可能需要额外进行路由器等端口开放。
iptables -A INPUT -p tcp --dport 19132 -j ACCEPT # ポート19132を開放
iptables -A INPUT -p tcp --sport 19132 -j ACCEPT # 統合版の初期値なので、他のポートでも問題ないです
既经完成了服务器的配置,现在开始试运行。
让我们用以下命令来运行主机。
~/bedrock/ $ cd 1.17.31.01/
~/bedrock/1.17.31.01/ $ ./bedrock_server
如果在客户端上以这种方式显示,那就没问题了。
但如果只是这样,当启动bedrock_server的ssh关闭时,就无法进行bedrock_server的各种操作了。
下一步将对此进行改进。
II. 使用屏幕启动主机
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的脚本。
#!/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終了
你可以通过使用Ctrl-a d来暂时关闭screen会话。要重新打开已关闭的会话,请记住使用screen -r <会话名称或ID>。
III. 定期执行重新启动
每天重启服务器一次,并在重启之前向玩家通知,重启后自动启动bedrock_server。
将以下脚本放置在主目录中。
#!/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'
虽然倒数的方法可能还有些不同的做法,但大致上应该可以了吧。
我会将此脚本设置为自动执行。
~ $ crontab -e
@reboot /home/minecraft/run.sh # 再起動した後は必ずrun.shを走らせる
13 7 * * * /home/minecraft/run.sh # 万が一再起動にトラブルがあった場合に7:13にrun.shを走らせる
同时,为了进行服务器本身的重新启动,我会登录为root用户并设置相同的计划。
root:~ $ crontab -e
0 7 * * * sudo shutdown -r now
定期进行备份
bedrock_server自带备份功能,但不能进行版本管理,不太方便。因此,我们考虑将世界数据压缩并保存到备份文件夹中作为备份方法。
如前所述,我们将进行每天三次的备份以供紧急恢复,同时每月生成一次地图生成所需的数据。
/home/minecraft
├── backups/ # 毎日バックアップ用フォルダ
│ ├── annual/ # 毎月バックアップ用フォルダ
| ├── backup.sh # バックアップスクリプト
├── bedrock/
│ ├── 1.17.31.01/
│ │ ├── worlds/ # ワールドデータ
进行备份的脚本如下所示。
#!/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も起動したい
由于还有一些粗糙的部分,我们将在今后继续对服务器进行修改,并更新此页面。