CloudNet — 基于节点的下一代 Minecraft 群组服集群网络
milkory 🐇

image

CloudNet Header

本文部分译自 CloudNet v3.4 Documentation,原文以 Apache License 2.0 许可协议发布。

前言

如果您正准备开始运营一个群组服,您可能会首先想到使用 BungeeCord 或 Velocity 作为反代软件(相关教程见此)。然而在子服过多,或是动态部署要求较强的时候,它们的表现往往不尽人意。尽管一些插件可以弥补这些不足,但为何不考虑一下使用一个服务器集群管理系统来实现这些需求呢?

CloudNet 正为此而生。它是一个所有人都可以使用的,免费、开源的 Minecraft 服务器集群系统,支持一站式动态地部署当前主流的大部分服务器核心或反代软件。它既可以在一个小型的服务器中协助您管理子服与反代,也可以在一个大型集群网络中发挥重要作用。

特色

  • 集群支持 - 对于大型服务器,您可以通过集群将玩家分布在不同的虚拟或专用服务器上
  • 模板系统 - 随时通过模板动态部署一个服务器,同时也支持原版生存等的静态服务
  • 全局权限 - 内置模块 CloudPerms 支持在所有服务器中使用全局的权限管理系统(可选)
  • 子服沟通 - 内置模块 CloudBridge 允许您通过编程沟通各个子服
  • 命令控制 - 包含一个命令行控制台,同时其也支持在游戏内通过 /cloudnet 命令调用
  • 易于拓展 - 包含一个开放的 API、一个 HTTP/HTTPS 服务器、一个 RESTful API
  • 社区支持 - 如果您有任何问题,欢迎加入 CloudNet 的 Discord 服务器 询问(英语或德语)

目前的最新版 CloudNet v3.4 支持一站式部署:

组件

CloudNet 由许多组件组成,接下来我们将对它们进行简单的介绍。

服务

服务(Service)指的是已运行或准备就绪的 Minecraft 服务器或反代软件进程,以下我们均将此二者称为服务。它们基于我们将在下文介绍的任务,可以在控制台中通过 create 命令创建并通过 service 命令管理。

任务

任务(Task)是服务的配置,其可以使用配置文件来表达(通常用 tasks 命令进行配置),也可以是 create 命令运行创建服务时创建的临时任务,详情见此

每个服务都派生于一个任务,而组(Group)则是任务的集合。它们能够向任务添加额外参数,通过 groups 命令管理。

举例说,一个叫 Lobby 的组可以包含任务 LobbyPremiumLobby,我们将模板 local:Lobby/default 应用到这个组上后,两个任务都会包含这个模板,您仍然可以对这些任务进行分别设置。

模板

模板(Template)是服务运行的基础,它们通常需要包含一个服务核心(如 spigot.jar)。一个服务可以有多个模板,它们会同时生效。

当新任务被创建时,模板 local:<任务名>/default 也会相应地被创建,并将被自动设置到该任务上。

上文中的 local 是一个模板储存空间,代表储存在磁盘中的特定位置。通过其他模块的拓展功能,开发者们可以添加自己的模块储存空间,如 FTP 储存空间

示例

接下来,我们将从零开始创建一个基于 CloudNet v3.4 的群组,包含一个每次启动都刷新的大厅和一个生存服。

我们将在 Windows 环境中完成这个示例,您也可以在 Linux 等系统中跟随完成。

开始

  1. 首先,前往 Github 下载最新版本的 CloudNet(直链),并将其解压到一个工作文件夹。

  2. 启动文件夹中的 start.bat,等待其运行。

Linux 环境下使用的命令如下所示:

点击展开
1
2
3
4
5
mkdir CloudNet && cd CloudNet
wget https://github.com/CloudNetService/CloudNet-v3/releases/latest/download/CloudNet.zip
unzip CloudNet.zip
chmod +x start.sh
./start.sh

初始化

像很多软件一样,首次运行时 CloudNet 将安装一些类库和自带的模块。完成后,将来到 CloudNet 的初始化配置界面。

本例中的配置如下所示:

点击展开
  1. Do you agree to the Mojang EULA (https://account.mojang.com/documents/minecraft_eula)? 您是否同意 Mojang EULA? - 请仔细阅读后再回答

  2. On which host and port should CloudNet run on? 该 CloudNet 节点应该运行在哪里? - 自行决定,建议为 127.0.0.1:1410

  3. On which host and port should CloudNet's WebServer run on? 该 CloudNet 网页服务器应该运行在哪里? - 自行决定,建议为 127.0.0.1:2812

  4. On which host should the services be started on? 服务应该在哪个地址上运行? - 自行决定,建议为 127.0.0.1

  5. How much memory (in MB) can the services running on this CloudNet instance use? 运行的服务最多可以使用多少内存?(MB) - 自行决定

  6. Is this node part of a cluster? (MultiRoot) 这是一个集群的节点吗 - 本例中应回答 no

  7. What should be the environment of the proxy? 反代默认是什么环境? - 本例中使用 BUNGEECORD

  8. Which ServiceVersion should be ran on the proxies? 反代默认使用哪个核心? - 本例中使用 waterfall-latest

  9. What should be the environment of the servers? 子服默认是什么环境? - 本例中使用 MINECRAFT_SERVER

  10. Which ServiceVersion should be ran on the servers? 子服默认使用哪个核心? - 本例中使用 paperspigot-latest

  11. Should a default proxy be created? 是否需要创建一个默认代理 - 本例中回答 yes

  12. Should a default lobby be created? 是否需要创建一个默认大厅 - 本例中回答 yes

image

CloudNet 的初始化界面

默认情况下,反代将从 25565 端口开始递增,而子服的端口将从 44955 开始递增。

等待自动下载服务端和服务部署完成后,您就可以使用最新版本的 Minecraft 加入服务器了。

image

服务器列表

关闭正版验证

鉴于国内服务器的广泛现象,您可能需要关闭服务器的正版验证,其具体操作流程如下:

  1. 打开 ./local/templates/Proxy/default/ 文件夹,打开其中的 config.yml 文件。
  2. online_mode 字段值改为 false
  3. 返回控制台输入并运行 service Proxy-1 delete,或使用 stop 命令关闭并重启服务器。

基本操作

以下所说的命令均指控制台命令,您也可以在游戏中使用 /cloudnet 命令来使用它们。

我们现在可以使用 service 命令控制服务,使用 service list 命令可以查看当前正在运行或准备就绪的服务,可以看到目前有两个服务,分别是 Proxy-1Lobby-1,基于对应的任务 ProxyLobby

如果您需要查看反代的控制台,使用 screen toggle Proxy-1 命令即可,关闭也是相同的命令。您还可以用同样的方法开启多个控制台,而这些控制台都将在同一个命令行界面中出现。

如果您需要在反代的控制台中输入命令,需使用 service Proxy-1 command <命令>。为了看到命令返回,请先像上面所说那样开启反代的控制台屏幕。

由于全局权限(cloudnet-cloudperms)模块的存在,您设置的 OP 可能不会生效,请使用 perms user <用户> add permission * 作为替代。

关闭 `cloudnet-cloudperms`

您可能不希望使用这个模块,请在 ./modules/CloudNet-CloudPerms/config.json 文件中将 enabled 字段设置为 false,或在 excludedGroups 字段中设置您不需要该模块发挥作用的组。

由于代理同步(cloudnet-syncproxy)模块的存在,您需要在该模块中的配置中修改 MOTD 和 TAB 栏样式,其位于 ./modules/CloudNet-SyncProxy/config.json

当需要关闭 CloudNet 时,请务必在控制台界面使用 stop 命令来操作,以防止服务的持续运行。

生存服

回归正题,此时如果您删除服务 Lobby-1,并因此触发了任务 Lobby 的最低服务器数量要求而自动重新创建了一个新的 Lobby-1 服务,回到服务器,您会发现整个世界已经重新生成。这是因为新的服务会重新套用模板,而原来的模板是不包含世界文件的。

为什么重启服务不会发生这样的事?

如果您只是重启服务,那就不会再重新套用模板,而是直接使用服务之前创建的文件(位于 ./temp/services/.../)。

既然如此,我们如何运行一个生存服呢?

此时我们需要用到静态服务设置:

  1. tasks create Survive MINECRAFT_SERVER 创建一个新任务,将其命名为 Survive,此时会自动创建与其对应的组。

  2. tasks task Survive set staticServices trueSurvive 任务设置为静态服务任务。

  3. tasks task Survive set minServiceCount 1 设置 Survive 任务的最小服务数量为 1,此时会自动启动一个生存服。

  4. 服务器启动完毕后,您可以在游戏内通过 /server Survive-1 命令进入服务器(需要提前设置权限)。此时,服务器文件夹位于 ./local/services/Survive-1

结尾

本文到此便结束了,感谢您的阅读!若发现任何错误或描述不当,请务必联系我。

参考资料
  1. CloudNetService. (2021). CloudNET - The Cloud Network Environment Technology | CloudNetService.
  2. CloudNetService. (2021). README.md · CloudNetService/CloudNet-v3 (9650b2e).