0x00 前言
在前篇——《幻兽帕鲁私服建设第0话——原理篇》已经对幻兽帕鲁的私服搭建项目做了简单的原理性陈述。
现对github中的palworld-deployer仓库完成了最重要的创建功能,可以通过该仓库的脚本直接在服务器上创建完整的幻兽帕鲁私服服务。
本篇中将对该功能会进行完整的介绍。
0x01 操作
0x01.0x00 ssh连接
这个就不写了,应该都会,不会的话google搜关键词——ssh连接服务器
0x01.0x01 安装依赖包
在宿主机中需要三个依赖包,一个是git,用于下载仓库源码,另外两个是docker-ce以及jq,docker-ce提供容器环境,jq作用是在bash shell脚本中对json数据进行解析。
- rpm系列
centos安装docker-ce可参考《CentOS 下安装 Docker 极简教程》
yum install epel-release && yum install -y jq git
- deb系列
apt install -y jq docker.io git
- 其他系列
自己去查哈
0x01.0x02 下载仓库
git clone https://github.com/zeronezo01/palworld-deployer.git
0x01.0x03 执行部署
- 开放默认8211端口作为私服连接入口
cd palworld-deployer; bash deploy.sh create
- 开放自定义端口,如8323,作为私服连接入口
cd palworld-deployer; bash deploy.sh create -p 8323
0x01.0x04 开放端口
最后一步就是记得将私服端口进行开放,一般云系统中将公网IP直接映射到云服务器,则只需到安全组中将端口对应的udp协议进行开放,这个步骤不同的云厂都大同小异,找对应云厂的安全组配置说明就可以。
如果是自建服务器或者在云系统中使用了NAT功能,就需要做好外网IP确认以及端口映射等操作,就不具体说明了,还是那句话,google一下。
0x02 分析
整个仓库暂时实现还比较简单,整个流程可以理解为仅有
脚本先决判断处理->基于Dockfile创建镜像->脚本建立容器
三个步骤
0x02.0x00 目录结构
├── deploy.sh ├── docker │ ├── Dockerfile │ └── palworld-backup ├── LICENSE └── README.md
主执行脚本为deploy.sh,基于docker目录内的Dockerfile进行docker镜像的创建,palworld-backup为备份脚本
0x02.0x01 详细流程
整个创建的详细流程位于deploy.sh的create函数中,下面简单描述一下即可
- 初始判断执行脚本的子命令,由于后续还会增加update以及destroy命令,将子命令之后的参数传入create函数中
- 私服默认对外端口设置为8211,判断传参中是否包含端口参数,存在则将端口参数进行更改
- 由于创建完成后会启动唯一容器,因此判断是否存在运行中的幻兽帕鲁的私服容器,存在则删除
- 进入docker目录通过Dockerfile基于ubuntu基础镜像创建自定义镜像
- 镜像中需要进行依赖库安装,最终需要完成steamcmd工具的安装,其中最主要的是需要将license说明下选项默认置为I AGREE,在debconf-set-selections体现
- steam游戏私服无法通过root用户进行启动,因此在os中需要新建一个steam的用户
- 切换到steam用户,下载安装幻兽帕鲁私服相关依赖以及私服安装包,在下载安装后创建出幻兽帕鲁私服的配置文件路径,目的是为之后映射默认配置做准备
- 将备份目录暴露给宿主机
- 切换回root用户,用于配置cron定时服务,将palworld-backup脚本导入镜像,在容器启动之后每小时进行一次配置文件以及游戏存档的备份,备份文件可以直接看palworld-backup脚本
- 启动cron并切换至steam用户执行幻兽帕鲁私服脚本启动私服
- 通过自定义镜像建立临时容器,将私服默认配置文件拷贝至宿主机/etc/palworld目录下
- 停止删除临时容器,重新建立正式容器,主要是映射外部定义端口至容器内部8211端口的UDP协议,并且将宿主机配置文件映射至容器内部路径
0x02.0x02 补充
要在宿主机上查看拷贝备份数据,由于功能还未在脚本中实现,备份路径可以通过简单的docker命令进行查找
docker inspect palworld | jq '.[].Mounts'
找到对应Destination为/backup对应的路径,即对应项的Source标签
路径类似于
"Source": "/var/lib/docker/volumes/9b672b357cc5754e7eaae0891fd404490f79ae73d5c5fe52e098ece96fa90430/_data"
则通过路径/var/lib/docker/volumes/9b672b357cc5754e7eaae0891fd404490f79ae73d5c5fe52e098ece96fa90430/_data
即可找到备份文件,备份文件是按照日期分目录存放
0x03 结尾
创建脚本流程较为简单,但已经基本完成了该项目的大部分功能流程框架,之后的功能基本都是基于创建流程框架进行开发。
本文就到此结束,等候下一篇分享吧,Bye
文章评论