CentOS 搭建 YGOPro 服务端 SRVPro
安装 Node.JS,Mono,gcc 等依赖环境
任务时间:20min ~ 30min
SRVPro 采用 CoffeeScript 编写,其 YGOPro 主程序部分与原版 YGOPro 基本相同,采用 C++ 编写。其 AI 部分 WindBot 采用 C# 编写,在 CentOS 环境下需要使用 Mono 来编译与运行。这一部分将带领大家安装这些依赖环境。
配置 Mono 的 yum 源
运行下面的命令:
sudo -E yum install epel-release yum-utils -y
sudo -E rpm --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"
curl https://download.mono-project.com/repo/centos7-stable.repo | sudo -E tee /etc/yum.repos.d/mono-centos7-stable.repo
配置 Node.JS 的 yum 源
运行下面的命令:
curl --silent --location https://rpm.nodesource.com/setup_10.x | sudo -E bash -
安装 Mono、Node.JS、Git 等 yum 包
SRVPro 与 YGOPro 的源代码托管在 GitHub ,所以安装的同时建议将 Git 一并安装好,以便于日后 YGOPro 与 SRVPro 的更新。 运行下面的命令来安装这些 yum 包:
sudo -E yum install -y nodejs git gcc gcc-c++ sqlite-devel readline-devel openssl-devel wget mono-complete
安装PM2
SRVPro 作为 Node.JS 应用,采用 pm2 作为进程管理工具。 pm2 可以使用 Node.JS 包管理工具 npm 进行安装。运行下面的命令安装 pm2 :
sudo -E npm install pm2 -g
安装 YGOPro 以及 SRVPro 的其他依赖
任务时间:30min ~ 45min
安装 Redis 数据库
SRVPro 的云录像功能采用 Redis 数据库来工作,我们需要安装 Redis 来保证 SRVPro 云录像功能正常工作。使用以下命令编译安装 Redis :
wget http://download.redis.io/releases/redis-stable.tar.gz --no-check-certificate
tar xzfv redis-stable.tar.gz
cd redis-stable
make
sudo -E make install
sudo -E cp -rf src/redis-server /usr/bin/
cd ..
然后使用以下命令用 pm2 启动Redis 数据库:
pm2 start redis-server
安装 Lua 5.3.5
YGOPro的卡片效果采用 Lua 语言编写, Lua 自然也是 YGOPro 的依赖的一部分。目前 YGOPro 采用的 Lua 版本为 Lua 5.3.5 。使用以下命令安装 Lua 5.3.5 :
wget 'http://www.lua.org/ftp/lua-5.3.5.tar.gz' --no-check-certificate
tar zxf lua-5.3.5.tar.gz
cd lua-5.3.5
sudo -E make linux test install
cd ..
安装 premake5
YGOPro的项目工程文件采用 premake5 生成。我们需要安装 premake5 才能完成 YGOPro 的编译操作。 YGOPro 采用的 premake5 版本是 5.0.0-alpha12
。使用以下命令安装premake5:
wget -O - https://github.com/premake/premake-core/releases/download/v5.0.0-alpha12/premake-5.0.0-alpha12-linux.tar.gz | tar zfx -
sudo -E cp -rf premake5 /usr/bin/
除了直接使用预编译的包以外,也可以从源码编译安装。这里不再详细叙述。
安装 libevent
YGOPro 的网络模块采用 libevent。libevent 虽然也可以用过 yum 安装,但是由于版本和稳定性问题还是建议使用源码编译安装。使用以下命令编译安装 libevent 2.0.22 :
wget 'https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz' -O libevent-2.0.22-stable.tar.gz --no-check-certificate
tar xf libevent-2.0.22-stable.tar.gz
cd libevent-2.0.22-stable/
./configure
make
sudo -E make install
cd ..
然后创建 libevent 的符号链接。这4条命令根据系统不同只需要运行其中2条即可,不过建议全部运行以防万一。
sudo -E ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5
sudo -E ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5
sudo -E ln -s /usr/local/lib/libevent_pthreads-2.0.so.5 /usr/lib/libevent_pthreads-2.0.so.5
sudo -E ln -s /usr/local/lib/libevent_pthreads-2.0.so.5 /usr/lib64/libevent_pthreads-2.0.so.5
至此, YGOPro 和 SRVPro 的依赖环境的配置已完成。
安装 YGOPro 和 SRVPro 部分
任务时间:30min ~ 45min
经过上面的环境搭建, SRVPro 已经可以准备安装。我们开始吧。
安装 SRVPro
SRVPro 的源代码托管在 GitHub 。 使用以下命令从 GitHub 克隆 SRVPro 的代码仓库,并安装 npm 的依赖包。
git clone https://github.com/moecube/srvpro ygopro-server
cd ygopro-server
npm install
注意 npm install
运行的时候有一个 sqlite3
库,由于二进制文件国内无法下载,只能从源码编译安装。安装的时候大家忽略产生的 warning 信息即可。 若不希望等待太长时间,可以打开 package.json 文件,将以下条目删除即可。
"sqlite3": "latest",
安装 YGOPro 服务端
每次 SRVPro 创建房间的时候, SRVPro 都会启动一个 YGOPro 的子进程来处理整个对战流程。按照以下步骤安装适用于服务端的 YGOPro 修改版。
- YGOPro 源码的获取
YGOPro 的源码托管在 GitHub ,其地址为https://github.com/moecube/ygopro 。不过考虑到国内访问 GitHub 的速度,以及拥有众多分支和提交历史 YGOPro 的下载量,本次教程我们采用码云的 YGOPro 的镜像来进行服务端的安装。不过为了保证用到最新的 YGOPro 版本,建议大家在实际操作中,还是采用上述 GitHub 地址来进行安装。 在 ygopro-server
目录下运行以下命令从码云获取 YGOPro 的源码:
git clone https://gitee.com/purerosefallen/ygopro --branch=server --recursive
YGOPro 的 Git 仓库有2个子模块, ocgcore
和 script
。 ocgcore
负责游戏王对战逻辑的处理,而 script
则存放 YGOPro 的所有正式发售的卡片的脚本文件。
- 进入
ygopro
目录,并更新 YGOPro 的子模块到最新版本。
cd ygopro
git submodule foreach git checkout master
- 生成 YGOPro 的 Makefile 文件。
产生的 os.ishost
的警告可以忽略。
premake5 gmake
- 进行 YGOPro 的编译操作。
编译产生的 warning
信息也可以忽略。
cd build/
make config=release
cd ..
- 创建 YGOPro 的符号链接,便于 SRVPro 进行调用。同时用
strip
命令对编译的文件进行处理。
ln -s bin/release/ygopro ./
strip ygopro
- 至此, YGOPro 的编译操作已经完成。返回上一级目录
ygopro-server
,来继续接下来的操作。
cd ..
安装 WindBot
WindBot 是IceYGO的一个 YGOPro 的衍生项目,为 YGOPro 和 SRVPro 提供 AI 对战的功能。在 ygopro-server
目录下使用以下命令安装 WindBot 。
git clone https://github.com/moecube/windbot
cd windbot
xbuild /property:Configuration=Release /property:TargetFrameworkVersion="v4.5"
然后创建 WindBot.exe
的符号链接,并将 YGOPro 的卡片数据库文件链接过来。
ln -s bin/Release/WindBot.exe .
ln -s ../ygopro/cards.cdb .
cd ..
至此, YGOPro 和 SRVPro 的安装已经完成,马上可以投入使用。下一个任务将带领大家完成 SRVPro 的配置。
SRVPro 的配置工作
任务时间:10min ~ 20min
通过以上的任务, YGOPro 和 SRVPro 已经安装完成。但是在正式开服之前,还是需要做一些服务器的配置,来保证服务器正常运行。
复制配置文件
./data/default_config.json
为 SRVPro 的默认配置文件,我们需要复制这个文件来进行配置。 在 ygopro-server
目录下执行以下命令。
mkdir config
cp -rf ./data/default_config.json ./config/config.json
编辑配置文件
我们需要对上一步骤复制的配置文件进行编辑。
在这里可以编辑的内容很多,如 settings.port
为服务器端口, settings.modules.welcome
为服务器欢迎提示语等,具体不再一一叙述。
但是我们需要编辑的内容是 settings.modules.cloud_replay
,把其中 enabled
字段设置为 true
来开启云录像功能。
同时把 settings.modules.random_duel.enabled
设置为 true
来打开随机对战功能。
把 settings.modules.windbot.enabled
设置为 true
来打开AI对战功能。同时把 settings.modules.windbot.spawn
设置为 true
来让 SRVPro 启动时自动启动 WindBot 。
开启服务器
配置文件配置好了之后,就可以开启服务器了。使用以下命令来开启服务器。
pm2 start ygopro-server.js
开启之后,在YGOPro客户端内使用 IP <您的 CVM IP 地址>
,刚刚在 config.json
设置的服务器端口(默认为 7911
),输入相同的密码(例如 M#123
)即可连接到服务器,和你的朋友进行对战。具体操作方法和 YGOPro 233服 相同。
另外,还可以使用以下命令设置 SRVPro 开机启动。
pm2 save
sudo -E pm2 startup
另外,为了保证服务器稳定性,建议编辑 crontab
,即使用命令 crontab -e
加入以下条目,设置每天凌晨4点让SRVPro重新启动。
0 4 * * * pm2 restart all
结语
SRVPro 已经搭建完毕,在 YGOPro 233服 比较卡的时候,你可以和你的朋友在这台你自己的服务器上面进行对战了。
如果你有 DIY 卡片希望加入服务器,可以把DIY卡片数据放入 ygopro-server/ygopro/expansions
目录来在服务器上使用。但是切忌覆盖入 ygopro-server/ygopro/script
目录和写入 ygopro-server/ygopro/cards.cdb
文件,否则在 YGOPro 版本更新时引起合并冲突。
另外, SRVPro 需要的内存并不多,4G的内存够200个人左右同时进行游戏,1G的内存也够50个人了,看个人需求。 CPU 需要的也不多,1核 CPU 下100人同时在线也只占用了 6% 左右。但是为了稳定还是建议使用双核 CPU 。如果有空余的资金,建议优先升级服务器带宽。
但是, SRVPro 搭建容易,维护难。上面的教程还是比较基础的,但是涉及到 YGOPro 版本更新,需要把 YGOPro 和 SRVPro 的 Git 版本库全部 git pull
到最新版本。并重新编译 YGOPro,最后重启服务器 。这里不再叙述步骤。
感谢完成本次 SRVPro 的搭建教程,祝愿你们运营的服务器越来越好!