我大概从2013年开始接触到了 Minecraft ,算下来,今年正好是我接触 Minecraft 的第十个年头。
熟悉 Docker 以后,我着手开始把我现在跑的服务容器化,从某种意义上,这非常「优雅」——可以很方便的管理各个服务,还不用担心各种环境不兼容的问题。
暑假将至,为了方便和朋友们联机玩 MC,遂自行搭建一个服务器,顺便进一步熟悉 Docker 和 Docker Compose。
服务器选择
服务器有两个要求,一是性能要足够强,二是距离要足够近,目前我手头有三台机器,分别位于香港和洛杉矶,不是性能不够就是距离太远,延迟太高。所以,都无法满足需求。
最近恰逢618,各大云主机厂商都有活动,遂购入一台某大厂轻量服务器,位于上海,2C4G5M,对于一个入门 MC 服务器来说完全足够。当然,买了这一个服务器不可能只是跑跑 MC,别的一些对带宽要求不高的服务我肯定也会放在上面。
那么直接 Deploy,似乎用的还是 AMD 的新 EPYC,还行。
安装 Docker
相比于一键脚本,我个人还是偏好手动安装 Docker。个人为了方便直接用了 Root,这不是最佳实践,尽可能用普通用户并在必要的时候用sudo
。
添加 PGP 密钥:
|
|
向source.list
添加软件源:
|
|
更新软件包缓存并安装 Docker:
|
|
启动 Docker:
|
|
至此 Docker 已经安装完成,顺遍装好了 Docker Compose。
Docker 换源
国内服务器这点非常蛋疼。
换源还要有一个命令行的文本编辑器,于是我决定先装个 Vim:
|
|
编辑/创建/etc/docker/daemon.json
:
|
|
编辑成如下内容:
|
|
https://mirror.ccs.tencentyun.com
是某大厂的内网镜像,内网拉取速度极快,还不计流量,不在内网里的服务器无法使用,应当换成下列镜像:
https://hub-mirror.c.163.com
https://ustc-edu-cn.mirror.aliyuncs.com
https://mirror.baidubce.com
随后重启 Docker 服务即可完成换源:
|
|
粗略部署
我部署服务的原则是先 Get it to work,再 Polish。
对于 MC 这种 community driven 的游戏来说,社区的力量是强大的,基本上什么样的需求都能在社区里找到对应的解决方案。我直接采用了 itzg/docker-minecraft-server。
不得不吐槽的是,这个项目的文档写得实在是没有那么友好,摸索了一下,总算是把这个服务基本的跑起来了。这时我的docker-compose.yml
如下:
|
|
这样的 Docker Compose 配置能以最新的版本把一个基础的 Vanilla Server 跑起来,只能勉强满足几个人的联机需求,肯定也没几个人会将这样的配置用到生产环境。
进一步调整
要进一步调整,要先确认调整的方向,否则就是无头苍蝇,误打误撞,没有目标,十分痛苦。实际感受一番后,我大致整理出了此时配置的问题,有些是 Vanilla 客户端的问题:
- 版本不固定
- 缺少基本的性能数据
- 图标和 MOTD 需要调整
- 没有白名单
- 不能装插件
- 有正版验证(无所谓,我有正版)
有了这个方向,我就可以有目标的去调整这个 Server 的配置。接下来要做的,就是查阅这个项目的文档,做出自己需要的修改。
固定版本
说实话 MC 的版本更新还挺频繁的,前一个版本尚未体验下一个版本就会出现。我暂时先固定这服务器的 MC 版本为1.19.4
,日后充分游玩再慢慢升级。
同时 Vanilla Server 实在是太垃圾,顺便将其换成 PAPER 岂不美哉?分别设置VERSION
和TYPE
两个环境变量即可。藉由 Paper 的优点,这样也同时解决了服务器插件和性能数据的问题。
白名单
设置ENABLE_WHITELIST
和ENFORCE_WHITELIST
两个环境变量,即可强制服务器核查白名单。同时,不要忘记将自己加入白名单,由于服务器的 OP 会被自动加入白名单,只需要将自己提前设置为 OP 即可,设置OPS
即可做到这一点。
图标和 MOTD
设置ICON
和MOTD
两个环境变量即可自定义服务器的图标和标语。
正版验证
设置ONLINE_MODE
变量即可控制正版验证的开关。
需要注意的是,关闭ONLINE_MODE
后,服务器会根据玩家的离线 UUID 判断身份,离线 UUID 和在线 UUID 不同,此时添加 OP 和黑白名单都需要改用离线 UUID 进行。
最终的 docker-compose.yml
|
|
一些杂七杂八的事情
RCON 的连接
服务器运行后,若要在不进入游戏的情况下管理服务器,就需要用到 RCON。方法很简单,使用这个项目绑定的 rcon-cli 即可:
|
|
注意将<name_of_container>
换成自己的容器名。
作者还推荐了一个叫做rcon-web-admin
的项目,打算过一阵子尝试。
安装插件
Paper 支持 Bukkit 的插件,还有自己的插件,插件数量上完全无需担心。
我们在配置docker-compose.yml
时,已经做了 bind 操作,会在docker-compose.yml
所在目录的相对路径下创建一个叫做minecraft-data
的文件夹,并绑定到容器的data
目录,将下载好的插件.jar
文件丢进./minecraft-data/plugins
目录就完成了插件的安装。
我选用了 World Edit,Grief Prevention 和 Dead Chest 三个插件,保证原汁原味的生存体验。
最后
如果你有开服经验并且偏向手动修改server.properties
,将OVERRIDE_SERVER_PROPERTIES
设置为FALSE
即可将server.properties
的控制权交还到我们手中,这也是一种配置的手段。
Docker 开服还是相对容易的,社区已经造好了轮子,免去了很多不必要的麻烦。稍后我会继续 play around with the server,继续探索这个游戏无限的可能性。