前言

之前偶然刷到一个用nas搭建服务器的教程,兴致冲冲就去试了,效果还不错。
P.S.一定要把应用池设置在固态上,我设置在我的拆机叠瓦上每次服务器区块加载到一定数量就不加载了

准备

  • 我的truenas版本为ElectricEel-24.10.224.10之后的应该都可以
  • truenas可以正常连接上docker hub

mcsm面板搭建

mcsm面板服由两个部分组成,一个是web端管理页面,一个是daemon守护程序,也是服务器核心

web端搭建

进入docker hub,搜索mcsm,寻找你想要搭建的版本,我目前推荐alisaqaqngc7331两个版本的面板,后者可以选择自带java的,会方便很多,不用自己折腾java,但没有glibc,ysm一类的mod用不了。

进行truenas应用池,新增自定义程序,仓库名称填上你选择的版本和标签

网络设置面板webui映射,大部分mcsm容器端口都是23333,你需要在docker hub上查看(查看方法在最下面),外部端口填写你自己访问的端口

添加webui的端口

存储选项选择Host Path,挂在路径一般默认为/opt/mcsm/web/data,Host Path选择你想要他挂载的路径地址,作用是将docker里的/opt/mcsm/web/data挂载到你设置的路径上,方便你通过smb共享进行备份修改

完成设置后部署运行,访问192.168.x.x(你的nas内网地址):26656(你设置的端口号)进入mcsm的外部端,设置好账号密码,然后先扔一边

daemon搭建

最好选择与web端同一个人制作的daemon端,照例新增自定义程序,填写仓库名称,我选择的版本是自带java22的,所以标签是last-jdk22

网络设置填写端口,开放24444来让web端能连上daemon端,再加几个作为mc服务器访问的端口,我就不映射了,不需要webui管理,不用开面板

存储和web端一样,daemon一般为/opt/mcsm/daemon/data,挂载在你设置的路径上

完成后部署启动

连接web端与daemon端

在应用池查看daemon日志

将访问密钥记录下来

回到mcsm的web端,最上面一栏菜单选择节点,新增节点,备注随便写,远程ip填写nas的内网ip,端口填写你设置的,默认是24444,密钥把你刚刚复制到粘贴上去就好

创建mc服务器

最上面一栏菜单选择应用实例,点击新建实例Minecraft Java版游戏服务器,部署应用实例的方式根据你自己,我选择上传单个服务端软件,然后上传forge端或者fabric端的jar服务器文件即可,比如我上传的是forge-1.20.1-47.3.29-installer.jar,运行命令就是

1
java -jar forge-1.20.1-47.3.29-installer.jar --installServer

创建好实例后运行,会开始forge版的下载安装,等待片刻下载完成,log提示可以删除安装文件了,在下面功能组中点击应用实例设置,将启动命令改为bash run.sh

可以修改run.sh文件在里面加入-nogui,比如我的

1
java @user_jvm_args.txt @libraries/net/minecraftforge/forge/1.20.1-47.3.29/unix_args.txt -nogui "$@"

再修改user_jvm_args.txt文件,在文件末尾加上-Xmx8G限制最大内存为8g,最小内存可以用-Xms2G来设置,也可以不设置
不清楚在启动命令后面加直接加有没有效果,如

1
bash run.sh -Xmx8G -nogui

修改保存完回到终端,启动实例,运行一下会自动终止,log提示需要同意eula协议,在功能组中点击服务端配置文件,编辑eula为即可,回到终端继续启动,就会开始生成世界了,此时可以修改应用组里的Minecraft 状态获取中的端口为你设置的端口,比如我的25566,再进入功能组中的服务端配置文件,编辑server.properties,将端口号改为你设置的端口,其他的按照你的需要进行更改,重启实例即可生效。

增加mod

smb访问你所挂载的daemon的路径,进入InstanceData\你服务器名字\mod,将mod拖进去重启服务器即可

docker参数查询

ngc7331/mcsmanager-web为例,进入内容页面,如图,选择Tags

选择版本,一般都是最新版latest,点进去

这就是具体参数页面了

EXPOSE map[23333/tcp:{}]这种为端口,VOLUME [/opt/mcsm/web/data /opt/mcsm/web/logs]是挂载的路径,一个是数据一个是日志

参考

bilibili鸡汁睿