centos7服务器搭建7日杀(7 days to die) 服务器, 配置,存档,迁移方法 (踩坑总结)

 

最近搞了软路由, 不搞点事情不舒服. 正好周末和朋友玩7日杀, 搭个服务器玩玩.

 

网络环境准备.

1. 公网ip的机器

or 

2. 自家网络, 找电信要了公网ip && 光猫使用桥接由路由拨号 && 路由器需要支持ddns && 路由器支持端口映射

 

机器

一个己喜欢的linux发行版(本记录使用centos7为例)

 

安装过程:

1. 安装steamlink所需要的lib包 

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

  

2. 选一个steamlink的安装目录, 这里我装到 /home/ ,下载并解压

cd /home/ && wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar xf steamcmd_linux.tar.gz
cd steamcmd/

  

3. 登录steamlink

./steamcmd.sh

登录账号前先设置7日杀安装目录, 这里我直接装在当前目录的 7d2d 新目录(/home/steamcmd/7d2d)

force_install_dir ./7d2d

login 你的steam账号
输入密码和令牌登录成功

4. 下载游戏

app_update 294420

  

5. 编辑服务器信息

进入7日杀程序目录 cd 7d2d
编辑服务器配置
vim serverconfig.xml

这里重点关注几个字段:

ServerName 你服务器在公网显示的名字

ServerPassword 连接密码

ServerPort 服务器端口, 注意!!! 这个端口填的是tcp端口,假设是默认的26900. 但七日杀同时还需要用到这个端口号+3范围内的udp端口(我这udp监听的是26902), 配置文件这里只填tcp的端口号就好

ServerVisibility 服务器可见性 2公开, 1朋友可见(但服务器没有朋友,所以和0效果一样), 0不列出

TelnetEnabled telnet开关,强烈建议开着方便调试连通性

GameWorld 这里填的值 注意!!! 如果是随机地图就填 RWG , 如果不是随机地图而是系统预设好的,则使用系统预设地图名 ,名字就是7日杀安装目录/Data/Worlds 里的地图名

WorldGenSeed 地图生成种子 注意!!! 这里有坑 如果是从外部迁移存档并且使用的是随机生成的地图, 这个种子必须和创建时一致. 因为他是通过这个种子和地图大小来计算出地图名的, 计算出的地图名的结果需要和你迁移过来的生成地图一致(关于迁移, 下面会说)

WorldGenSize 地图大小 2048的倍数, 最大在16384以内,对应到游戏创建时的4km-14km 注意!!! 如果是从外部迁移存档并且使用的是随机生成的地图, 这个种子必须和创建时一致,原因同上(关于迁移, 下面会说)

GameName 游戏名, 如果是迁移的, 也必须一致(
关于迁移, 下面会说)

其他配置根据自己喜好参考官方文档修改 https://developer.valvesoftware.com/wiki/7_Days_to_Die_Dedicated_Server

6. 启动服务器

   启动服务器, 因为 startserver.sh 会阻塞当前ssh窗口, 建议使用 nohup 和&结合, 新建一个脚本 startup.sh专门用来启动服务器,把日志输出到文件里.这样就可以随意关闭控制台了

  vim startup.sh

   

#!/bin/sh

nohup ./startserver.sh -configfile=serverconfig.xml > stdout.log &

  

  保存退出, 设置运行权限

chmod 777 startup.sh

  启动服务器

./startup.sh 

  

top 一下看看7DaysToDieServe 进程有没有开始在努力跑, 如果是那就正确了.

tailf stdout.log 可以观察服务器日志输出.

关闭服务器进程可执行

pkill 7Days

 

看服务器是否正确的监听了tcp和udp端口

netstat -anop | grep 7Day

 

如果端口没改过是默认的26900, 那么启动好后执行这个命令可以看到tcp端口监听,同时还会看到监听 26902 udp端口

 

测试tcp端口连通性

telnet 127.0.0.1 26900

  

如果通,会看到下面消息

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
GameType:7DTD;GameMode:Survival;GameName:哎呀哟;ServerDescription:XXXXX 专用;ServerWebsiteURL:;IP:XXXXXXX;LevelName:Mahude Valley;GameHost.........

  

测试udp端口连通性

nc -vuz 127.0.0.1 26902

  

如果通,会看到下面消息

Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 127.0.0.1:26902.
Ncat: UDP packet sent successfully
Ncat: 1 bytes sent, 1 bytes received in 2.03 seconds.

  

7. 外网处理

  如果是在外网ip的机器上, 直接设置防火墙和iptables开放26900-26903端口即可

  如果是自家网络, 需要在路由器上设置ddns, 路由器上设置端口映射 外网的 tcp 26900, udp 26901-26903 映射到7日杀所在服上的相同端口, 这部分不同路由器操作不一样, 不记录步骤了. 自家网络不建议设置DMZ主机! 整台机全部端口暴露到公网会有安全风险.

  连通性测试, 和第6步后面一样, 只是把127.0.0.1 换成 公网ip或是你设置的ddns域名

 

8. 存档和目录结构

    win存档位置  C:\Users\用户名\AppData\Roaming\7DaysToDie\Saves\[GameWrold]\[GameName] 

    win随机生成地图位置 C:\Users\用户名\AppData\Roaming\7DaysToDie\GeneratedWorlds\[GameWrold]

    linux存档位置  /root/.local/share/7DaysToDie/Saves/[GameWrold]/[GameName] 

    linux随机生成地图位置 /root/.local/share/7DaysToDie/GeneratedWorlds/[GameWrold]

 

   注意!!! 

  GameWrold  如果是预设地图, 则是游戏目录里Data/Worlds 对应的名字比如PREGEN02,PREGEN6k ,

        如果是随机生成地图则是生成的地图名字, 比如Voluya Territory, Mahude Valley 这种名字

9. 迁移: 

如果是预设地图, 直接迁移 save\[GameWrold]\[GameName]  到服务器的  save\[GameWrold]\[GameName] , 然后编辑服务器serverconfig.xml的 GameWorld和GameName和目录对应即可, 

如果是随机生成地图, 需要迁移GeneratedWorlds\[GameWrold] 和 save\[GameWrold]\[GameName] 到服务器对应目录, 然后编辑服务器serverconfig.xml的 GameWorld 改为RWG, GameName填目录对应的GameName, WorldGenSeed和WorldGenSize需要和创建时一致. 改完后启动时注意观察日志输出, 如果看到 GamePref.GameWorld 这行和你迁移的GameWorld名字一样说明就对了, 说明服务器计算出的地图名和你迁移的GameWorld名称一致,就会使用你已经创建好的随机生成地图和存档, 这里有点坑不知道为什么这么设计..

 

posted @ 2022-03-16 06:13  DrWong  阅读(5319)  评论(0编辑  收藏  举报