0x00 前言
到写这篇博客之前,幻兽帕鲁的统计貌似已经在steam上卖掉了超过1200w份拷贝了,这玩意儿的流量好像也已经被蹭秃鲁皮了,继续蹭下去估计得给它蹭出血。但幻兽帕鲁的私服机制是真的非常适合给新手个人做服务器环境搭建练手用了,我也顺手在github上创建了项目仓库做简化幻兽帕鲁的私服搭建的脚本,这个系列的文章就是基于该脚本仓库推进的。
还有一个非常非常现实的目的,就是我公司这边因为有云游戏的业务,有一部分资源可以放出来用作类似幻兽帕鲁这种的私服搭建。当然,不是以完整云服务的模式,毕竟我们的云游戏业务没有那么大量的IP资源,就刚好适合这种只需要进行少量固定端口映射的业务,如果真的有需要的兄弟姐妹可以联系我,价格必然远低于国内那些云厂的资源。
之前幻兽帕鲁刚发布的时候,各个云厂不管大的小的都疯狂的针对自家产品发布相关搭建的图文教程,我也是能在google上真实的感受到现今国内云厂的不容易,真的是在一天前还搜得到官网以及个人博主的文章,一天后就再也见不到了。然后就开始了各种云厂推出三个月高配骨折价,我也是真的相信今年阿里云肯定是阿里集团里裁员最狠的业务线了。
其实我自己也是从幻兽帕鲁刚上线就在steam上买了这个游戏并且试完了一下,虽然这个游戏充满了盗版任天堂的味道,但是扛不住它真的香啊,这就是在我脑海里宝可梦真实应该有的样子,也是最符合宝可梦游戏的玩法,除了人物的初始模型是确实丑了点。
然后。。。发现这游戏还能自搭私服玩PvE模式,我靠,那不是更香了,毕竟咱们都是有最高配置——朋友的人不是,必须搞之!
PS:文章内介绍幻兽帕鲁的私服搭建都是基于Linux服务器发行版进行搭建,这里不关注其他平台上的搭建模式哈。
0x01 服务结构
幻兽帕鲁的私服搭建是利用steamcmd命令,在steam平台上下载相应的应用包,应用包一般位于steam目录的 steamapps/common/PalServer 路径下,在还未启动私服服务程序,目录结构如下:
|-- Engine | |-- Binaries | | |-- Linux | | `-- ThirdParty | |-- Content | | `-- SlateDebug | |-- Extras | | `-- GPUDumpViewer | `-- Programs | `-- CrashReportClient |-- Pal | |-- Binaries | | `-- Linux | |-- Content | | `-- Paks | |-- Plugins | | `-- Wwise | `-- Saved `-- linux64
因为服务还未启动,因此目录中都是初始化所需的必要文件,并不包括在私服运行后动态产生的文件。
其中最主要的目录位于Pal/Saved,由于该目录保存了包括私服配置文件以及存档等数据。
当幻兽帕鲁私服服务启动之后,目录结果将产生部分变化,最主要的变化也是存在于Pal/Saved,其目录结构如下:
|-- Engine | |-- Binaries | | |-- Linux | | `-- ThirdParty | |-- Content | | `-- SlateDebug | |-- Extras | | `-- GPUDumpViewer | |-- Programs | | `-- CrashReportClient | `-- Saved | `-- Config |-- Pal | |-- Binaries | | `-- Linux | |-- Content | | `-- Paks | |-- Intermediate | | `-- DatasmithContentTemp | |-- Plugins | | `-- Wwise | `-- Saved | |-- Config | |-- ImGui | `-- SaveGames `-- linux64
增加了Pal/Saved/SaveGames目录存储了该私服的游戏存档,包括了所有连入该私服的用户的游戏存档文件。
增加了Pal/Saved/Config目录存储了该私服的配置文件,一般需要进行动态配置的文件路径为Pal/Saved/Config/LinuxServer/PalWorldSettings.ini,该文件可对私服房间中的各项属性进行配置。
0x 02 功能模块
幻兽帕鲁私服的结构很简单,其特点就是
- 只能在一个服务器上启动一个同步数据以及运行游戏的服务
- 不太需要做复杂的数据存储,因此不需要单独配置大型数据库
- 只能进行单机部署,因此单台服务器本身的性能就比较重要了
综上所述能快速进行幻兽帕鲁私服部署,并且可简易进行迁移,就非docker莫属了。
利用docker之类的容器技术加上一些脚本开发,即可独立于宿主机服务器环境,即可快速并且轻量化的进行部署以及迁移。
通过在服务器上进行部署实验之后,归纳出若要进行部署脚本项目开发需要包含以下几块功能模块。
0x02.0x00 新建模块
新建模块顾名思义是对服务以及数据进行完全的重建,该功能脱离于宿主机存在的与游戏私服相关的服务与数据,是完全基于现有的基础宿主OS、依赖工具以及服务等环境进行构建。
在新建模块中同时需要关注到以下功能块:
- 在运行游戏私服的过程中需要对存档以及配置文件进行备份
- 备份文件可导出导入
- 游戏私服的服务端口可配置
- 游戏私服游戏设置可快速修改并生效配置
0x02.0x01 更新模块
幻兽帕鲁现在依然处于EA阶段,因此游戏数据包会经常性更新,则更新模块是对游戏私服新建后数据内容进行更新替换。
在更新模块种需要关注到的功能块如下:
- 对私服数据包可进行增量或者完整更新
- 需要保留更新前的私服游戏配置以及游戏存档
- 对更新后的环境可定义版本式留存
0x02.0x02 销毁模块
销毁模块目的是对私服环境进行清理还原,环境的还原是比较容易处理的工作,只需要注意对存档以及配置数据文件进行导出即可。
0x02.0x03 导入导出模块
对于游戏私服的存档以及配置的数据文件,需要可快速进行导出以及导入,这样才可快速进行游戏私服的迁移。
游戏存档的路径为:Pal/Saved/SaveGames
私服配置文件的路径为:Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
在私服启动初始化前将幻兽帕鲁私服的默认配置导入到设置生效路径下,即可作为默认设置,之后也可便于对设置项进行修改。
对配置文件进行导出导入操作就很简单了。
导出就是直接备份私服配置文件,而导入就是将预导入的配置文件覆盖至私服配置文件路径,然后将游戏私服服务重启即可生效。
对于游戏存档的导出也较为简单,只需将整个存档目录进行备份即可。
需要处理的地方是游戏存档的导入,在每个幻兽帕鲁私服环境中,均会重新生成新的存档ID路径,这个ID体现在SaveGames目录下,并且因为没有该ID算法,所以无法进行预知。
而私服中的用户存档是通过steam的用户id进行标识,因此不会产生变化,要导入用户的存档只需覆盖用户id对应的存档文件即可。
而对整个游戏存档的导入操作也一样很简单,只需要将导出的游戏存档文件夹内的相应文件覆盖进正在运行的私服环境的存档路径(含存档ID路径),并且将游戏私服进行重启即可完成导入工作。
0x03 架构
基于上述功能表述可以看出,docker类的容器技术基本完全匹配幻兽帕鲁的私服部署。
容器技术是基于镜像增量以及Linux的用户空间隔离技术让一个服务可以有完整的独立运行空间,底层共享Linux的内核,因此容器技术有基本等同于宿主机的性能。
同时docker又可快速进行网络端口映射,容器的存储既可相互独立也可进行共享,镜像可标定版本并存储,这些能力已经完整的匹配幻兽帕鲁的部署需求。
下图标明幻兽帕鲁私服部署与Docker容器的关系:
0x04 最后
本篇文章只对幻兽帕鲁私服部署项目进行简单的原理性说明,并且该项目现在只开发完成了创建相关的功能,之后的相关文章将对该项目继续进行详细的说明分析。
当然,大家不要忘了,可以找我租机器跟朋友玩幻兽帕鲁嘿
文章评论