前几天在别人的服务器玩MC,本来挺开心的,但是连续两次意外导致我还是放弃了在别人服务器玩耍的意愿。
一次是我养的鸡突然被其他人使用命令传送到一起还被杀了,另外一次是我模组的装备快成型了,服务器突然崩了,然后模组就全部被删了。连续两次的不稳定运行导致我十分难受,但是刚好,一年前我搭建的服务器还在运行,于是我就动起了歪心思。
由于已经有将近一年时间没玩,并且MC也发布了新版,所以我打算将底层版本升级到MC1.20.1,并且把我认为好玩的模组放进去。
步骤
这次打算将服务器放在家里的路由器兼服务器上,顺便加了一根16G的内存条,用于保证MC和其他服务的正常运行。因为之前服务器是放在腾讯的服务器上的,所以这次也算是全新的环境安装了(备份迁移的步骤顺便也记录一下)。
一、备份旧数据
首先就是停服,然后备份/opt/mcsmanager/daemon/data/InstanceData
下面的实例文件夹并下载到本地服务器上(不得不说,小水管的服务器下载是真的慢,可以考虑转存到对应地区的COS上,在下载,这样是慢速的,当然会有一定的付费),以40a1f43057914c1c8f069b17f356af24
文件夹为例。
tar -czvf 40a1f43057914c1c8f069b17f356af24.tar.gz 40a1f43057914c1c8f069b17f356af24/
首先要确实是否使用的是MCSM默认的文件夹,如果之前开服的时候有改动,需要备份对应的文件夹。
二、MCSM环境创建
使用官方的一键脚本即可。
wget -qO- https://gitee.com/mcsmanager/script/raw/master/setup_cn.sh | bash
# 先启动面板守护进程。
# 这是用于进程控制,终端管理的服务进程。
systemctl start mcsm-daemon.service
# 再启动面板 Web 服务。
# 这是用来实现支持网页访问和用户管理的服务。
systemctl start mcsm-web.service
# 重启面板命令
systemctl restart mcsm-daemon.service
systemctl restart mcsm-web.service
# 停止面板命令
systemctl stop mcsm-web.service
systemctl stop mcsm-daemon.service
三、JAVA环境安装
我这边直接采用的是asdf
来管理各种环境的版本,如果没有安装可以先按照github的教程安装asdf
。
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.12.0
# 将环境变量添加到/etc/profile最后一行
. "$HOME/.asdf/completions/asdf.bash"
然后安装java,我这里选择的是oracle的版本。
asdf plugin-add java
asdf list all java
asdf install java oracle-18.0.2.1
asdf global java oracle-18.0.2.1
java --version
四、下载对应的Forge安装包和需要的mod
点击下载链接,下载想要的版本。
在MCSM中创建实例,启动命令填写/root/.asdf/installs/java/oracle-18.0.2.1/bin/java -server -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.country=CN -jar ${ProgramName} --installServer
.
这里一定要注意java的地址要选择实际的java文件的地址,如果只填写java或者whereis java
中的地址,会出现java版本找不到的问题。
第一次启动会进行安装服务器,可能需要“较好的网络环境”,安装完之后会自动停止。然后在文件管理中编辑run.sh
为对应的启动命令。
/root/.asdf/installs/java/oracle-18.0.2.1/bin/java @user_jvm_args.txt -server -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.country=CN @libraries/net/minecraftforge/forge/1.20.1-47.1.0/unix_args.txt "$@"
并且把MCSM实例中的启动脚本更改为bash run.sh
,再把对应的mod文件放到对应的文件夹,就可以启动实例了。这里因为我是服务器升级,地图文件还是想保留,所以还需要将对应的地图文件进行替换掉,这里就不详细赘述了。
最后说两句
一开始我以为最大的难点是地图兼容性,和forge安装的问题,没想到问题出现在了java找不到的问题上,由于我是用的是asdf
来控制java版本,而mcsm选择使用了虚拟环境来运行MC服务器,这导致asdf
的global
并没有生效,这里我还没研究清楚global的机制,所以只能去寻找java的实际地址,然后被whereis java
的那两个地址欺骗了很久,最后,在看了实际的文件夹结果之后,我才找到了现在的实际地址。