近期莱云推出了十二代i7的游戏容器服务,我需要将我的Minecraft服务器迁移过去,并且要保留原来使用的那个地址
为什么要保留原来的地址
首先,肯定会有很多玩家不看公告,等到连不上的时候在群里说服务器炸了。这种情况我一般喜欢怼回去,但这可能会导致玩家流失,所以最好的结局问题的办法就是让这个问题看起来不存在。
而莱云游戏容器的端口是随机分配的,不能简单地修改DNS记录并让端口号保持一致来简单地解决。
所以本文中将会保留原先使用的容器
转移文件
从老的容器里把所有文件打包,如果存储不够的话就把硬盘资源拉大一点。打包后通过SFTP把文件下载下来,感觉走SFTP比翼龙的HTTP单线程下载要快一点。
然后用SFTP把下载下来的文件上传到新的容器里,解压。把计划任务之类的都按照老的容器配置好,确保容器的配置和老的容器配置一样或者比它更高。
修改服务器配置文件,把端口改到新的端口上。
运行服务器,确保它能正常启动。
转发
这里使用FRP(Releases · fatedier/frp (github.com)),下载Linux amd64版,将frps的二进制文件和frps.ini上传到老的游戏容器上。
FRPS
修改frps.ini
1 2 3 4 5 6 7 8 9 10 | [common] bind_port = 端口 # frps 与 frpc 之间通信的端口 # 开放端口给客户端使用,不需要指定协议,填写老的容器的服务器连接端口 allow_ports = 端口 # 设置连接服务器的授权码,客户端需要用 token = 连接密钥(可选) |
由于需要一个端口用于frp的通信和一个端口用来给MC客户端连接(建议填写原来的那个端口号)
如果懒得设置密钥的话可以把连接密钥的这一样用#符号注释掉,不过这可能会有些危险
FRPC
将frpc和frpc.ini上传到新的容器里,修改frpc.ini
基岩版请保留UDP类型部分,java版请保留TCP类型部分,common部分按照运行frps的服务器的信息填写
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 | [common] server_addr = frps所在的服务器的地址 # frps 的公网 IP 地址 server_port = frps的通信端口 # frps 的 bind_port # 验证客户端的身份 token = 你的密钥(可选) # TCP 类型代理 [tcp_proxy] type = tcp local_ip = 127.0.0.1 local_port = 服务器在本地的端口 remote_port = frps那端供玩家客户端连接的端口 proxy_protocol_version=v2 # UDP 类型代理 [udp_proxy] type = udp local_ip = 127.0.0.1 local_port = 服务器在本地的端口 remote_port = frps那端供玩家客户端连接的端口 proxy_protocol_version=v2 |
上述配置文件中的proxy_protocol_version=v2不要删除,它很重要,在下一段中会具体说明
JE获取玩家真实IP
你需要在MC服务端中添加这样一个插件:andylizi/haproxy-detector
frpc的配置文件中包含proxy_protocol_version=v2,这个服务端插件会从中获取玩家的真实IP
修改启动脚本
FRPS端
这一端只需要运行frps并载入我们设定的配置文件,模板类型选择自定义JAR,然后将run.sh改为以下内容
1 | ./frps -c frps.ini |
执行此命令前,你可能需要把frps的权限修改,我通常将它修改为755

FRPC端
这一端我们要运行frpc和Minecraft服务端,我们需要在运行服务端之前添加以下命令
1 | nohup ./frpc -c ./frpc.ini > frpc.log & |
这样将会把frpc放在后台执行,frpc在控制台中输出的日志会被写在frpc.log中。
执行前请先确保frpc的文件权限已经被进行调整,确保frpc能够被运行
存在的一些问题
先启动运行frps的容器,再启动minecraft服务端的容器,不出意外的话应该可以正常使用了。
通过FRP节点走Geyser进入服务器的基岩版玩家可能无法获取玩家真实IP,服务端获取到的玩家IP是127.0.0.1,这个问题我也不知道有没有现成的解决办法。
发表回复