squad战术小队游戏服务器部署+简易面板部署
部署环境 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