基于Docker的群辉NAS mc服务器搭建记录

Time

2025.1.7:开始搭建

2025.1.12:搭建完成

软硬件环境

  • NAS:群晖DS224+
  • 系统:DSM 7.2.2-72806 Update 2
  • MCSM docker镜像版本:githubyumao/mcsmanager-web:latest、githubyumao/mcsmanager-daemon:latest
  • java镜像版本:mcsm-openjdk:17
  • mc服务器内核:paper 1.20.1 release

前期工作

SSH软件选择

要连接NAS时发现自己还是用的古早的putty,,,决定换一下。在xshell,tabby,mobaxterm中选择了mobaxterm,查了一些资料列在下面了。

相关资料:

Docker环境配置

操作里要拉取docker镜像,但因为一些众所周知的原因截至2024年9月国内站点全暴毙了,目前的想法是在内网下用另一个设备实现全局代理来科学上网,之后再在docker里拉取clash镜像实现一劳永逸。

但是经过两个多小时的试验发现全局代理莫名其妙不生效,具体表现为在root用户下可以ping通baidu.com但是curl google.com无响应,同时套件中心查找功能也失效,很是头疼。

目前没有解决办法,于是思路改为直接离线部署docker的clash镜像解决——然后现在问题就变成了怎么离线部署clash容器,这里目前使用docker命令下直接读取镜像压缩包的模式,所以先安装win10的docker desktop,之后做迁移。

但是我犯了个很大的错误:win10的docker desktop可基于hyper-v或wsl安装,我这里选择的是wsl后端,但问题是这是通过虚拟化实现的,是在win中搭建linux子系统,导致我找不到image的安装位置,,,或者直接是在虚拟机的虚拟盘里没法直接定位到,这条路子又不太好走通了。

于是问题又回到了寻找还现存的docker镜像网站——好在是最后找到了www。另外在搜寻资料的过程中发现clash由于不再维护已经不是主流魔法软件了,所以换成了v2ray为内核的v2raya(自己还是更喜欢GUI一点),只能重新扒翻文档,最后还是学会了。

于是目前的魔法路径是启动容器后通过2017端口登录v2raya,然后选择节点连接即可。关闭时逆序操作,关闭节点连接后关闭容器。不过有一个很显而易见的坏处就是自己家是公网ip,导致开着容器的时候梯子是裸着的,,,现在只能随用随关了,打算搞完这些东西用防火墙解决一下。

另外记录一下发生的一些bug和想法:

  • 上面提到过的全局代理不生效问题。

  • 以wsl2为核心的docker image文件导出如何操作。

  • 服务器与镜像服务器关系:为什么docker在服务器无法连接的情况下不会切换至镜像服务器连接(至少我这边现象是这样),另外为什么只有魔法可以连接到注册表而修改仓库地址不行(但是却可以pull?)。

  • 开始构建v2vara镜像时使用的是bridge的docker网络架构,本来想着做防护,但是一旦通过防火墙仅将2017端口暴露给内网就会连接失败(这不是docker自己做好的端口映射吗,搞不懂),所以现在又改为host网络了,会不会导致不安全情形?发生这一问题的原因又是什么?

  • 现在开容器的时候端口是直接裸露的,有没有一种方法使控制端口仅对内网开放的同时其他端口正常使用,目前想不出来bridge和host的做法。

  • 开容器必须使用root权限否则在连接节点时出错,查了一下好像是centos iptables的问题,为什么?

  • 群辉nas可以curl google.com生效但是ping不通,二者的工作原理有什么不同?

相关资料:

搭建MCSM面板

因为决定采用docker,所以前期工作完成后部署起来意料之中的顺利——基本上跟着官方文档走一遍就行。需要注意一下群辉系统好像没给管理员太多权限,所以在dsm里有时镜像会构建失败,尽量还是通过ssh在root权限下用命令行操作。

相关资料:

部署服务端

根据官方流程,首先需要启动用于维护服务器的daemon容器,之后在web面板内进行配置就行。MCSM面板集成了开服绝大部分需要的操作,基本上点一点服务器就搭好了(笑)。总体来看,基本流程为:

  1. 新增节点:将面板web端连接到守护进程端daemon上,其中可能需要配置daemon节点密钥,根据doc走一遍就行。

  2. 为节点添加应用实例:在应用实例板块选择新建应用,选择自己需要搭建的应用类型即可。这里我选择的是搭建java服务器Minecraft快速部署功能,选择所有语言后挑选自己喜欢的服务器核心即可。

  3. 服务器设置:应用实例构建完成后会进入终端板块,在功能组中选择应用实例设置。其中基础设置高级设置基本不需要操作,因为本篇文章主要是基于docker环境构建的服务器,所以需要配置一下服务器的容器化,相关参数如下:

    其中需要额外注意Docker镜像网络模式两项。前者会指定mc运行环境,可以通过拉取相关java环境镜像解决。后者需要与自己的docker网络模式相适应(我选择的是与前面web面板及daemon容器在同一个桥接网络下,不能保证不在这个网络下构建会不会出错,这边的远离我没太搞清楚)

  4. 服务器初始化:运行终端即可,paper的服务器核心会自动处理,最终在java容器内搭建好服务器,之后就可以通过服务器ip+端口号连接服务器。

p.s. 在这部分有一个问题困扰了我好久:我是如何实现服务器存储数据的持久化的——换言之,物理机与服务器容器内的文件的映射关系是怎样的。最终也是找到了答案:

1
2
3
物理机地址:/volumn1/docker/mcsmanger/daemon...
<--挂载-->daemon容器内地址(daemon image):/opt/mcsmanger/daemin/...
<--映射-->服务器运行时地址(java image):/workspace

通过一级挂载与一级映射解决,好棒的思路。

相关资料:

一些碎碎念

竟然还是童年想联机玩mc的愿景驱使我搞完这些东西,,,现在自己也是有了能和好友快乐玩耍的一番天地了。以及终于补完了和老吴的mc约定,顺带还想起来和天哥开荒服务器的的时光,当时的我是否又能想象到现在的自己。

以及现在边学科三边搞这东西真是心力憔悴,前几天熬夜找问题还得早起练车,,,寒假回来还没好好歇着喂(!

以及公网ip给了我太多的可能性了,下一步可能考虑迁移一下博客(顺便再美化一下),以及想起来毕设也还得搞(发愁,雷达自己没接触过要重新学啊…

怎么还有人看到这,如果有兴趣来陪我聊天吧,QQ一直都在看到了就会回(摊手

相关记录

开服流程:打开web容器->打开deamon容器->在web面板内打开服务器容器