QxMO的空间

用docker搭建velocity群组服

本文是对 B 站视频【干货向】用docker搭建velocity群组服(vc)的图文版补充,适合跟着操作或收藏查阅。


前面几篇文章学了那么多docker的基础知识和应用,终于到了对docker的最终应用了——用docker搭建群组服

在开始之前,我们先聊聊群组服——群组服是干嘛的

通常来说,如果你去到别人的服务器,或者大型一点的服务器,都会发现服务器会分成几个不同的“世界”,像有一些生电服务器,把服务器划分成主服、镜像服、创造服,有一些服务器把服务器划成一个玩游戏比如起床战争、一个玩空岛生存、一个作资源世界分担压力,而且你会发现很多时候这些都不会存在同一个“世界”内的,而是可以通过一些指令,或者是一些点击操作,就可以完成各个“世界”的跳转

想要实现群组服其实很简单,比如直接在一个服务端内放多个世界的模组 Multiworld ,当然也有其他办法,既然有多个世界,那么我就一个世界一个服务端,然后把所有的服务端连接到一个统一的程序,由这个程序向玩家转发数据,玩家也只需要连接这个程序即可,那么这个程序就是代理服务端了。

多个服务端那么我们就可以把对服务器压力比较大的东西单独放一个部分,比如做生电服可以单独开个基于fabric工业服,把所有生电机器放在这个服,然后用folia做生存服,供大家日常游玩,两服之间通过代理服连接,也可以做玩家背包互通之类的;同时多个服务端可以让一个服务器内出现不同的游玩内容,让服务器更加有趣

代理端有很多不同选择,当然如果你是开版本比较新的服务器,那么我就建议直接选择velocity即可了,velocity是pepermc团队对BungeeCord 和Waterfall的延续,性能更强,更安全,兼容性更高

当然我也非常建议使用docker开群组服,如果你想用screen和tumx开服也可以,我也不拦着你,没必要和我去争什么麻烦、什么损耗,各有各的优缺点,docker开群组我的建议就是一个端一个容器,docker本身的隔离会保护每个部分独立不被影响,即使有一个挂掉也无伤大雅,而且容器本身可以轻松复刻,可以很容易就做出一堆群组服,也方便管理

TIPS:接下来的教程基于“你已经学会docker的安装部署”等基础操作,还不会的赶紧去学

使用Ubuntu22.04,子服均为fabric端

首先我们需要一个velocity的镜像,我们可以自己去构建一个,当然也有现成的,我们可以直接使用,没错,就是之前我们讲过的itzg镜像,它除了常规的各种服务端的镜像以外,他还有一个代理端的镜像,名为itzg/mc-proxy,这个镜像中包含了bc、vc、wf三种代理端

我们可以先拉取这个镜像,以方便后续操作

docker pull itzg/mc-proxy

然后你需要新建一个文件夹,用来单独放这个代理端容器映射到本地的文件(按照视频来建一个名为三连的文件夹)

mkdir -p /home/sanlian

然后我们就可以开始写docker compose了,这里写一个作为参考

services:
  velocity:
    image: itzg/mc-proxy:latest
    container_name: sanlian
    restart: unless-stopped
    environment:
      TYPE: VELOCITY
      VELOCITY_VERSION: latest
    ports:
      - "25577:25577"
    volumes:
      - /home/sanlian:/server
    stdin_open: true
    tty: true

里面的诸多内容我就不过多赘述,不懂的可以去看前几篇文章,这里主要解析这两条:

  • environment:

    • TYPE: VELOCITY 解析:因为这个镜像不单单只是velocity的镜像,还有bc和wf也在里面,所以我们需要这一条告诉容器我们要拉取的代理端是velocity,如果你需要其他的你可以自己写

    • VELOCITY_VERSION: latest 解析:告诉容器你需要的vc的版本

docker compose写好之后,你就可以开始去跑这个容器了,跑完后你会在本地看见一堆被映射出来的文件,其中我们只要关注两个即可:velocity.tomlforwarding.secret

velocity.toml 是vc的配置文件,我们双击用记事本打开编辑,我们需要着重编辑的地方就那么几个

  • bind :是vc绑定的ip和端口,默认是本机的25577端口,可以改,改了后docker的端口映射也要改

  • online-mode :是vc的正版验证,建议关了,如果需要正版验证那么在子服配置正版验证

  • player-info-forwarding-mode :选择vc的转发模式,每种模式是什么怎么用配置文件里面都会写明白,可以找个翻译软件自己看看,因为我是用高版本fabric做子服为示范所以建议用modern模式

  • [servers] :这里是子服列表,你可以改掉所有东西,包括子服的名称,子服的ip和端口,务必仔细仔细检查,很多时候出错就在这个地方

  • try :这个为连接服务器时候尝试连接哪个子服,可以用这个设置主服,连接的先后顺序,断联后跳去哪个服务器

  • [forced-hosts] :这里是域名路由功能,理论上是不需要动的,一般用不上,但如果你在子服列表改了子服名称,那么建议这里也改一下,避免出现取值错误的情况

  • proxy-protocol :有些用frp的腐竹可能需要获得玩家的真实ip就需要这个功能,但具体怎么操作去看frp的文档

改完上面的,保存退出,vc的设置也就完成了,接下来就是子服的设置

子服依旧是MCDR套fabric,怎么开子服的去看前面几篇文章,这里不过多赘述,我们需要配置的是子服的“接收端”,fabric的子服需要安装一个模组FabricProxy-Lite如果是forge用Proxy Compatible Forge,paper端原生支持vc连接,直接在配置文件里面改就可以了

吐槽:这么一个重要的东西甚至是一个“民间大佬”制作的,papermc团队还真就把这个写进vc的文档了,真就“世界是个巨大的草台班子”

把模组装进子服后重启获得fabricproxy-lite的配置文件,配置文件里面的内容极其简单,但我们就只要改三个东西即可

  • secret :这是子服连接vc的密钥,vc知道子服的“地址”后,就需要这个密钥进行握手,这个密钥就在vc文件夹里面的forwarding.secret

  • disconnectMessage :配置完群组后,你只能通过vc连接子服,如果你绕开vc连接子服则会被拦截,显示这里填写的信息

  • hackEarlySend :如果你安装了LP权限组那么你需要打开这个选项,具体原因如图

这些都配置完成后,你就可以保存退出,然后开启所有容器了

尝试用“本机IP”+vc端口 连接群组服,正常来说,你可以连接到try 设置的子服,然后你可以用/server 命令,输入/server 后会在聊天框弹出一个子服列表,这里会显示你当前连接的服务器,这些服务器名称可以直接点击,然后就会跳转到对应服务器

当然我们也可以使用/server <子服名称> 来直接跳转到对应的服务器

到这里,这一整套docker开群组服的教程就已经教完了,这套方案的核心优势是 干净、可迁移、可扩展。想加新子服?在 docker-compose.yml 里加一个 service,velocity.toml 里加一行 [servers] 配置,docker compose up -d 搞定。教程从群组了解、代理端选定、配置,一一讲述完毕,希望这回帮到你不少忙,最后,祝你玩的开心@v@