用 Cuberite 搭建高性能 Minecraft 联机服务器。

用自有服务器来存储 Minecraft 游戏数据的好处有很多,最明显的就是让数据管理方面的事情变得更灵活可控。你不再需要把单机游戏的存档复制得到处都是,只在需要它的时候,连上网络,打开安装包,快速施展作战平台。根本不受时间和空间的限制。即便是网络中断,数据也都安全存储在云端。 如果你曾抱怨使用官方发布的 Java 程序来作为服务端软件消耗了大量的内存资源,对小型 VPS 来说不堪重负。那还可以使用我所推荐的一款经过专门优化和编译的第三方 Minecraft 游戏服务端软件。这个软件叫 Cuberite,是使用 C++ 语言来构建的服务端版本,启动和运行都只消耗极小的内存和 CPU 运算力。相对 Java 版的服务软件来说实在是一个轻量级的选择。 你可以从 Cuberite  官方网站选择适应对应平台的程序来直接部署,也可以就在树莓派、编译器里面自行编译出兼容性更好的二进制软件包来部署。而我服务器是 Debian Linux。开始编译之前把目录切换到 /srv/minecraft,如果没有就先创建一个。

准备和编译

1
apt-get install clang git cmake make

本来上面所执行的安装已经满足基本的编译条件,但在实际编译环境中还是遇到一点问题。为了防止出错,后面又补充了一些必要的依赖包。或者像我一样上来直接一行命令安装这个完整的工具包(apt-get install build-essential)。 然后下载 Cuberite 自动脚本,进行编译。

1
sh -c "$(wget -O - https://compile.cuberite.org)"

将程序挂到后台自动运行

在 systemd 里面添加一个 Cuberite 服务。(出于对服务器的安全性考虑,还是应该选择一个独立的用户和组来运行游戏服务,而不是像我一样直接在 root 账号下跑程序 :P )

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[Unit]
 Description=Cuberite Server
 After=local-fs.target network.target
[Service]
 Type=forking
 User=root
 WorkingDirectory=/srv/minecraft/cuberite/Server
 ExecStart=/srv/minecraft/cuberite/Server/Cuberite --service
[Install]
 WantedBy=multi-user.target

把这个文件保存到 /etc/systemd/system/cuberite.service。 最后,测试一下能否启动这个的服务。没有问题了,就可以将它添加到自动启动。

1
2
systemctl start cuberite.service
systemctl enable cuberite.service

按照之前的步骤编译好以后,所有的程序都存储在 /srv/minecraft/cuberite/Server 这个目录里面,服务通过 ./Cuberite 启动。你也可以把整个文件夹拷贝到别处使用。

tip

关于该程序最新的特性还请阅读 CUBERITE USER’S MANUAL