本文部分译自 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 支持一站式部署:
- 反代软件 - BungeeCord、WaterFall、Velocity、Waterdog、HexaCord、Travertine
- JE 服务器核心 - Spigot、PaperSpigot、SpongeVanilla、SpongeForge、Forge、Glowstone、Tuinity、gomint
- BE 服务器核心 - Nukkit
- 其它 - BuildTools(有点小离谱)
组件
CloudNet 由许多组件组成,接下来我们将对它们进行简单的介绍。
服务
服务(Service)指的是已运行或准备就绪的 Minecraft 服务器或反代软件进程,以下我们均将此二者称为服务。它们基于我们将在下文介绍的任务,可以在控制台中通过 create
命令创建并通过 service
命令管理。
任务
任务(Task)是服务的配置,其可以使用配置文件来表达(通常用 tasks
命令进行配置),也可以是 create
命令运行创建服务时创建的临时任务,详情见此。
组
每个服务都派生于一个任务,而组(Group)则是任务的集合。它们能够向任务添加额外参数,通过 groups
命令管理。
举例说,一个叫 Lobby
的组可以包含任务 Lobby
和 PremiumLobby
,我们将模板 local:Lobby/default
应用到这个组上后,两个任务都会包含这个模板,您仍然可以对这些任务进行分别设置。
模板
模板(Template)是服务运行的基础,它们通常需要包含一个服务核心(如 spigot.jar
)。一个服务可以有多个模板,它们会同时生效。
当新任务被创建时,模板 local:<任务名>/default
也会相应地被创建,并将被自动设置到该任务上。
上文中的 local
是一个模板储存空间,代表储存在磁盘中的特定位置。通过其他模块的拓展功能,开发者们可以添加自己的模块储存空间,如 FTP 储存空间。
示例
接下来,我们将从零开始创建一个基于 CloudNet v3.4 的群组,包含一个每次启动都刷新的大厅和一个生存服。
我们将在 Windows 环境中完成这个示例,您也可以在 Linux 等系统中跟随完成。
开始
首先,前往 Github 下载最新版本的 CloudNet(直链),并将其解压到一个工作文件夹。
启动文件夹中的
start.bat
,等待其运行。
Linux 环境下使用的命令如下所示:
点击展开
1 | mkdir CloudNet && cd CloudNet |
初始化
像很多软件一样,首次运行时 CloudNet 将安装一些类库和自带的模块。完成后,将来到 CloudNet 的初始化配置界面。
本例中的配置如下所示:
点击展开
Do you agree to the Mojang EULA (https://account.mojang.com/documents/minecraft_eula)?
您是否同意 Mojang EULA? - 请仔细阅读后再回答On which host and port should CloudNet run on?
该 CloudNet 节点应该运行在哪里? - 自行决定,建议为127.0.0.1:1410
On which host and port should CloudNet's WebServer run on?
该 CloudNet 网页服务器应该运行在哪里? - 自行决定,建议为127.0.0.1:2812
On which host should the services be started on?
服务应该在哪个地址上运行? - 自行决定,建议为127.0.0.1
How much memory (in MB) can the services running on this CloudNet instance use?
运行的服务最多可以使用多少内存?(MB) - 自行决定Is this node part of a cluster? (MultiRoot)
这是一个集群的节点吗 - 本例中应回答no
What should be the environment of the proxy?
反代默认是什么环境? - 本例中使用BUNGEECORD
Which ServiceVersion should be ran on the proxies?
反代默认使用哪个核心? - 本例中使用waterfall-latest
What should be the environment of the servers?
子服默认是什么环境? - 本例中使用MINECRAFT_SERVER
Which ServiceVersion should be ran on the servers?
子服默认使用哪个核心? - 本例中使用paperspigot-latest
Should a default proxy be created?
是否需要创建一个默认代理 - 本例中回答yes
Should a default lobby be created?
是否需要创建一个默认大厅 - 本例中回答yes
默认情况下,反代将从 25565
端口开始递增,而子服的端口将从 44955
开始递增。
等待自动下载服务端和服务部署完成后,您就可以使用最新版本的 Minecraft 加入服务器了。
关闭正版验证
鉴于国内服务器的广泛现象,您可能需要关闭服务器的正版验证,其具体操作流程如下:
- 打开
./local/templates/Proxy/default/
文件夹,打开其中的config.yml
文件。 - 将
online_mode
字段值改为false
。 - 返回控制台输入并运行
service Proxy-1 delete
,或使用stop
命令关闭并重启服务器。
基本操作
以下所说的命令均指控制台命令,您也可以在游戏中使用 /cloudnet
命令来使用它们。
我们现在可以使用 service
命令控制服务,使用 service list
命令可以查看当前正在运行或准备就绪的服务,可以看到目前有两个服务,分别是 Proxy-1
和 Lobby-1
,基于对应的任务 Proxy
和 Lobby
。
如果您需要查看反代的控制台,使用 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/.../
)。
既然如此,我们如何运行一个生存服呢?
此时我们需要用到静态服务设置:
tasks create Survive MINECRAFT_SERVER
创建一个新任务,将其命名为Survive
,此时会自动创建与其对应的组。tasks task Survive set staticServices true
将Survive
任务设置为静态服务任务。tasks task Survive set minServiceCount 1
设置Survive
任务的最小服务数量为1
,此时会自动启动一个生存服。服务器启动完毕后,您可以在游戏内通过
/server Survive-1
命令进入服务器(需要提前设置权限)。此时,服务器文件夹位于./local/services/Survive-1
。
结尾
本文到此便结束了,感谢您的阅读!若发现任何错误或描述不当,请务必联系我。
参考资料
- CloudNetService. (2021). CloudNET - The Cloud Network Environment Technology | CloudNetService.
- CloudNetService. (2021). README.md · CloudNetService/CloudNet-v3 (9650b2e).