部署环境
系统:Debian 12
软件:
Docker version 24.0.5, build ced0996
MCSManager 面板版本:9.9.0,远程节点版本:3.4.0
安装 MCSManager 控制台面板
1 | wget -qO- <https://gitee.com/mcsmanager/script/raw/master/setup_cn.sh> | bash |
构建适用于 MCSM 启动 MC 服务器的 OpenJDK17 的容器镜像
新建Dockerfile
文件,写入以下内容:
1 | FROM ubuntu:22.04 |
在Dockerfile
文件所在文件夹执行下列命令:
1 | docker build -t mcjdk:17 . |
下载 Velocity 及 Paper MC 服务器核心
下载地址:
我下载到的版本分别为: velocity-3.2.0-SNAPSHOT-265.jar
和 paper-1.20.1-167.jar
请依实际情况修改后续命令。
建立代理端实例
登入 MCSM 面板(http://服务器IP:23333),在左侧应用实例页面中,选择 新建实例
,选择 Java 版 Minecraft 游戏服务端
,选择 上传单个服务端软件(推荐)
,设置实例名为 代理端
,启动命令为:
1 | java -Xms1G -Xmx1G -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:+UnlockExperimentalVMOptions -XX:+ParallelRefProcEnabled -XX:+AlwaysPreTouch -XX:MaxInlineLevel=15 -jar velocity-3.2.0-SNAPSHOT-265.jar |
选择上传 Velocity 核心文件 velocity-3.2.0-SNAPSHOT-265.jar
,上传完成后自动建立实例并跳转到实例配置详情页面。
配置代理端实例为虚拟化容器启动模式
在实例配置详情页面最下方,找到 进程启动方式(推荐)
选项,修改为 虚拟化容器(Linux Docker)
,环境镜像选择刚才构建的 mcjdk:17
镜像,开放端口设置为 25577:25577/tcp
,容器名设置为 velocity
,网络模式设置为 bridge
,保存配置,打开控制台页面。
启动代理端
在左侧实例控制组中点击启动实例,右侧实例控制台中显示 Done
即为启动成功。
建立主世界实例
在左侧应用实例页面中,选择 新建实例
,选择 Java 版 Minecraft 游戏服务端
,选择 上传单个服务端软件(推荐)
,设置实例名为 主世界
,启动命令为:
1 | java -Xms2048M -Xmx4096M -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:InitiatingHeapOccupancyPercent=15 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper-1.20.1-167.jar nogui |
选择上传 paper 核心文件 paper-1.20.1-167.jar
,上传完成后自动建立实例,点击跳转到实例配置详情页面。
配置主世界实例为虚拟化容器启动模式
在实例配置详情页面最下方,找到 进程启动方式(推荐)
选项,修改为 虚拟化容器(Linux Docker)
,环境镜像选择刚才构建的 mcjdk:17
镜像,容器名设置为 mainworld
,网络模式设置为 bridge
,保存配置,打开控制台页面。
启动主世界服务器
在左侧实例控制组中点击启动实例,稍等片刻,实例会自动关闭,点击实例功能组中的服务端配置文件,找到 eula.txt
,点击浏览,将 eula
后的选项修改为是,保存配置,回到控制台,再次启动实例,右侧实例控制台中显示 Done
即为启动成功。
建立其他世界实例
建立步骤与主世界类似,暂不细说。
配置代理端与 MC 服务器的连接
查看各实例容器的内部 IP 地址
MCSM 面板左侧节点管理页面,选择对应节点点击控制台,打开控制台页面,下方点击开启命令,开启控制台实例。在控制台窗口中输入如下命令:
1 | docker network inspect bridge |
检查各个实例容器名下方的 IPv4Address
,即IPv4地址,详细输出结果如下:
1 | [ |
可以看到,代理端容器IP为 172.17.0.3
,主世界容器IP为 172.17.0.4
,创造世界容器IP为 172.17.0.5
。
修改代理端配置接入服务器
进入代理端实例控制台,选择文件管理,找到velocity.toml
,点击其后的编辑按钮,找到第15行左右,修改 [server]
部分如下:
1 | [servers] |
保存关闭之后,找到 forwarding.secret
,点击编辑,复制其中的内容。
回到控制台页面,选择服务端配置文件,点击 [Velocity] velocity.toml
,找到 player-info-forwarding-mode
选项,将值修改为 MODERN
。
修改各世界服务器配置
进入世界服务器实例控制台,选择服务器端配置文件,点击 [通用] server.properties
,将 online-mode
即正版验证修改为否,保存,回到配置文件列表,点击 [Paper] paper-global.yml
,找到 proxies/velocity/enabled
选项及 proxies/velocity/online-mode
选项,都修改为是,并将事先复制的 forwarding.secret
中的内容粘贴到 proxies/velocity/secret
的值中,保存。
修改完成后依次重启代理端实例及各世界服务器实例。
开启我的世界客户端,建立一个新的多人游戏,IP 为服务器外部 IP,端口为代理端的端口,即 25577
,进入服务器开始游玩吧!