Grasscutter是基于Java的某动画游戏的第三方服务端。
——by Grasscutters官方
得益于Java在各个平台的广泛兼容性,我们也可以在CentOS中搭建一个成型的服务器,但无论官方还是民间,基本上没有CentOS的相关教程,且CentOS在搭建过程中会比较复杂,这也就是我写下这份文档的初心。
系统:CentOS 8
其他环境:
JDK 17+;
Python 3.8+;
MongoDB;
Mitmproxy
首先检查系统内有无JDK
java -version
若无,正常安装
sudo yum -y install java-17-openjdk.x86_64
检查是否安装成功
java -version
CentOS默认装载Python3.6,版本过低,所以需要更新版本
sudo yum -y install python39.x86_64
检查是否安装成功
python3.9
exit()
接下来更新环境变量
cd /usr/bin
sudo ln -s /usr/bin/python3.9 /usr/bin/python
sudo ln -s /usr/bin/pip-3.9 /usr/bin/pip
检查是否修改成功
python
exit()
pip -V
MongoDB原生安装较为复杂且不便操作,这里使用docker进行安装
1.安装docker
curl -sSL https://get.daocloud.io/docker | sh
确认是否安装成功
docker -v
2.安装MongoDB
docker pull mongo:latest
3.启动MongoDB
sudo docker run -itd --name mongodb -v /home/mongodata:/data/db -p 27017:27017 mongo --auth
4.设置密码,建立安全措施
# 进入MongoDB命令行
docker exec -it mongodb mongo admin
# 创建一个名为 admin,密码为 123456 的用户。(真实搭建时请使用复杂的用户名和密码)
db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
# 尝试使用上面创建的用户信息进行连接。
db.auth('admin', '123456')
# 退出命令行
exit
1.安装
为安装方便,这里使用pip进行安装
pip install pipx
pipx ensurepath
pipx install mitmproxy
这之后需要重启一次终端。
2.保存证书
进入/home/用户名/.mitmproxy
(root用户则为/root/.mitmproxy
)目录,将里面的mitmproxy-ca-cert.p12
文件保存至本机,备用,后续连接grasscutter的每一台主机均需要安装该证书。
首先,cd一个比较适合保存文件的目录。
接下来,上传服务端zip(下文默认名称为grasscutter.zip
)到CentOS服务器,
之后,输入以下指令
sudo yum install git wget zip
unzip grasscutter.zip
cd grasscutter
首次启动并关闭游戏服务器,生成配置文件
sudo java -jar grasscutter.jar
stop
编辑配置文件
vi config.json
按insert键进入输入模式,上下左右键移动光标,完成以下两件事:
1.将配置文件中所有127.0.0.1
改成自己服务器的ip
2.将mongodb://localhost:27017
替换为mongodb://数据库用户名:密码@localhost:27017
按Esc,输入:wq
保存并退出(注意那个冒号)
编辑流量代理配置
vi proxy_config.bat
将REMOTE_HOST
后面的地址改为服务器ip,按键操作方法同上
启动游戏服务器
sudo java -jar grasscutter.jar
启动流量代理
mitmdump -s proxy.py --ssl-insecure --set block_global=false --listen-port 54321
开始play!
找一个合适的地方(这里用/home/1254qwer
举例)新建文件backup.sh
cd /home/1254qwer
vi backup.sh
# vi用法参考上文,这里不赘述
文件内容如下
#!/bin/sh
MONGODB_CONTAINER_NAME=mongodb
DUMP="sudo docker exec -it ${MONGODB_CONTAINER_NAME} "
OUT_DIR=/data/db/backup
TAR_DIR=/data/db/backup
DATE=`date +%Y%m%d%H%M`
# 数据库账号,自行修改,此处仅举例
DB_USER=admin
# 数据库密码,自行修改,此处仅举例
DB_PASS=123456
DB_NAME_ARR=("grasscutter")
for DBNAME in ${DB_NAME_ARR[@]}
do
$DUMP rm -rf $OUT_DIR/*
FILE_NAME="${DBNAME}_${DATE}"
TARGET_DIR="$OUT_DIR/$FILE_NAME"
$DUMP mkdir -p $TARGET_DIR
TARGZ_FILE="${FILE_NAME}.zip"
TARGET_FILE="$TAR_DIR/$TARGZ_FILE"
$DUMP mongodump -h 127.0.0.1:27017 --authenticationDatabase admin -u "$DB_USER" -p "$DB_PASS" -d $DBNAME -o $TARGET_DIR
flag=`echo $?`
if [ $flag == "0" ];then
echo "database $DBNAME success backup to $TARGET_DIR"
else
echo "database $DBNAME backup fail!"
fi
cd /home/mongodata/backup/zip
zip -r $FILE_NAME.zip /home/mongodata/backup/$FILE_NAME/$DBNAME
done
添加每日自动执行和自启动
chmod +x backup.sh
crontab -e
# 接下来在这里加入下面一行,操作和vi一致
30 1 * * * root /home/1254qwer/backup.sh #表示每天凌晨1点30执行备份
# 上文保存后继续执行以下命令
/sbin/service crond reload #重新载入配置
chkconfig --level 35 crond on #加入开机自动启动:
/sbin/service crond start #启动服务
crontab -l #列出crontab文件
接下来可以在/home/mongodata/backup/zip
中找到每日备份文件