搭建整合版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
image.png

如果在客户端上以这种方式显示,那就没问题了。
但如果只是这样,当启动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も起動したい

由于还有一些粗糙的部分,我们将在今后继续对服务器进行修改,并更新此页面。

广告
将在 10 秒后关闭
bannerAds