在Linux上搭建饥荒服务器
在网上教程的帮助下,经过2天努力我终于成功搭建了饥荒专用服务器。由于网上的教程有些简陋,所以我决定写一篇教程来分享我的经验,以帮助更多的想要搭建自己服务器的玩家。
准备工作
首先搭建服务器需要具备在字符界面进行操作的能力,什么是字符界面,如下图
上面截图中漆黑的面板就是没有安装图形界面的操作系统,所有的操作都要靠输入指令完成,所以想要搭建服务器需要具备一定的Linux相关的知识,如果你是计算机专业的那再好不过了,如果你不是的话那也没关系,我会把每一条命令的含义解释清楚。
购买服务器
当然也可以不用购买,你可以在自己的电脑上部署,只不过在自己电脑上部署的服务延迟为???,这是没有公网IP的缘故。操作系统推荐安装CentOS,因为这篇教程只针对CentOS系统。
开始搭建
安装 SteamCMD
SteamCMD 就是 Steam 客户端,只不过是命令行版本的客户端。另外虽然SteamCMD 也能下载游戏,但它下载的是游戏的服务端,而Steam下载的是游戏的客户端。这里贴上官方文档
1.创建 steam 用户
useradd -m steam
2.进入其主文件夹
cd /home/steam
3.安装
yum install steamcmd
4.链接 steamcmd 可执行文件
ln -s /usr/games/steamcmd steamcmd
运行 SteamCMD
1.切换成 steam 用户(因为官方建议不要用root角色运行,因为会带来安全风险)
su - steam
2.启动 SteamCMD
cd ~
steamcmd
运行了上面的命令后Bash 提示符会变成Steam>
,那么就可以进行登陆操作了
登陆 Steam
1.匿名登陆
login anonymous
2.设置应用安装目录
force_install_dir ./dst/
3.安装饥荒联机版(服务端)
app_update 343050 validate
4.完成之后,输入quit从而正确地从 Steam 服务器内注销帐户
quit
启动饥荒
进入到饥荒安装目录/bin
中,看到该目录下面有个dontstarve_dedicated_server_nullrenderer
这个名字的文件,它就是游戏的启动器
启动游戏的命令如下(但先不要启动游戏,因为存档文件还没有准备)
dontstarve_dedicated_server_nullrenderer -cluster MyDediServer -shard Master
其中-cluster
指定存档文件名,-shard
指定启动地面还是洞穴(Master
地面 Caves
洞穴)
准备存档文件
所有的存档文件统一放在/home/steam/.klei/DoNotStarveTogether
目录下,先去Klei官网下载一份存档文件
1.进入官网并登陆,点击红圈框柱的按钮
2.添加新服务器,然后点击配置服务器按钮
3.点击下载设置,得到一个压缩包MyDediServer.zip
4.将压缩包解压到/home/steam/.klei/DoNotStarveTogether
目录下,执行启动游戏命令
存档文件说明
MyDediServer内部文件说明
文件名 | 作用 |
---|---|
Caves | 洞穴相关 |
Master | 地面相关 |
cluster.ini | 服务器配置文件 |
cluster_token.txt | 服务器token(从Klei官网获取) |
cluster.ini文件配置项说明
[MISC]
max_snapshots = 6 # 最大快照数,决定了可回滚的天数
console_enabled = true # 是否开启控制台
[SHARD]
shard_enabled = true # 服务器共享,要开启洞穴服务器的必须启用
bind_ip = 127.0.0.1 # 服务器监听的地址,当所有实例都运行在同一台机器时,可填写 127.0.0.1,会被 server .ini 覆盖
master_ip = 127.0.0.1 # master 服务器的 IP,针对非 master 服务器,若与 master 服务器运行在同一台机器时,可填写 127.0.0.1,会被 server.ini 覆盖
master_port = 10888 # 监听 master 服务器的 UDP 端口,所有连接至 master 服务器的非 master 服务器必须相同
cluster_key = dst # 连接密码,每台服务器必须相同,会被 server.ini 覆盖
[STEAM]
steam_group_only = false # 只允许某 Steam 组的成员加入
steam_group_id = 0 # 指定某个 Steam 组,填写组 ID
steam_group_admins = false # 开启后,Steam 组的管理员拥有服务器的管理权限
[NETWORK]
offline_server = false # 离线服务器,只有局域网用户能加入,并且所有依赖于 Steam 的任何功能都无效,比如说饰品掉落
tick_rate = 15 # 每秒通信次数,越高游戏体验越好,但是会加大服务器负担
whitelist_slots = 0 # 为白名单用户保留的游戏位
cluster_password = # 游戏密码,不设置表示无密码
cluster_name = ttionya test # 游戏房间名称
cluster_description = description # 游戏房间描述
lan_only_cluster = false # 局域网游戏
cluster_intention = madness # 游戏偏好,可选 cooperative, competitive, social, or madness,随便设置,没卵用
[GAMEPLAY]
max_players = 16 # 最大游戏人数
pvp = true # 能不能攻击其他玩家,能不能给其他玩家喂屎
game_mode = survival # 游戏模式,可选 survival, endless or wilderness,与玩家死亡后的负面影响有关
pause_when_empty = false # 没人服务器暂停,刷天数必备
vote_kick_enabled = false # 投票踢人
Master和Caves内部文件说明
文件名 | 作用 | 是否必须 |
---|---|---|
backup | 回档相关 | 否 |
save | 存档相关 | 否 |
leveldataoverride.lua | 世界配置 | 是 |
modoverrides.lua | mode配置 | 是 |
server.ini | 服务配置 | 是 |
server_chat_log.txt | 聊天日志 | 否 |
server_log.txt | 服务器日志 | 否 |
如果是新开一个存档的话只需要准备leveldataoverride.lua modoverrides.lua server.ini
这三个文件就行了,其他的文件会自动生成
配置mode
网上教程非常多,我这里就不在详细讲解,我简单说一下
从已有的存档里复制
点击此电脑进入C:\Users\这里是你的用户名\Documents\Klei\DoNotStarveTogether
目录,里面有饥荒存档,从存档拷贝一份modoverrides.lua到服务器上
服务器订阅并自动更新mode
进入饥荒安装目录/mods
目录下,里面有个dedicated_server_mods_setup.lua
文件,编辑这个文件订阅mode,ServerModSetup()
里面传入的参数是mode的id
--There are two functions that will install mods, ServerModSetup and ServerModCollectionSetup. Put the calls to the functions in this file and they will be executed on boot.
--ServerModSetup takes a string of a specific mod's Workshop id. It will download and install the mod to your mod directory on boot.
--The Workshop id can be found at the end of the url to the mod's Workshop page.
--Example: http://steamcommunity.com/sharedfiles/filedetails/?id=350811795
--ServerModSetup("350811795")
--ServerModCollectionSetup takes a string of a specific mod's Workshop id. It will download all the mods in the collection and install them to the mod directory on boot.
--The Workshop id can be found at the end of the url to the collection's Workshop page.
--Example: http://steamcommunity.com/sharedfiles/filedetails/?id=379114180
--ServerModCollectionSetup("379114180")
ServerModSetup("1365023186")
ServerModSetup("1383795736")
ServerModSetup("375859599")
ServerModSetup("378160973")
ServerModSetup("458587300")
ServerModSetup("458940297")
保存后重启饥荒即可
制作启动脚本
启动命令太长了每次输入都不方便,制作一个shell脚本简化启动操作。进入到饥荒安装目录/bin
目录下,创建两个文件dst_master.sh
和dst_caves.sh
,它们分别是地面的启动脚本和洞穴的启动脚本。编辑这两个文件,在里面分别写入
dst_master.sh
./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Master
dst_caves.sh
./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Caves
当然网上的帖子是这么操作的
echo "./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Master" > dst_master.sh
echo "./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Caves" > dst_caves.sh
其实本质上都一样,像echo 字符串 > 文件名
这种命令的作用就是将echo后面跟的那一串字符串写入到指定文件中
利用screen工具开启多个窗口
首先介绍这个工具有什么用,这个工具是用来开启多个窗口的。在服务器上启动饥荒之后你会发现当前窗口被启动命令所占用,你无法输入其他命令,除非按住Ctrl+C
退出,但是退出之后服务也跟着关闭了,所以需要借助screen工具开启多个窗口
网上的screen使用教程废话太多,我这里贴出几个常用的命令:
- 创建一个新的窗口
screen -S 窗口名称自己起
- 退出窗口
Ctrl+A+D
- 查看窗口列表
screen -ls
- 恢复窗口
screen -r 要恢复的窗口名
- 删除窗口
screen -S 要删除的窗口名 -X quit
利用screen工具开启两个窗口分别启动地面和洞穴服务
解决延迟为???的问题
首先需要解释下产生这种情况的原因,延迟多少是由Klei的服务器去检测的,如果Klei的服务器ping不通你的服务器,就会产生延迟为???的情况。
一般有两种可能
-
如果你是在自己电脑上部署的饥荒服务端
因为没有公网IP所以Klei那边无论如何都不可能检测到延迟,所以没法解决。 -
如果你是在云服务器上部署的饥荒服务端
开放服务器的安全组,TCP和UPD两种协议类型的1-65535端口全部开放
关闭防火墙,命令systemctl stop firewalld