欢迎光临散文网 会员登陆 & 注册

squad战术小队游戏服务器部署+简易面板部署

2023-04-04 11:14 作者:泰迪欧_Teddyou  | 我要投稿

部署环境 Centos7


部署参考文档:https://squad.fandom.com/wiki/Server_Installation/zh#Linux


安装steamcmd工具:

curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -bash steamcmd.sh


系统环境配置:

yum -y install screen glibc libstdc++ glibc.i686 libstdc++.i686


这里使用脚本的形式安装,创建文件夹并编辑以下脚本:

[steam@cd3 ~]$ mkdir squad_server

[steam@cd3 ~]$ cat squad_up.sh

#!/bin/bash

./steamcmd.sh +login anonymous +force_install_dir squad_server +app_update 403240 validate +quit


运行脚本,等待安装完成:

bash ./squad_up.sh


编辑启动脚本:

#!/bin/bash

/home/steam/squad_server/SquadGameServer.sh Port=6301 QueryPort=26301 FIXEDMAXPLAYERS=100 RANDOM=NONE


启动脚本即可运行服务器。



拓展内容:


配置文件描述:

Admins.cfg                     # 权限组[管理员]

Bans.cfg                       # 封禁玩家列表

License.cfg                    # 许可证

MapRotation.cfg                # 地图循环列表

MOTD.cfg                       # 服务器介绍[每日消息]

Rcon.cfg                       # 远程管理配置

RemoteAdminListHosts.cfg       # 远程权限组[管理员]列表

RemoteBanListHosts.cfg         # 远程封禁玩家列表

Server.cfg                     # 服务器配置

ServerMessages.cfg             # 服务器循环[红字]公告


远程管理[Rcon]

文件名:Rcon.cfg

如果您不想使用 远程管理[Rcon],请将密码 [Password=] 设置为空。 注意: 如果IP为 0.0.0.0,将自动绑定到默认的公网IP。


这里推荐一个远程管理工具:https://github.com/Tiiffi/mcrcon

安装方法:

git clone  https://github.com/Tiiffi/mcrcon

cd mcrcon

make && make install


使用方法:

Option:  -H            Server address (default: localhost)   

-P            Port (default: 25575)  

-p            Rcon password  

-t            Terminal mode  

-s            Silent mode  

-c            Disable colors  

-r            Output raw packets  

-w            Wait for specified duration (seconds) between each command (1 - 600s)  

-h            Print usage  

-v            Version information

针对squad的非交互式的使用方法:

mcrcon -H 127.0.0.1 -P 21114 -p passwd -w 1 "AdminBroadcast 消息发送" ok

通过对脚本的编写,可实现一定自动化能力


参考命令(在本地运行):

[root@cd3 mcrcon-master]# mcrcon -P 21114 -p passwd


配置文件参考文档:https://squad.fandom.com/wiki/Server_Configuration/zh


崩溃自动拉起脚本:

#!/bin/bash

source /home/steam/.bash_profile 

SD=`tail -10 /home/steam/squad_server/nohup.out|grep Shutdown|wc -l` 

if [ $SD -eq 1 ]; 

then  

kill `ps -ef|grep SquadGameServer |grep -v grep |awk '{print $2}'` 

fi    

sleep 5 

SQ=`ps -ef | grep SquadGameServer | grep -v grep | grep steam | wc -l` 

if [ $SQ -ne 2 ]; 

then      

kill `ps -ef|grep SquadGameServer |grep -v grep |awk '{print $2}'`      

cd /home/steam/squad_server      

nohup bash ./start.sh > /home/steam/squad_server/nohup.out &    

fi


如果有其他会影响刷新日志的脚本,需要将其他脚本sleep数秒,此脚本在crontab中需要最高优先级,并且每分钟监控执行。


模组添加方法

参考如下,修改游戏更新脚本:

#!/bin/bash

./steamcmd.sh +login anonymous +force_install_dir ./squad_server +app_update 403240 validate +quit 

./steamcmd.sh +login anonymous +force_install_dir ./squad_server +workshop_download_item 393380 2934263749 +quit 

./steamcmd.sh +login anonymous +force_install_dir ./squad_server +workshop_download_item 393380 2891780963 +quit 

./steamcmd.sh +login anonymous +force_install_dir ./squad_server +workshop_download_item 393380 2421120620 +quit

cp -rp /home/steam/squad_server/steamapps/workshop/content/393380/* /home/steam/squad_server/SquadGame/Plugins/Mods/

运行后重新启动服务端即可。


认证服申请:http://master.joinsquad.com/dedicatedserverlicense


训练场不可用的解决方法

修改配置文件ExcludedLayers.cfg和ExcludedLevels.cfg


其中ExcludedLayers.cfg是用于禁止的地图精准匹配,ExcludedLevels.cfg则为模糊匹配,使用//注释即可。


地图循环失败的解决方法

检查SquadGame/ServerConfig/Server.cfg

配置项为以下参数

MapRotationMode=LayerList

循环地图会使用文件 SquadGame/ServerConfig/LayerRotation.cfg


简易控制面板部署

简易控制面板这里是通过CGI和RCON来实现的前后端交互能力

前台示例的html代码如下:


<div style="color:#4682B4;text-align:center;">

            <a name="top" id="top_anchor">

            <h1>TDU-简易控制面板</h1>

        </a></div>

<a name="top" id="top_anchor">

        </a>

<div style="color:#696969"><a name="top" id="top_anchor">

            <p>

                立即切换地图

                </p></a><ul><a name="top" id="top_anchor">

                    </a><li><a name="top" id="top_anchor">

                        </a><a href="http://1270.0.1:8088/cgi-bin/Anvil_RAAS_v4.sh" target="">Anvil_RAAS_v4</a>

                    </li>   

                    <li>

                        <a href="http://1270.0.1:8088/cgi-bin/BlackCoast_RAAS_v4.sh" target="">BlackCoast_RAAS_v4</a>

                    </li>

<li><a href="http" target=""></a></li> </ul>

<div style="color:#696969"><a name="top" id="top_anchor">

            <p>

                自助跳边<ul>

<form role="search" method="get" action="http://1270.0.1:8088/cgi-bin/AdminForceTeamChange.sh"><font style="color:#756fe9">用户昵称:</font></label><input type="search" name="username" value="" placeholder="请输入用户昵称" required="">

<input type="submit" value="提交"></ul>

</svg></button></div></form>

                </ul>

            <p></p>

    <br>

        </div>


游戏地图切换后台调用的CGI脚本示例:

#!/bin/bash

/usr/local/bin/mcrcon -P 21114 -p paswd -w 1 "AdminChangeLayer Anvil_RAAS_v4" ok


传参CGI脚本示例:

#!/bin/bash

USERNAME=`echo "$QUERY_STRING"|sed 's/username=//'

/usr/local/bin/mcrcon -P 21114 -p paswd -w 1 "AdminForceTeamChange $USERNAME" ok

利用CGI传参格式为:http://127.0.0.1:8088/cgi-bin/shell/参数1+参数2+参数3+...

注意,因自动UrlEncode编码转换问题,导致无法支持中文;


最终实现效果示例:

击杀查询是通过游戏日志输出的解析实现的



CGI部署

安装httpd:

yum install -y httpd


修改配置:

vim /etc/httpd/conf/httpd.conf

末尾添加内容:

LoadModule cgi_module /usr/lib64/httpd/modules/mod_cgi.so 

LoadModule cgid_module /usr/lib64/httpd/modules/mod_cgid.so

修改内容:(注意路径)

<Directory "/var/www/cgi-bin">    

AllowOverride None    

Options ExecCGI    

Order deny,allow    

Allow from all

</Directory>

取消注释:

   AddType text/html .shtml    

AddOutputFilter 

INCLUDES .shtml    

AddHandler cgi-script .cgi .sh         //在其后添加.sh,使其支持此结尾的脚本

修改默认端口,防止与Nginx冲突:

Listen 8088


启动httpd

systemctl start httpd


在CGI目录下编写脚本:

[root@cq html]# cd /var/www/cgi-bin/


此处需注意权限问题,CGI目录下的脚本调用是使用的apache用户;需要根据自身需求修改权限。


需要了解的是CGI的环境参数,以方便后续在脚本中直接调用:

此处引用:https://blog.csdn.net/JOKER0707/article/details/101569780

echo SERVER_SOFTWARE = $SERVER_SOFTWARE #服务器软件

echo SERVER_NAME = $SERVER_NAME         #服务器主机名

echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE    #CGI版本

echo SERVER_PROTOCOL = $SERVER_PROTOCOL  #通信使用的协议

echo SERVER_PORT = $SERVER_PORT         #服务器的端口号

echo REQUEST_METHOD = $REQUEST_METHOD   #请求方(GET/POST/PUT/DELETE..)

echo HTTP_ACCEPT = $HTTP_ACCEPT         #HTTP定义的浏览器能够接受的数据类型

echo SCRIPT_NAME = $SCRIPT_NAME         #当前运行的脚本名称(包含路径)

echo QUERY_STRING = $QUERY_STRING       #地址栏中传的数据(get方式)

echo REMOTE_ADDR = $REMOTE_ADDR         #客户端的ip





squad战术小队游戏服务器部署+简易面板部署的评论 (共 条)

分享到微博请遵守国家法律