这篇文章介绍了我在 Ubuntu 18.04 上搭建官方的 Minecraft 基岩版服务端(Minecraft Bedrock Dedicated Server)的过程。
环境
阿里云学生机,配置为 1 核 CPU,2G 内存,拥有公网 IP,操作系统为 Ubuntu 18.04。
我以 zack
用户的身份登录到服务器。该用户加入了 sudo
组,也就是说可以使用 sudo
命令提权。这是我专门用来操作该服务器的用户,用 root
用户直接操控系统是很不安全的(当然,有自信的当我没说,且用且珍惜)。
安装
下载
打开官方服务端的下载页面:
右边是 Ubuntu 的服务端。勾选同意协议后,右键下载按钮拷贝链接,写这篇文章时的最新版本为 1.10.0.7。
请留意 Minecraft 客户端的大版本是否与下载的一致,客户端版本在主界面右下角:
如果客户端版本高于服务器,在连接服务器的时候会提示“无法连接:过期的服务器”。
接着在服务器上操作:
创建安装服务端的目录,例如我的是 ~/minecraft/bedrock
。cd
进入该目录,使用 wget
下载刚才拷贝的链接,是一个压缩包,然后使用 unzip
解压(找不到命令的话用 apt
安装):
wget https://minecraft.azureedge.net/bin-linux/bedrock-server-1.10.0.7.zip
unzip bedrock-server-1.10.0.7.zip
可以看到,解压出来的文件中有一个 bedrock_server_how_to.html
文件,这是附的教程,在本地下载一份打开查看。
配置
根据教程,配置文件为 server.properties
,用 vim
打开修改。配置文件中的选项参考教程。我改了下面几个选项:
- 服务端名称:
server-name=Zack's Minecraft Bedrock Dedicated Server
- 难度:
difficulty=normal
,默认是easy
- 最大玩家数:
max-players=3
,我这小服务器可承受不起 10 个人 - 白名单:
white-list=true
,稍后设置 - 世界名称:
level-name=Nitrogen
,我的 Minecraft 世界名称是按元素周期表上常温下是气体的元素顺序来命名的,这是我的第三个世界(前两个是 Java 版的),so……PS:世界的相关文件放在worlds
中的同名文件夹中,有则加载,无则新建,也就是说如果要更换世界,在启动服务端之前更改这个选项就行
接下来设置白名单,配置文件为 whitelist.json
,用 vim
打开修改。我的配置如下:
[
{
"name": "zacjact1568",
"ignoresPlayerLimit": true
}
]
name
:玩家的 Xbox Live 游戏标签,因此要求玩家必须登录 Xbox Live(盗版退散)ignoresPlayerLimit
:是否忽略server.properties
中使用max-players
选项指定的最大玩家数,但服务端硬性规定了玩家数不能超过 30,也就是说,如果当前服务端中玩家数大于指定的最大玩家数但小于 30,那么该字段为true
的玩家就可以强行加入,玩家数等于 30 就不行了
开放端口号
默认端口号是 19132
,而一些云服务器提供商默认只开放几个常用的端口号,反正不包括这个就是了,所以要自行去打开。例如我用的阿里云,需要登录管理控制台,在实例使用的安全组规则下添加这么一条:
协议类型是 UDP,不是 TCP!官方 Wiki 上有写。
PS:Java 版服务端用的才是 TCP。
此外,一些 Linux 发行版还自带默认开启的防火墙(例如 CentOS 7),还得自行去允许访问相应的端口号。
启动
根据教程,执行以下命令启动服务端:
sudo LD_LIBRARY_PATH=. ./bedrock_server
需要使用 root
身份执行,否则会报错。
输出一些服务端的版本、配置信息,启动成功:
注意最下面的光标,在这个界面可以输入一些命令,例如踢出玩家、更改游戏难度等,具体见教程。
打开 Minecraft 客户端,添加服务器:
- 服务器名称:可以跟服务端配置文件中
server-name
选项指定的不一样,但不能超过 16 个字符 - 服务器地址:填服务器的外网 IP 地址
保存后可以在服务器列表中找到啦(如果找不到,可以尝试下杀掉 app 重新启动):
可以看到,显示出了服务器名称、当前在线玩家和最大玩家数,以及网络情况。
下面最重要的来了,进入世界看看……(好紧张):
成功啦,服务端也输出了玩家连接的信息:
[2019-03-29 18:22:31 INFO] Player connected: zacjact1568, xuid: 2533275013650129
这个 xuid
是玩家首次连接的时候自动生成的,相当于玩家的唯一标识符,稍后会用到。
PS:可以看到程序自动在 whitelist.json
中添加了对应玩家的 xuid
字段。
玩家权限
玩家有三种权限,operator
、member
和 visitor
,也没在教程里找到这三种权限的具体说明,不过从名字来看应该是由高到低了。默认权限是 member
,使用 server.properties
中的 default-player-permission-level
选项指定,也就是说,如果不在该文件中指定某个玩家的权限,那么该玩家的权限就是 member
。但我自己玩当然要最高权限了,所以还需要配置一下。
在客户端上退出服务器,然后电脑上也退出服务端程序(macOS 按 ⌃C
)。用 vim
打开权限配置文件 permissions.json
修改。我的配置如下:
[
{
"xuid": "2533275013650129",
"permission": "operator"
}
]
xuid
:在客户端连接到服务器时输出的信息中可以找到permission
:权限名,我的是最高权限operator
后台运行
可以发现,启动服务端后就必须保持 SSH 连接,一旦关闭终端,会话结束,服务端进程也就随之关闭了。Minecraft 基岩版的官方服务端又没有后台执行的命令。但还有一个神器——Screen,它可以让命令在一个新的会话窗口中执行。
首先,使用 apt
安装 Screen:
sudo apt install screen
使用 screen
命令启动一个名为 mcbds
的新会话窗口:
screen -S mcbds
可以看到,进入了一个全新的命令行界面,像是启动了一个新的终端窗口。而还是保留了当前路径。在这个“新窗口”中输入上面的启动服务端的命令。
接着按 Control + A 键(macOS 是 ⌃A
),松手(注意按完没有任何反应),再按 D 键,可以看到,又回到了原来的终端窗口,有信息输出:
[detached from 3307.mcbds]
D 指“detach”,表示暂时从这个“新窗口”中离开。
现在就可以安心地使用 exit
命令从服务器登出了,Minecraft 服务端会借助 Screen 在后台运行。下次登录服务器,再使用以下命令恢复 mcbds
会话窗口:
screen -x mcbds
如果想关闭这个会话窗口,退出服务端后,在该会话窗口中内执行 exit
即可回到原来的终端窗口,输出信息:
[screen is terminating]
参考资料
- Bedrock Dedicated Server – Official Minecraft Wiki
- Minecraft 基岩版官方服务器Alpha测试版本开服指南 - 基岩版多人联机 - Minecraft(我的世界)中文论坛 -
- Linux里的screen命令使用方法-接20步开服帖 - 基岩版多人联机 - Minecraft(我的世界)中文论坛 -
- linux screen 命令详解 - zhezhelin - 博客园
- 【基岩版官服】 Minecraft Bedrock Dedicated Server - 基岩版软件资源 - Minecraft(我的世界)中文论坛 -
后记
我购买阿里云学生机的目的就是为了搭 Minecraft 服务端,买的时候想到既然自己已经把 Vultr 的服务器换成 CentOS 7 了,阿里云的也用 CentOS 7 吧,没想到要搭的时候才看到官方服务端居然说的只支持 Ubuntu……exo me?但在网上看到其他人以前发布的该网页的截图来看,“Ubuntu”原来是“Linux”,不知 Mojang 是因为何种原因只支持 Ubuntu 了。但想到不都是 Linux 发行版吗,按理来说安装起来不会有太大差别吧,然而搭的时候才发现坑多到爆炸,OpenSSL 版本低的问题解决了,又来个 glibc 和 glibcxx,看到网上说升级 glibc 很危险,但还是准备试一试,然而 configure 的时候就报错了,说很多依赖都没有,看着这一大堆 no
头大,心一横把系统重装成 Ubuntu 18.04 了,直接就能启动服务器了,没有任何报错,也怪不得网页上要把“FOR LINUX”改成“FOR UBUNTU”了🙄。