抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Velocity 是一款全新的 Minecraft 服务器代理,与 BungeeCord 相比,它拥有更高的性能与更好的安全性,它不仅能为高版本服务端提供更高效,更安全的传输协议,也能为低版本服务端提供 BungeeCord 的原始传输协议。Velocity 快得惊人:登录、服务器切换等,充分利用服务器的硬件进行优化。

部署环境

系统: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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
FROM ubuntu:22.04
WORKDIR /
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \\
sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \\
apt clean && apt update && \\
apt install -y locales wget tar git && \\
locale-gen zh_CN.utf8 && \\
wget -c <https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz> -O - | tar -xz && \\
mv jdk-17.0.8 openjdk &&\\
apt clean -y && \\
rm -rf \\
/var/cache/debconf/* \\
/var/lib/apt/lists/* \\
/var/log/* \\
/var/tmp/* \\
&& rm -rf /tmp/*
ENV JAVA_HOME=/openjdk
ENV PATH=$PATH:$JAVA_HOME/bin
ENV LANG=zh_CN.UTF-8
ENV LANGUAGE=zh_CN.UTF-8
ENV LC_ALL=zh_CN.UTF-8
ENV TZ=Asia/Shanghai
RUN mkdir -p /workspace
WORKDIR /workspace

Dockerfile 文件所在文件夹执行下列命令:

1
docker build -t mcjdk:17 .

下载 Velocity 及 Paper MC 服务器核心

下载地址:

我下载到的版本分别为: velocity-3.2.0-SNAPSHOT-265.jarpaper-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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
[
{
"Name": "bridge",
"Id": "61ad4570d7964299570e806a2ef802a7f7881b947b09fdc0cc00cfe1c04c917d",
"Created": "2023-08-14T19:52:42.230310126+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"185938be502d011baf0e516f165be5595cf731c329eb63038bde76a5c6256433": {
"Name": "portainer",
"EndpointID": "384b286c3a31a1fbdd863ac2277c8aca166c69c6832e216db4d51b21e6ba23c4",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
},
"94ce24b77470dad3d5712c02f75fda1a9a4a486b0964ff3c905a9df9be2d08bd": {
"Name": "velocity",
"EndpointID": "919c623c80d15689a52804035d1436e381290580dddc4ccfaf5b10166229795d",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
},
"bd99eec321a02ab763f056bcba0fab76ce7407a7b57a9305dabb8ab13d9e4b82": {
"Name": "create",
"EndpointID": "cd441d7e3f0ea76d30e876f4129a1509be3dd796b8205636885da8357dcfbde0",
"MacAddress": "02:42:ac:11:00:05",
"IPv4Address": "172.17.0.5/16",
"IPv6Address": ""
},
"ff72bab53d6e4983f4d39943f45e85fe390689564b475d67b59878809443f36b": {
"Name": "mainworld",
"EndpointID": "6f0af01b9c9d1d5321ba70784a95e7d6f83a257bc6021c35dd4cc6b1bfa7baeb",
"MacAddress": "02:42:ac:11:00:04",
"IPv4Address": "172.17.0.4/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]

可以看到,代理端容器IP为 172.17.0.3 ,主世界容器IP为 172.17.0.4 ,创造世界容器IP为 172.17.0.5

修改代理端配置接入服务器

进入代理端实例控制台,选择文件管理,找到velocity.toml ,点击其后的编辑按钮,找到第15行左右,修改 [server] 部分如下:

1
2
3
4
[servers]
main = "172.17.0.4:25565"
create = "172.17.0.5:25565"
try = [ "main" ]

保存关闭之后,找到 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 ,进入服务器开始游玩吧!

评论