饥荒独立服务器入门级快速搭建

She can't escape her monomaniacal obsession with death. Neither can you.

1 前言

  前些年纯萌新阶段和朋友一起玩饥荒时翻遍教程搭建过饥荒联机服务器,奈何当时服务器性能捉急而且国外服务器延迟也挺高,体验比较差就放下了。今年表弟也开始入坑了,于是用现有的特价腾讯云来给他建一个,为了避免以后忘了捡起来费劲在此做个备份。总的来说是按网上现有的教程走的,然后注释一下(也不一定对就是),以及稍微简化。


2 必要准备

  1. 在桌面客户端提前设置好的游戏服务器文件夹或是现有存档、klei的服务器密钥cluster_token.txt
  2. 一台至少2G内存的云服务器以便同时饥荒地上洞穴双开。
  3. SSH远程连接工具:推荐使用VScode一把梭。

2.1 服务器相关文件的准备

2.1.1 游戏服务器文件夹建立

  只需要和平时一样客户端建立一个在线的新世界,按照自己的喜好勾选配置mod,调整世界参数,创建世界连接成功后退出就会生成对应的服务器文件夹如Cluster_1。在游戏主页左下方数据按钮可以找到也即自己的存档位置。

维斯史诗级加强

2.1.2 获取cluster_token

  为确保游戏服务器能24小时在线,饥荒桌面客户端的自建本地服务器密钥需要更换为官方长期有效版。参照上图点击进入账号选项,即会打开steam内置浏览器,按照下图指引,记下klei用户ID。在网页顶部导航栏进入游戏选项卡,找到饥荒服务器新建一个cluster_token并复制好,对上一步创建好的饥荒服务器文件夹Cluster_1中的cluster_token.txt内的密钥进行替换即可。

klei用户ID


饥荒服务器令牌

2.1.3 mod管理和管理员添加

  使用VScode或新建mod安装管理文件 dedicated_server_mods_setup.lua,格式如下,其中括号中的数字为对应的mod的ID,ID可在浏览创意工坊时steam内置浏览器地址栏找到,保存至桌面备用。此配置文件为mod安装更新使用,务必确保在先前创建的存档文件中所勾选的mod的ID引入此处,否则无法加载正常mod。

ServerModSetup("1699194522")
ServerModSetup("1991746508")
ServerModSetup("1898292532")

  类似的新建管理员名单adminlist.txt,将先前记录下的klei用户ID填入,若需添加多个管理员,将用户对应的klei用户ID分别换行填入即可。将adminlist.txt移至刚刚创建好的Cluster_1文件夹。

2.2 服务器连接

  以下使用VScode与腾讯云轻量服务器(centos7.6)进行远程连接。腾讯轻量云优惠活动比较多,特别是新用户,有需要可以网上关注下。在腾讯云成功创建轻量应用服务器后,在左侧导航栏进入密钥创建,完成后浏览器会自动下载私钥,用控制台将服务器关机并使密钥与服务器绑定。

创建私钥

  在VScode的扩展库中安装Remote - SSHRemote - SSH: Editing Configuration Files插件以实现远程连接。windows系统在C:\Users\#你的用户名\.ssh文件夹下新建配置文件config,并填入如下相应内容并保存,HostName项后填入服务器的外网IP

Host dst
  HostName 1.117.74.101
  Port 22
  User root

远程连接

  再将先前浏览器下载的私钥文件更名为id_rsa,复制至该文件夹。此时通过VScode左侧栏的远程连接右键"dst"在当前窗口新建会话,按指令栏下拉提示点击,选择continue即可完成远程连接。当VScode弹出TERMINAL终端命令行页面,出现类似[root@VM-4-17-centos ~]# 字样即为完成。

3 服务器安装与配置

3.1 游戏安装

3.1.1 STEAMCMD安装

  在TERMINAL终端命令行下操作,安装必要依赖组件(以centos为例,Ubuntu系统的话可以参考klei官方指引)

yum install glibc.i686 libstdc++.i686 libcurl.i686 --setopt=protected_multilib=false 
 #安装依赖库(针对centos64位系统,设置多库保护关闭)

  安装screen工具,以实现洞穴/地上切换

yum install screen

  安装steamcmd

mkdir steamcmd    #建立文件夹
cd ./steamcmd       #进入创建好的文件夹

wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz  

tar -xvzf steamcmd_linux.tar.gz 

./steamcmd.sh            #在该文件夹下载安装并运行steamcmd

  运行成功后在TERMINAL终端提示变为Steam>即为成功(提示SDL not found可以不予理会)。

3.1.2 饥荒服务端安装

  在此Steam会话中下载安装饥荒游戏服务器。

login anonymous   #匿名登录
app_update 343050 validate   #饥荒服务端安装

  由于网络问题可能需要等上一段时间,不行就中断后再试,直到提示安装成功,输入quit退出steam会话。如果你没有设置强制安装到指定目录的话正常情况是安装到/root/Steam/steamapps/common/Don't Starve Together Dedicated Server的,此时我们需要返回到该目录并试运行饥荒服务器。添加centos下缺少的一个库的代替,并试运行。

cd /root/Steam/steamapps/common/"Don't Starve Together Dedicated Server"/bin   #注意加上转义引号 

ln -s /usr/lib/libcurl.so.4 /usr/lib/libcurl-gnutls.so.4  #添加缺失的依赖

./dontstarve_dedicated_server_nullrenderer  #试运行

  当提示如下图所示即为安装成功,若启动不成功可以使用命令dd ./dontstarve_dedicated_server_nullrenderer 来查看程序缺少的动态链接库。

饥荒服务端安装成功

  同时按住Ctrl+c键以关闭饥荒服务端会话窗口或者在该会话窗口输入c_shutdown()来关闭。

3.2 游戏文件配置

  将准备好的本地游戏文件夹Cluster_1上传至服务器

cd  /root/.klei/DoNotStarveTogether         #移至饥荒存档目录
rm -r -f Cluster_1                          #删除试运行时系统自动生成的存档

  使用VScode的话直接用打开目录或在vs指令栏中输入/root/.klei/DoNotStarveTogether 即可本地进行远程文件管理,上传也简单,将整个文件夹拖拽至左侧文件浏览器完成上传。

上传本地文件夹

  如上图CavesMaster分别对应洞穴和地上世界,其内含的modoverrides.lua为对应各自世界的mod配置选项,该文件决定了mod的启用与参数调整。如果使用其他的SSH工具的话,可以将游戏本地文件夹打包,使用rz/szscp命令上传,再解压。

  类似的操作将服务器/root/Steam/steamapps/common/Don't Starve Together Dedicated Server/mods上的mod安装管理文件 dedicated_server_mods_setup.lua先删除再上传本地的。也可以不删除直接在VScode编辑修改或TERMINAL终端使用vi命令修改。最近klei更mod架构后,新版v2架构的mod会被放在游戏安装目录的ugc_mods文件夹中。

  完成后如下在TERMINAL终端输入指令启动游戏服务器稍加等待,当会话窗口提示sim paused即为完成,客户端尝试连接(此时只会启动地上世界),成功进入后在TERMINAL终端关闭(同时按住Ctrl+c)。此时默认运行Cluster_1存档,且只会运行地上世界,正式启动游戏服务器可关闭后使用下文重启脚本。

cd /root/Steam/steamapps/common/"Don't Starve Together Dedicated Server"/bin   #注意加上转义引号 
./dontstarve_dedicated_server_nullrenderer  #运行

成功运行服务端

4 游戏服务器运行

4.1 创建更新重启脚本

  为方便游戏后期更新需要创建更新重启脚本,在刚刚的TERMINAL终端输入cd命令移动至root用户的home directory,再输入vi dst.sh创建一个名为dst.sh的脚本文件,TERMINAL终端会话框会进入vi模式,按键盘的insert键,进入vi编辑模式,使用方向键移动光标,输入下列指令代码,再按esc进入vi命令行模式,输入:wq,保存并退出。

#!/bin/sh

pkill screen 
#关闭当前游戏服务器

cd /root/steamcmd

./steamcmd.sh +login anonymous +app_update 343050 validate +quit
#steamcmd进行游戏更新                       

  类似的新建重启脚本dst0.sh

#!/bin/sh
pkill screen 
#关闭当前游戏服务器

cd /root/Steam/steamapps/common/"Don't Starve Together Dedicated Server"/bin
#移至饥荒安装目录

screen -S dst1 -d -m  ./dontstarve_dedicated_server_nullrenderer -cluster Cluster_1 -console -shard Master
#利用screen命令静默启动地上世界,更改文件夹名称Cluster_1即可更改欲启动的不同存档文件夹。

screen -S dst2 -d -m  ./dontstarve_dedicated_server_nullrenderer -cluster Cluster_1 -console -shard Caves
#利用screen命令静默启动洞穴世界 

  注:当无法启动时可使用screen -r dst1用于恢复地上世界会话至前台查看报错信息,使用screen -d dst1将地上世界会话切换至后台。

  给脚本文件赋权

chmod u+x dst.sh
chmod u+x dst0.sh

  之后每次游戏需要更新都可以执行该脚本来完成(mod更新只需要执行重启脚本)以新建的TERMINAL终端默认root用户为例,如下即可完成,所以也可以在移动设备完成(这里安利下baye的APPservercat

cd
./dst.sh
./dst0.sh

4.2 后期mod添加

  玩饥荒mod时必不可少的,前文已经解决了如何在本地设置好mod配置文件。当游戏服务器上线后想添加新的或禁用某个mod,可以通过修改服务器Cluster_1中的地上世界和洞穴世界文件夹中的两个modoverrides.lua中"return{ "后面添加上mod描述如["workshop-375850593"] = { enabled = true },禁用的话改为false即可。

模组添加

  将服务器/root/Steam/steamapps/common/Don't Starve Together Dedicated Server/mods中的mod安装管理文件 dedicated_server_mods_setup.lua中添加上ServerModSetup("375850593"),最后使用重启脚本dst0.sh即可完成mod的添加启用。值得注意的时最近的版本更新使得该mod安装管理文件每次游戏更新后重置,也不知道以后的版本会不会改,建议将dedicated_server_mods_setup.lua文件做好备份以便更新后备用。

5 参考文章

klei官方教程

CentOS下安装和配置饥荒联机版服务器 | SumyBlog

饥荒联机版 Linux 服务器(地上世界与地下世界)搭建 - 知乎