前一段时间我在Windows上简易的部署了grasscutter,现在,我想要在Docker的Debian镜像上试一试,虽然Docker Hub上已经有现成的镜像了,但基本上是基于CentOS(Java)镜像的构建,对于习惯使用Ubuntu/Debian系统的我来说很不习惯,并且网上Docker Debian系统的教程较CentOS系统来讲少的可怜,于是我便要自己动手在Docker Debian搭建一个原神私服服务端。在Docker上搭建的一个好处是可以开箱即用,对于经常换服务器(跑路)的我来说很适合,本文将以支持原神3.0版本的grasscutter进行演示

首先,安装Docker环境

curl -fsSL https://get.docker.com  bash -s docker

国内可以更换Docker镜像,步骤我就不分开写了

vim /etc/docker/daemon.json

{
"registry-mirrors":[
"http://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"http://registry.docker-cn.com"
] ,
"insecure-registries":[
"docker.mirrors.ustc.edu.cn",
"registry.docker-cn.com"
]
}

:wq

systemctl restart docker

然后pull一下拉取Debian镜像

docker pull debian

run一下,命令的参数细节不多赘述

docker run -itd --privileged=true --name=grasscutter --net=host --restart=always -v /root/grasscutter:/var/grasscutter xiwangly/grasscutter /bin/bash

进一下容器内部

docker exec -it grasscutter /bin/bash

国内可以换一下镜像,然后更新一下源(Docker Debian首次apt install前需要更新一次源)

sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
apt-get update

先把这些安装了,如果怕出问题就一个个来,自己手动确认更放心,如果还提示缺啥,就再apt install一下这个包(这些包可以根据自己的需要安装)

apt install wget
apt install curl
apt install git
apt install vim
apt install systemd
apt install systemctl
apt install init
apt install gnupg
apt install screen

之后,安装Java SE Development Kits - 17,不赘述

安装MongoDB,教程见https://mongodb.net.cn/manual/tutorial/install-mongodb-on-debian/

我准备在这个目录搞grasscutter,cd到这里

cd /var/grasscutter

按照grasscutter的说明https://github.com/Grasscutters/Grasscutter/blob/development/README_zh-CN.md编译grasscutter

git clone https://github.com/Grasscutters/Grasscutter.git
cd Grasscutter
chmod +x gradlew
./gradlew jar # 编译

然后,运行生成的grasscutter-****.jar(最好重命名一下这个文件为grasscutter.jar)

java -jar grasscutter.jar

报错,提示缺少资源文件,去https://github.com/Koko-boya/Grasscutter_Resources下载资源文件,并复制到resources文件夹下,如图

再次运行

java -jar grasscutter.jar

如果端口有冲突,可以修改主目录下的config.json文件

我修改了端口为444,偷懒没有加java的环境变量,所以带上目录运行java

cd /var/grasscutter/Grasscutter
/var/grasscutter/java/jdk-17.0.4.1/bin/java -jar grasscutter.jar

然后创建一个账号,后面游戏里的登录密码可以随便填就能登录

#示例:account create 登录账号 UID
account create root 1000

搞定了,然后可以丢在screen里写个自动化脚本运行,我就不演示了(我懒)

接下来是客户端的连接,客户端也要有一份grasscutter,Windows可以安装mitmproxy,并安装python3环境使用proxy.py代理流量

在安装了python3环境的前提下,执行

pip3 install mitmproxy

修改proxy_config.py,然后执行

mitmdump -s proxy.py -k

也可以写一个脚本,保存为cmd文件,方便以后运行

@echo off
mitmdump -s proxy.py -k
pause

示例:我的服务端的地址是192.168.31.34,端口是444,使用默认的监听端口8080

以Windows 11为例,在Windows“设置”程序里找到“网络和Internet > 代理”,在“手动设置代理”中编辑设置,代理IP地址填本机的地址(如果在路由器或服务器代理了原神的流量,就填路由器或服务器的IP地址),端口填上面mitmproxy监听的端口

http://mitm.it/下载并安装证书

然后,使用原神的国际服版本进行游戏,不出意外你可以使用刚才创建的账号和随便的一个密码直接登录

不是国际服的可以借助原神的换服工具更换服务器,推荐https://github.com/DGP-Studio/Snap.Genshin的国际服客户端转换插件,文档在https://www.snapgenshin.com/documents/extensions/Genshin-Launcher-Plus-SE-Plugin.html

现在,愉快的进行游戏吧!

推荐一款grasscutter的工具(类似于修改器):https://github.com/jie65535/GrasscutterCommandGenerator

远程执行插件:https://github.com/jie65535/gc-opencommand-plugin

可供参考的其它文章:

https://www.rainkavik.com/archives/283/

https://www.rainkavik.com/archives/254/