Debian搭建游戏服务器

发布于 2022-05-21  37 次阅读


感谢:

https://www.eula.club/%E4%BD%BF%E7%94%A8Grasscutter%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%90%AD%E5%BB%BA%E5%8E%9F%E7%A5%9E%E7%A7%81%E6%9C%8D.html

创建 Docker network, DB, JDK17 容器

使用 docker network 对 Docker 容器进行统一管理,MongoDB 数据库不对外提供端口,各容器之间通过 hostname 进行内部通信,保护系统安全。

此处创建容器时映射的 22102 和 444 端口,是为了后续搭建游戏服务器。
22102 (UDP)是游戏服务器(GameServer)端口,用来处理一些传送、伤害数值计算等信息,如果是在服务器部署的话记得在安全组放开这个端口的 UDP 协议,防止出现 4206 错误无法进入游戏。
444 (TCP)是用来处理登录、游戏更新的端口(DispatchServer),默认是443 ,本文使用 444。

docker network create genshin
docker network ls                                 # 查看已创建的网络
# 在物理机创建目录
mkdir -p /mydocker/mongodb/data        
# 创建mongodb容器;网络为genshin;-v 宿主机路径:容器路径;-h hostname;指定镜像mongo
docker run -itd --name mongodb --network genshin -v /mydocker/mongodb/data:/data/db -h genshin_mongo mongo
# 重启Docker时,自动启动容器
docker update mongodb --restart=always  
docker run -itd --name grasscutter --network genshin -p 22102:22102/udp -p 444:444/tcp -h genshin_grasscutter python
iptables -I INPUT -p udp --dport 22102 -j ACCEPT  # 放行22102端口的udp协议
iptables -I INPUT -p tcp --dport 444 -j ACCEPT    # 放行444端口的tcp协议
docker update grasscutter --restart=always        # 设置开机自启
docker exec -it grasscutter /bin/bash             # 进入容器内部
cat /etc/issue                                    # 查看系统版本
apt-get update                                    # 更新apt-get
apt-get install wget -y                           # 安装wget
apt-get install curl -y                           # 安装curl
apt install nano                                  # 安装nano
apt install openjdk-17-jdk -y                     # 安装jdk17
apt install openjdk-17-jre -y                     # 安装jre17
java -version                                     # 查看版本
javac -version                                    # 查看版本
exit

装载服务端

#下载Grasscutter仓库文件到例如/root目录
git clone https://github.com/Grasscutters/Grasscutter.git

#下载resources资源文件到例如/root目录
git clone https://github.com/Koko-boya/Grasscutter_Resources.git

#下载grasscutterZH-stable-1.1.0.jar文件并上传到例如/root目录
https://t.me/genkitCN/60

#整合到/root/Grasscutter文件夹
mv /root/grasscutterZH-stable-1.1.0.jar /root/Grasscutter/grasscutterZH-stable-1.1.0.jar
mv /root/Grasscutter_Resources/Resources/ /root/Grasscutter/resources/
mv /root/Grasscutter/proto/ /root/Grasscutter/resources/proto/
rm -rf /root/Grasscutter_Resources

#复制/root/Grasscutter到Docker容器
docker cp /root/Grasscutter grasscutter:/   

运行服务端

第一次运行,报错并生成配置文件config.json

docker exec -it grasscutter /bin/bash
cd /Grasscutter && java -jar grasscutterZH-stable-1.1.0.jar
ctrl+c

编辑config.json,需要修改的内容如下:

nano config.json

"DatabaseUrl": "mongodb://genshin_mongo",
"PublicIp": "IP地址",
"DispatchServerDatabaseUrl": "mongodb://genshin_mongo",
"PublicIp": "IP地址",
"Port": 444,
#实测需要修改下一行的端口为443

ctrl+x

再次运行,并根据提示选择语言

java -jar grasscutterZH-stable-1.1.0.jar

测试新建账号

account create admin

打开https://ip:444,会显示Welcome to Grasscutter则成功

配置客户端

Windows

下载Fiddler并安装,官网:https://www.telerik.com/fiddler/fiddler-classic

Step1:选择Tools-Options,在HTTPS里面选择Decrypt HTTPS traffic

Step2:选择Connections,然后选择一个端口,避开8888端口,可以用8181端口,点击OK

Step3:选择FiddlerScript,替换为下面的代码,然后点击Save Script保存脚本使其生效

/* Original script by NicknameGG, modified for Grasscutter by contributors. */
import System;
import System.Windows.Forms;
import Fiddler;
import System.Text.RegularExpressions;
 
class Handlers
{
    static function OnBeforeRequest(oS: Session) {
        if(oS.host.EndsWith(".yuanshen.com") || oS.host.EndsWith(".hoyoverse.com") || oS.host.EndsWith(".mihoyo.com")) {
            oS.host = "ip:444"; // This can also be replaced with another IP address.(输入域名也可)
        }
        if(oS.uriContains("http://uspider.yuanshen.com:8888/log")){
            oS.oRequest.FailSession(200, "Blocked", "haha");
        }
    }
};

之后就可以打开Genshin Impact Game启动游戏了,期间会弹出一个信任证书的选项,选择Yes即可


Love is merely a madness.