自己搭建的游戏服务器

我已经很久没有玩网络游戏了,但至少还在应用程序里面留了一个 Minecraft,它也是我为数不多的游戏库存之一。

用自有服务器来存储 Minecraft 游戏数据的好处有很多,最明显的就是让数据管理方面的事情变得更灵活可控。你不再需要把单机游戏的存档复制得到处都是,只在需要它的时候,连上网络,打开安装包,快速施展作战平台。根本不受时间和空间的限制。即便是网络中断,数据也都安全存储在云端。

如果你曾抱怨使用官方发布的 Java 程序来作为服务端软件消耗了大量的内存资源,对小型 VPS 来说不堪重负。那还可以使用我所推荐的一款经过专门优化和编译的第三方 Minecraft 游戏服务端软件。这个软件叫 Cuberite,是使用 C++ 语言来构建的服务端版本,启动和运行都只消耗极小的内存和 CPU 运算力。相对 Java 版的服务软件来说实在是一个轻量级的选择。

你可以从 Cuberite 官方网站选择适应对应平台的程序来直接部署,也可以就在树莓派、编译器里面自行编译出兼容性更好的二进制软件包来部署。而我服务器是 Debian Linux。开始编译之前把目录切换到 /srv/minecraft,如果没有就先创建一个。

准备和编译

apt-get install clang git cmake make

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

然后下载 Cuberite 自动脚本,进行编译。

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

将程序挂到后台自动运行

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

[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
最后,测试一下能否启动这个的服务。没有问题了,就可以将它添加到自动启动。

systemctl start cuberite.service
systemctl enable cuberite.service

按照之前的步骤编译好以后,所有的程序都存储在 /srv/minecraft/cuberite/Server 这个目录里面,服务通过 ./Cuberite 启动。你也可以把整个文件夹拷贝到别处使用。
提示:由于在将来的宣传上本博客的报道要是有偏差,我们是要负责的。所以,关于该程序最新的特性还请阅读 CUBERITE USER’S MANUAL