前言:这是一篇事后根据回忆写的记录文,所以只有几张完成后的成果截图和能在完工后查看的配置信息截图
本文默认环境问题无需额外解决,自行安装宝塔面板、lnmp、docker管理器插件,并默认有一定的Linux操作基础。部署过程中需要从GitHub拉取代码,自行解决网络问题或准备失败重试脚本,由于需要在docker容器中安装软件,自备速度快的软件源替换掉默认的软件源,替换方法在前面的《折腾Debian》系列文章中有讲过,此处不再赘述,如果是大厂的云服务器,使用自家的内网软件源效果更佳,具体网址自行查看服务器的源或者咨询平台客服
由于我服务器是centos的,而官方的开服程序是只能跑在Ubuntu上面的,我不可能说是为了搭建一个游戏的服务器去专门重装一下服务器的系统,于是我便按照这篇文章的思路,基于docker完成了搭建。
先在宝塔面板的软件商店中安装插件“docker管理器”,然后在“镜像管理”中拉取Ubuntu的镜像,接着用刚刚拉取的镜像创建容器,设置好映射的路径和端口,将启动脚本设置为从外部映射到容器中的文件夹里的一个脚本,这样后续更改容器的启动命令会方便一些
端口的话要把容器里的udp19132和TCP23333映射出来,前者是mc服务器的端口,后者是mcsm的端口,如下图所示,只不过这个在创建容器的时候在宝塔面板的图形化交互界面中就完成了
我是将服务器上的“/www/wwwroot/mcbe/doc”目录映射到容器内的“/home”目录,并挂载为“rw”(读写),如下图所示,不过这个操作也同样是在创建容器的时候在图形化界面完成的
我在创建容器的时候设置的启动命令是“/home/mc.sh”,这样每次这个容器在启动的时候都会执行这个脚本,而我这个脚本是从容器外面映射进去的,这样我就等于是可以随时根据需要,决定容器在启动的时候干啥。在创建好容器之后使用“docker ps -a
”命令可以看到刚刚创建的容器。
但是容器刚创建好,如果脚本还没准备好的话容器是会直接启动失败的,但这问题不大,来到之前创建容器时设置的映射目录,从官网下载好服务端程序,放好东西,准备好脚本之后就可以去启动容器了,此时先把启动mc官方开服程序的命令写进启动脚本里面,然后启动容器,等容器成功启动之后,在宝塔的docker管理器中查看日志,如果不出意外的话能看到mc的开服程序启动起来了
如果容器还是无法启动,日志中像图中所示那样提示“bedrock_server: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory”的话,就需要修改启动脚本了
在启动脚本中把安装openssl的命令也写进去,如果想加速安装的话,把换源的命令也写进去,此处我不提供源推荐,请自备一份已完成换源的sources.list文件,替换掉容器中的sources.list文件,然后执行更新源,以下是脚本全部内容,仅供参考
#!/bin/bash
# 更换服务器自家的内网源
cp /home/sources.list /etc/apt/
# 安装openssl
apt update && apt install openssl -y
# 切换到服务器目录并启动程序
cd /home/mc
LD_LIBRARY_PATH=. ./bedrock_server
然后去宝塔面板的“系统防火墙”插件中放通mc服务器用的udp19132端口
放通端口之后在mc中添加自己搭建的服务器,看看能不能进去,如果能的话那就说明mc服务器已经正常运转了
接下来先进到docker容器里面,把准备好的源替换掉默认的源,接着使用apt命令安装nodejs和npm,安装完成之后把docker容器停掉,将启动mc服务端程序的命令写到另一个脚本里面,仍然放在映射到容器中的目录里面,如果在前面因为无法启动mc服务端程序而在脚本中增加了除了启动mc服务端程序以外去其它命令,比如说cp、apt命令这些,就没必要再写进新的脚本里面了,这些命令已不再需要了,整个启动mc服务器的脚本包括指示器在内也就三行代码:
#!/bin/bash
cd /home/mc
LD_LIBRARY_PATH=. ./bedrock_server
然后用git命令克隆mcsm的GitHub仓库到映射进docker容器里的文件夹中,待克隆完成后进入项目文件夹,使用npm install
命令安装依赖,然后将容器的启动脚本的内容换成启动mcsm面板的内容,具体操作可参考mcsm的Wiki,完成之后能在宝塔的docker管理器的日志中看到面板已经启动,并且能看到给出的初始用户名密码,然后回到宝塔面板的“网站”页,新建一个网站用来反代mcsm(如果前面是用建站来存放docker映射文件的话就直接拿新建的那个站来反代),点开网站的设置,进入到“配置文件”页面,在“server{
”前面添加以下内容:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
添加完成后的结果如下图所示:
接着到“反向代理”页面,添加http://127.0.0.1:23333
的反代,然后打开反代的配置文件,在那一堆“proxy_set_header
”后面加上下面两句:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
添加之后的样子大概就像下面图里面这样,然后保存(参考这篇文档)
或者直接在反代的配置文件中加上这两句:(不用改站点主配置文件)
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
改完之后大概是像图中这样的,这两句表示请求服务器升级协议为WebSocket,mcsm大部分都是通过mcsm连接的
一切顺利之后就可以通过域名访问mcsm了,然后用它给的默认密码登录进去
登录之后大概是这样的
进去之后在服务器管理里面添加一个自定义服务器,服务器根目录设置成docker容器中放mc服务器的路径,自定义启动命令设置成上面弄的启动mc服务端的脚本,保存之后运行
如果一切顺利的话左边会显示“正在运行”,同时mc也可以加到服务器里面去玩了(ps:我折腾这玩意前前后后大概用了六个小时)
参考资料:
- 官方服务端程序下载地址
- mcsm官方GitHub仓库Wiki-Linux-下安装与使用详解
- nginx反向代理WebSocket – 问我学院的文章 – 知乎
- Linux(CentOS) 搭建 minecraft 基岩版服务器 – Shevon Kuan的文章 – 知乎
带佬牛啤, 我看不懂,但我大受震撼.jpg