搭建七日杀服务器:这里的服务器指的是云服务器:阿里云、华为云、腾讯云。用云服务器的好处是可以根据用户多少可以升降服务器配置,这样可以使你花最少的钱并且能很高的保障服务器稳定运行。
关于带宽:如果你用的是官方地图,服务器最好买包流量的,比如一个月固定3000G流量会给你14M带框,这种优势是比买固定宽带不限流量的花费便宜很多,而且带宽也会高上许多,不用担心因为玩家过多而带宽不足出现卡顿的问题;但是如果你是自定义地图耗费的服务器流量比较大,带宽的话你可以通过游戏配置限制玩家下载地图时的占用大小。这种情况可以根据实际需求来选择购买包月流量还是固定带宽。
关于swap:个人观点8Gswap足够了,众所周知七日杀是非常吃内存的会把所有游戏数据加载到内存中,所以尽量保证内存足够,当内存不足时才会用到swap交换分区,但是swap交换分区的效率远不如内存,可以用 free -m 命令查看内存利用率,当主机开始消耗swap了说明内存已经不足游戏开始卡顿了,需要对云主机内存进行升配了。
配置要求:
测试服:
带宽:1M
内存:4G
swap:8G
cpu:1核
10人服:
带宽:2M
内存:8G
swap:8G
CPU:2核
10-40人服:
带宽:4M以上(测试了下一般15个玩家基本上带宽就能达到4M,而且我用的是官方地图)
内存:16G以上
swap:8G
CPU:4核以上
系统配置:
修改主机名:
hostnamectl set-hostname 7day
停掉所有防火墙和云服务过滤策略
设置swap:
swapon -s # 如果该命令没有返回出结果,则代表该系统尚未配置过swap。
df -h # 检查可用的存储空间
fallocate -l 8G /swapfile # 请根据自己情况修改swap大小
chmod 600 /swapfile # 更改swap文件的权限,否则会有很大的安全隐患
mkswap /swapfile #格式化
swapon /swapfile #启用swap
vim /etc/fstab #设置为永久生效
/swapfile swap swap sw 0 0
swappiness参数决定了系统将数据从内存交换到swap空间的频率。该数值越接近于0,系统越倾向于不进行swap,最大限度使用物理内存。数值越接近100,越倾向于使用swap,而过多的使用swap可能导致服务器运行效率缓慢。这里我为了保证服务器运行效率,建议设置为1。
vim /etc/sysctl.conf
vm.swappiness = 1
系统安全配置:这个可以提高系统安全性,可以防止被暴力破解或降低流量攻击
sshd:修改端口设置只允许免密防暴力破解
vim /etc/ssh/sshd_config
Port 2222 #修改端口为2222
PasswordAuthentication no #设置为不能账号密码登录,防暴力破解,关于密钥登录可以百度一下
systemctl restart sshd #使配置生效
防火墙设置:降低流量攻击
补充中,,,,
安装游戏服务器
yum -y install glibc libstdc++ #安装运行环境
yum -y install glibc.i686 libstdc++.i686 #安装运行环境
yum install SDL2 多媒体开发库
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz #下载Linux系统专用的SteamCMD
tar -xvf steamcmd_linux.tar.gz #解压
./steamcmd.sh #运行steamcmd
login <用户名> <密码> 登录steam账号并输入一次安全令牌
force_install_dir ~/7DaysToDieServer # 设置服务端安装目录
app_update 294420 validate # 下载七日杀服务端,294420是七日杀的编号
force_install_dir /root/7DaysToDieServer #设置服务端安装目录
app_update 294420 validate # 下载七日杀服务端,294420是七日杀的编号
quit #退出SteamCmd
nohup /root/~/7DaysToDieServer/startserver.sh -configfile=serverconfig.xml & #启动游戏
添加计划任务
crontab -e
1 */1 * * * sync && echo 3 > /proc/sys/vm/drop_caches #每一小时清理一下读写缓存
*/5 * * * * ps -ef |grep -v grep|grep 7DaysToDieServer || bash -c "nohup /root/~/7DaysToDieServer/startserver.sh -configfile=serverconfig.xml &" #每5分钟一检测游戏进程是否还在,如果不在自动启动
1 5 * * * kill -9 `ps -ef | grep '\./'|grep -v grep |awk '{print $2}'` && sleep 10 && bash -c "nohup /root/~/7DaysToDieServer/startserver.sh -configfile=serverconfig.xml &" #每天早上5点自动重启
七日杀文件与目录:
~/7DaysToDieServer # 七日杀服务端主目录
~/7DaysToDieServer/Data/Worlds # 七日杀服务端地图目录
~/7DaysToDieServer/Data/ditu # 七日杀服务端存档目录,可以在主配置文件中修改
~/7DaysToDieServer/7DaysToDieServer_Data # 七日杀服务器日志输出目录
~/7DaysToDieServer/Mods # Mods目录,需要自己创建
~/7DaysToDieServer/serverconfig.xml #主配置文件
~/7DaysToDieServer/Data/ditu/serveradmin.xml # 服务器配置文件
服务器配置文件:可以设置管理员和封禁玩家
cat ~/7DaysToDieServer/serverconfig.xml
<admins>
<!-- <user steamID="76561198021925107" name="Hint on who this user is" permission_level="0" /> -->
<!-- <group steamID="103582791434672565" name="Steam Universe" permission_level_default="1000" permission_level_mod="0" /> -->
<user platform="EOS" userid="0002044ccd1a4d4bacc59bcb9ab8ba53" name="土贼" permission_level="0" /> <!-- 设置管理员以及权限 -->
</admins>
<blacklist>
<!-- <blacklisted steamID="" name="" unbandate="" reason="" /> -->
<blacklisted platform="EOS" userid="00022107456e4fd795439c8293628a0c" name="670267118" unbandate="2052-11-03 22:31:57" reason="[FF0000]NAIWAZI反作弊:人物档案" />
<blacklisted platform="EOS" userid="000200aeedb14f8fa8dc93cae76b575d" name="流经岁月" unbandate="2052-11-20 03:08:42" reason="[FF0000]NAIWAZI反作弊:飞行" /><!-- 封禁玩家,可以把这里的代码复制到其他服务器上可以同步封禁玩家名单 -->
</blacklist>
主配置文件:
cat ~/7DaysToDieServer/serverconfig.xml
<?xml version="1.0"?>
<ServerSettings>
<!-- GENERAL SERVER SETTINGS -->
<!-- Server representation -->
<property name="ServerName" value="土豆纯净公困难服 11月18日17点正式开服 QQ群:151846157 进群送300积分"/> <!-- 服务器名字 -->
<property name="ServerDescription" value="QQ群:151846157 进群送300积分
纯净+PVE
血月3天一次+无限血月
欢迎新萌大佬入住"/> <!-- 服务器简介描述 -->
<property name="ServerWebsiteURL" value=""/> <!-- 网站 -->
<property name="ServerPassword" value=""/> <!-- 服务器密码 -->
<property name="ServerLoginConfirmationText" value="祝游戏愉快!!
QQ群:151846157" /> <!-- 玩家进服前看到的小窗口内容 -->
<property name="Region" value="Asia" /> <!-- 服务区 -->
<property name="Language" value="English" /> <!-- 语言 -->
<!-- Networking -->
<property name="ServerPort" value="26900"/> <!-- 服务器端口 -->
<property name="ServerVisibility" value="2"/> <!-- 此服务器的可见性:2 =公开,1 =仅向朋友显示 -->
<property name="ServerDisabledNetworkProtocols" value="SteamNetworking"/> <!-- 不使用的网络协议,不要修改 -->
<property name="ServerMaxWorldTransferSpeedKiBs" value="512"/> <!-- 玩家与服务器的数据交互速度,服务器带宽高的填”1300"(这是最高了)带宽不够的填“512~1300” --
> <!-- Slots -->
<property name="ServerMaxPlayerCount" value="50"/> <!-- 玩家数量 -->
<property name="ServerReservedSlots" value="0"/> <!-- 预留玩家位置,会减少总在线人数(一般默认0不改) -->
<property name="ServerReservedSlotsPermission" value="100"/> <!-- 指定权限玩家可以进入预留玩家位置,权限分为0,1000,,(一般默认0不改)-->
<property name="ServerAdminSlots" value="0"/> <!-- 强制预留多少人,和最大同时在线人数不冲突,即使在线人数满了,有权限的玩家也可以进入游戏(默认
) --> <property name="ServerAdminSlotsPermission" value="0"/> <!-- 可以进入预留位置的权限级别(默认) -->
<!-- Admin interfaces -->
<property name="ControlPanelEnabled" value="false"/> <!-- 启用/禁用网页控制(填true) -->
<property name="ControlPanelPort" value="8080"/> <!-- 网页端口 -->
<property name="ControlPanelPassword" value=""/> <!-- 进入网页的密码(自定义,不要中文) -->
<property name="TelnetEnabled" value="true"/> <!-- Telnet 启用true 禁用false -->
<property name="TelnetPort" value="8081"/> <!-- 端口 -->
<property name="TelnetPassword" value=""/> <!-- 自定义密码 -->
<property name="TelnetFailedLoginLimit" value="10"/> <!-- 10(密码错误次数,次数达到后关闭连接) -->
<property name="TelnetFailedLoginsBlocktime" value="10"/> <!-- 10(连接超时 秒) -->
<property name="TerminalWindowEnabled" value="true"/> <!-- true 是否在桌面显示后台窗口 -->
<!-- Folder and file locations -->
<property name="AdminFileName" value="serveradmin.xml"/> <!-- serveradmin.xml(管理员、白名单、黑名单文件),会跟玩家存档在一块 -->
<property name="UserDataFolder" value="/root/~/7DaysToDieServer/Data" /> <!-- 指定玩家存档路径,推荐与服务端在同一目录下,方便你删档,替换/恢复存档,预制件管理 -->
<property name="SaveGameFolder" value="/root/~/7DaysToDieServer/Data/ditu" /> <!-- 指定服务器地图文件路径, -->
<!-- Other technical settings -->
<property name="EACEnabled" value="false"/> <!-- false(关闭EAC)启用true -->
<property name="HideCommandExecutionLog" value="0"/> <!-- 隐藏命令执行的日志记录。0=显示所有内容,1=只对Telnet/ControlPanel隐藏,2=还对远程游戏客户端
隐藏,3=隐藏所有内容 --> <property name="MaxUncoveredMapChunksPerPlayer" value="80000"/> <!-- 每个玩家在游戏地图上可以看到多少块(看到得越多越卡,也不能一点都没有)-->
<property name="PersistentPlayerProfiles" value="false" /> <!-- false(是否支持玩家自定义人物外观) -->
<!-- GAMEPLAY -->
<!-- World -->
<property name="GameWorld" value="PREGEN8k"/> <!-- RWG (随机地图)、或Worlds文件夹中任何现有的世界名称 (固定地图)(不要随便更改,只支持两个模式
,不是随机就是固定) --> <property name="WorldGenSeed" value="asdf"/> <!-- 生成不同地图的规则(随便写) -->
<property name="WorldGenSize" value="8192"/> <!-- 4096.8192.16348(三种大小的地图,16K的地图对大多数玩家都是一个挑战,8K图是主流,想人多就选8K
,随机图生成看服务器性能了,固定图的话秒生成) --> <property name="GameName" value="My Game"/> <!-- 地图名(随便写),如果你有现成的地图文件,在这里写下文件夹名字,服务器就会加载到了 -->
<property name="GameMode" value="GameModeSurvival"/> <!-- GameModeSurvival( 游戏生成模式) -->
<!-- Difficulty -->
<property name="GameDifficulty" value="4"/> <!-- 游戏难度 0到5 -->
<property name="BlockDamagePlayer" value="100" /> <!-- 玩家的方块伤害 -->
<property name="BlockDamageAI" value="100" /> <!-- 丧尸的方块伤害 -->
<property name="BlockDamageAIBM" value="100" /> <!-- 丧尸血月时候的方块伤害 -->
<property name="XPMultiplier" value="100" /> <!-- 经验倍率 -->
<property name="PlayerSafeZoneLevel" value="5" /> <!-- 如果玩家低于或等于这个等级,他将创造一个安全地带 -->
<property name="PlayerSafeZoneHours" value="0" /> <!-- 世界时日安全区存在 -->
<!-- -->
<property name="BuildCreate" value="false" /> <!-- false(创造模式:开启:true、关闭:false,默认就好) -->
<property name="DayNightLength" value="90" /> <!-- (现实60分钟时间为游戏里一天,也可以写999999) -->
<property name="DayLightLength" value="18" /> <!-- (24小时制,白天占去18小时,剩下6小时为黑天) -->
<property name="DropOnDeath" value="0" /> <!-- (死亡掉落 0 = 掉落一切,1 = 工具带,2 = 背包,3 = 删除所有,4=不掉落 ) -->
<property name="DropOnQuit" value="0" /> <!-- (退出掉落 0 = 无,1 = 掉落一切,2 = 工具带,3 = 背包 ) -->
<property name="BedrollDeadZoneSize" value="15" /> <!-- (玩家睡袋15M范围内不会刷新丧尸) -->
<property name="BedrollExpiryTime" value="10" /> <!-- 睡袋失效时间,以游戏天数为单位) -->
<!-- Performance related -->
<property name="MaxSpawnedZombies" value="60" /> <!-- 丧尸数不要超80,因为还有即时刷新丧尸,所以丧尸数不是这个选项能决定全部的 -->
<property name="MaxSpawnedAnimals" value="10" /> <!-- 动物数啊,随意了,只要不是100) -->
<property name="ServerMaxAllowedViewDistance" value="6" /> <!-- 6~12最大视距,7.8.9就好了,不然卡) -->
<!-- Zombie settings -->
<property name="EnemySpawnMode" value="true" /> <!-- true(丧尸即时刷新,比如贞子尖叫) -->
<property name="EnemyDifficulty" value="0" /> <!-- ( 狂暴模式 0 = 正常, 1 = 狂暴 ) -->
<property name="ZombieFeralSense" value="2" /> <!-- 僵尸何时开启感知:0-3(休息、白天、晚上、全部) -->
<property name="ZombieMove" value="0" /> <!-- 白天 0-4 (走, 慢跑, 奔跑, 冲刺, 恶梦) -->
<property name="ZombieMoveNight" value="3" /> <!-- 夜晚 0-4 (走, 慢跑, 奔跑, 冲刺, 恶梦) -->
<property name="ZombieFeralMove" value="0" /> <!-- 野外 0-4 (走, 慢跑, 奔跑, 冲刺, 恶梦) -->
<property name="ZombieBMMove" value="4" /> <!-- 血月 0-4 (走, 慢跑, 奔跑, 冲刺, 恶梦) -->
<property name="BloodMoonFrequency" value="3" /> <!-- 几天一次血月,所谓的7天尸潮可以自定义了 -->
<property name="BloodMoonRange" value="0" /> <!-- 实际血月日可以多少天随机偏离上述设置。 将此设置为0会使血液卫星恰好在血月频率中指定的每个第N
天发生 --> <property name="BloodMoonWarning" value="8" /> <!-- 红色日数在血月日开始的小时数。 将此值设置为-1会使红色永不显示 -->
<property name="BloodMoonEnemyCount" value="8" /> <!-- 血月的时候,每个玩家对应的丧尸数量 -->
<!-- Loot -->
<property name="LootAbundance" value="100" /> <!-- 搜刮倍率 -->
<property name="LootRespawnDays" value="7" /> <!-- 物资多少天刷新一次 -->
<property name="AirDropFrequency" value="48"/> <!-- 空投时间(小时) -->
<property name="AirDropMarker" value="true"/> <!-- 是否在地图标记空投 -->
<!-- Multiplayer -->
<property name="PartySharedKillRange" value="10000"/> <!-- 经验分享距离 -->
<property name="PlayerKillingMode" value="0" /> <!-- 玩家杀戮设置(0 =禁止杀戮,1 =仅杀死盟友,2 =仅杀死陌生人,3 =杀死所有人) -->
<!-- Land claim options -->
<property name="LandClaimCount" value="2"/> <!-- 每个玩家最多能有几颗生效的领地石 -->
<property name="LandClaimSize" value="41"/> <!-- 领地石范围 -->
<property name="LandClaimDeadZone" value="30"/> <!-- 禁止敌人放置领地石范围大小 (默认就好) -->
<property name="LandClaimExpiryTime" value="40"/> <!-- 离线多少天领地石失效 -->
<property name="LandClaimDecayMode" value="2"/> <!-- 控制离线玩家如何降落索赔。所有索赔有充分保护的第一个24小时。0=线性,1=指数,2=完全保护,
直到权利要求到期 --> <property name="LandClaimOnlineDurabilityModifier" value="0"/> <!-- 当玩家在线时,保护区的硬度会增加多少。0意味着无限(不会受到伤害)。默认值为4倍 -->
<property name="LandClaimOfflineDurabilityModifier" value="0"/> <!-- 当玩家离线时,保护区的硬度会增加多少。0意味着无限(不会受到伤害)。默认值为4倍 -->
<property name="LandClaimOfflineDelay" value="0"/> <!-- 离线后领地石硬度变化 0意味着无限(不会受到伤害) -->
<property name="DynamicMeshEnabled" value="true"/> <!-- 动态网格系统是否已启用 -->
<property name="DynamicMeshLandClaimOnly" value="true"/> <!-- 动态网格系统是否仅在玩家LCB区域中处于活动状态 -->
<property name="DynamicMeshLandClaimBuffer" value="2"/> <!-- 动态网格 LCB 块半径 -->
<property name="DynamicMeshMaxItemCache" value="7"/> <!-- 可以同时处理多少个项目,值越高,占用的 RAM 越多 -->
<property name="TwitchServerPermission" value="90"/> <!-- 在服务器上使用twitch需要的权限级别 -->
<property name="TwitchBloodMoonAllowed" value="false"/> <!-- 如果服务器在血月期间允许twitch操作。这可能会导致服务器延迟,在血月期间会产生额外的僵尸 -->
<!-- 在开始新游戏时,有几个游戏设置无法更改。您可以使用控制台命令在游戏中更改其中至少一些命令。setgamepref BedrollDeadZoneSize 30 -->
</ServerSettings>
~/7DaysToDieServer/Data/Config/目录下配置相关
(参考:https://www.360docs.net/doc/2714137399.html)
1、items文件:创造模式中按u键调出来的items栏所有物品的属性都在这里,最重要的修改物品叠加数量的就在这边。
2、buffs文件:可直接修改各类buff的生成要求和持续时间
3、loot文件:可直接修改各类E键搜索的物品栏的生成内容、数量
4、recipes文件:可直接修改合成表
5、blocks文件:创造模式中按u键调出来的blocks栏所有物品的属性都在这里。
6、biomes文件:修改不同生态系统的属性
7、entityclasses文件:修改敌人属性,你懂得
8、entitycgroups文件:修改敌人刷新的群体,比如刷尸潮时会出现哪些类型的丧尸,全部军肥、尸王不是梦
9、materials文件:修改其他材料的基础信息
10、rwgmixer文件:修改随机地图生成时的不同生态、城镇属性。你想生成全部是废墟、雪地、沙漠的地图,或者一个地图全是城镇不再是梦
11、spawning文件:修改不同生态、不同时间的僵尸刷新群体和数量
12、sounds文件:修改各类声音属性
13、traders文件:商人参数、贩卖机参数
七日杀指令:
(参考:https://www.360docs.net/doc/f55522835.html)
NAIWAZI