关于搭建饥荒专用服务器的记录

1、搭建饥荒专用服务器(云服务器)的准备工作:

1.1、云服务器的选择:

云服务器可以用来独立的运行饥荒联机版,而不使用图形化界面,从而节约客户端资源或者便于与他人联机。

云服务器可以搭建在 Windows/Linux 上,但一般建议搭建在 Linux 主机上而不是 Windows 上,以防 Windows 自动更新、系统占用过多等原因导致服务器无法长期运行。

云服务器配置

  • 上行带宽:8KBps 一个玩家;
  • 内存:差不多一个玩家 65Mbytes;
  • CPU:没太大要求

需要注意的是,饥荒联机版的服务器对内存的要求其实挺大的,开 Mod 还会占用更多,所以还是要衡量一下机器的配置。根据实测,2g内存的机子勉强够用,推荐使用2核4g内存的机器。机器配置多多益善,服务商优先选择国内机器,例如腾讯云、阿里云、天翼云等。

1.2、软件安装:

Steam及饥荒安装不再赘述,需要安装服务器连接工具,这里推荐Xshell及Xftp两款软件。可以在官网选择家庭及学校免费授权版本使用,这里附上官网链接:https://www.xshell.com/zh/free-for-home-school/

2、搭建饥荒专用服务器:

2.1、服务器后台配置

这里以腾讯云为例,服务器购买成功后,我们打开服务器的管理后台。

重装系统,选择CentOS系统(以CentOS为例),记住公网IP地址、用户名,设置服务器登陆密码。重装完成后,打开防火墙,允许饥荒端口访问。具体需要开放的端口可以查看存档文件夹下的这几个文件:

# 饥荒端口,UDP协议
~/.klei/DoNotStarveTogether/Cluster_1/cluster.ini 中的 master_port。
~/.klei/DoNotStarveTogether/Cluster_1/Master/server.ini 中的 server_port。
~/.klei/DoNotStarveTogether/Cluster_1/Caves/server.ini 中的 server_port
# steam端口,TCP+UDP协议
~/.klei/DoNotStarveTogether/Cluster_1/Caves/server.ini 中的 master_server_port、authentication_port

这里看不懂的话,可以参考如下进行设置(注意协议类型):


在监控栏里,我们可以看到服务器运行的内存、网络等情况:

2.2、连接服务器

打开Xshell软件,新建会话,主机栏里填写服务器公网IP地址,端口号22、协议SSH不变,用户身份验证里填写用户名和密码,弹出的主机密钥选择接受并保存。

2.3、安装编译环境及所需依赖

centos 7:

yum update -y
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y
yum install glibc.i686 libstdc++.i686 libcurl.i686 screen -y

这里给出其他Linux 系统安装代码:

ubuntu:

sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update -y
sudo apt install lib32gcc1 libcurl4-gnutls-dev:i386 lib32stdc++6 lib32z1 -y

centos 8:

yum update -y
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y
yum install glibc.i686 libstdc++.i686 libcurl.i686 screen -y

完成后截图如下:

2.4、安装 SteamCMD

创建steamcmd文件夹并进入:

mkdir ~/steamcmd
cd ~/steamcmd

下载 steamcmd程序:

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

解压steamcmd_linux.tar.gz文件:

tar -xvzf steamcmd_linux.tar.gz

启动steamcmd:

./steamcmd.sh

完成后截图如下:

2.5、安装饥荒联机版

通过steamcmd下载饥荒联机版:

前面的steam> 不需要输入,只是说明你在steam服务中

强制创建游戏目录:

steam> force_install_dir ../dontstarvetogether_dedicated_server

匿名登录steam(网络不好失败的话多试几次):

steam> login anonymous

安装更新饥荒联机版:

steam> app_update 343050 validate

退出steam服务:

steam> quit

app_update 343050 validate就是去steam中下载饥荒联机服务器的命令,需要等待一会,当执行完成后输入quit退出steam服务,完成后截图如下:

3、创建本地存档并上传服务器:

3.1、在本机创建世界:

在服务器上直接创建新地图的话后续配置会比较麻烦,一般都是在本地Windows上先创建地图,然后找到地图文件上传到服务器中。

在创建之前,首先整理好需使用的Mod,并记录Mod代码,即在steam网址栏中的id,建议在文本中记录。

在本机打开饥荒,创建游戏对世界进行配置,选择服务器模式,配置好密码,勾选并配置好要使用的MOD

配置完成后,点击“生成世界”,等待世界创建完成,在进入选择人物界面后,就可以退出了。

3.2、将本机存档上传服务器:

在服务器中创建存档文件夹:

mkdir -p ~/.klei/DoNotStarveTogether/Cluster_1

点击工具栏绿色图标,打开Xftp软件:

在Xftp软件的工具栏上打开设置,勾选显示隐藏文件:

返回根菜单,依次双击进入.klei,DoNotStarveTogether,Cluster_1。

打开本地饥荒,选择数据,打开Cluster_1文件夹,编辑cluster.ini文件,更改房间信息。

然后将Caves、Master、cluster三个文件上传到服务器的Cluster_1文件夹内。

在本地新建txt文档,重命名为cluster_token.txt,注意文件名后缀不要重复。

打开饥荒,点击账号,记录自己的用户ID,点击游戏。

点击饥荒的游戏服务器,添加新的服务器,并记录令牌代码。

将令牌代码复制到cluster_token.txt文件,并将此文件上传到服务器的Cluster_1文件夹内。

3.3、为自己添加管理员权限

在本地创建管理员权限文件adminlist.txt,将刚才记录的klei ID复制到文件中,并上传服务器。

3.4、修改服务器MOD文件

返回根菜单,依次双击进入dontstarvetogether_dedicated_server,mods。将dedicated_server_mods_setup.lua文件拖到本地修改。

将之前记录的mod id,替换到此文件中,注意不加前面的--。

替换完成后,将此文件拖到服务器中,覆盖服务器文件。

3.5、编写启动脚本

在本地创建boot.sh文件(先创建txt文本,然后更改为.sh后缀),进行修改。

把下面的命令粘贴到boot.sh中:

32位游戏(建议低配服务器使用):

#!/bin/bash

steamcmd_dir="$HOME/steamcmd"
install_dir="$HOME/dontstarvetogether_dedicated_server"
cluster_name="Cluster_1"
dontstarve_dir="$HOME/.klei/DoNotStarveTogether"

function fail() {
    echo Error: "$@" >&2
    exit 1
}

function check_for_file() { 
    if [ ! -e "$1" ]; then
        fail "Missing file: $1"
    fi
}

cd "$steamcmd_dir" || fail "Missing $steamcmd_dir directory!"
check_for_file "steamcmd.sh"
check_for_file "$dontstarve_dir/$cluster_name/cluster.ini"
check_for_file "$dontstarve_dir/$cluster_name/cluster_token.txt"
check_for_file "$dontstarve_dir/$cluster_name/Master/server.ini"
check_for_file "$dontstarve_dir/$cluster_name/Caves/server.ini"
check_for_file "$install_dir/bin"
cd "$install_dir/bin" || fail
run_shared=(./dontstarve_dedicated_server_nullrenderer)
run_shared+=(-console)
run_shared+=(-cluster "$cluster_name")
run_shared+=(-monitor_parent_process $$)
run_shared+=(-shard)
"${run_shared[@]}" Caves | sed 's/^/Caves: /' &
"${run_shared[@]}" Master | sed 's/^/Master: /'

64位游戏(推荐使用):

#!/bin/bash

steamcmd_dir="$HOME/steamcmd"
install_dir="$HOME/dontstarvetogether_dedicated_server"
cluster_name="Cluster_1"
dontstarve_dir="$HOME/.klei/DoNotStarveTogether"

function fail() {
    echo Error: "$@" >&2
    exit 1
}

function check_for_file() { 
    if [ ! -e "$1" ]; then
        fail "Missing file: $1"
    fi
}

cd "$steamcmd_dir" || fail "Missing $steamcmd_dir directory!"
check_for_file "steamcmd.sh"
check_for_file "$dontstarve_dir/$cluster_name/cluster.ini"
check_for_file "$dontstarve_dir/$cluster_name/cluster_token.txt"
check_for_file "$dontstarve_dir/$cluster_name/Master/server.ini"
check_for_file "$dontstarve_dir/$cluster_name/Caves/server.ini"
check_for_file "$install_dir/bin"
cd "$install_dir/bin64" || fail
run_shared=(./dontstarve_dedicated_server_nullrenderer_x64)
run_shared+=(-console)
run_shared+=(-cluster "$cluster_name")
run_shared+=(-monitor_parent_process $$)
run_shared+=(-shard)
"${run_shared[@]}" Caves | sed 's/^/Caves: /' &
"${run_shared[@]}" Master | sed 's/^/Master: /'

返回服务器根目录,将boot.sh上传到服务器,并右键修改权限为777。

3.6、运行后可能出现的问题:

1、找不到文件:

bash: ./start.sh: /bin/bash^M: bad interpreter: No such file or directory

因为文件的格式是dos,需要修改为unix:

返回根目录,输入编辑代码:

vim boot.sh

按 ESC键,再按Shift+冒号,输入 set ff ,回车 ,可以看见该文件的格式 fileformat=dos,按shift + 冒号,输入 set ff=unix ,回车。

输入冒号wq!退出编辑。

2、解决 lib 缺失,添加软关系:

32位饥荒:

cd ~/dontstarvetogether_dedicated_server/bin/lib32
ln -s /usr/lib/libcurl.so.4 libcurl-gnutls.so.4

64位饥荒:

cd ~/dontstarvetogether_dedicated_server/bin64/lib64
ln -s /usr/lib64/libcurl.so.4 libcurl-gnutls.so.4

4、游戏启动及关闭

4.1、启动游戏

输入cd回车, 返回根菜单,输入代码后台启动游戏:

nohup ./boot.sh>root.log 2>&1 &

执行后饥荒服务器会在后台运行,过一会就可以搜索到世界了,可以通过下面这个命令查看输出的日志:

tail -f root.log

4.2、关闭游戏

因为是后台运行,关闭服务器需要先找到服务器的PID,然后用kill命令杀死:

ps -ef | grep don

这两个一样的数字便是世界的id,分别是地上世界和地下世界,用kill命令结束进程(id随机,每次不一样):

kill 7443

再次查询便没有7443的世界了,游戏已经关闭。关闭后再启动游戏可以解决mod需要更新的问题。

5、游戏更新及其他

5.1、游戏更新

每次饥荒联机版更新后都需要同步更新服务器,不同版本之间不能在一起玩,而且搜索不到房间。

这里推荐一个查询饥荒服务器的网址,如果你在这个网址上能搜到自己的服务器,但是其他人搜不到,那应该就是版本不同导致的。

https://dst.liuyh.com/serverlist

更新饥荒游戏命令(更新游戏本体,如果是mod需要更新重启世界即可):

./steamcmd.sh +force_install_dir ../dontstarvetogether_dedicated_server +login anonymous +app_update 343050 validate +quit

5.2、修改服务器信息

服务器的名称的名称和密码在.klei/DoNotStarveTogether/Cluster_1/cluster.ini 文件中,修改后重启即可。

5.3、服务器卡顿排查

导致玩家在服务器上卡顿的原因有很多,比如

  • 玩家到服务器连接不稳定
  • 服务器CPU负载过高 或 内存不足
  • 存在优化较差的MOD 或 相互不兼容

可以将服务器ip地址输入到这个网站查看延迟信息:

https://ping.pe/

可以上传一个纯净存档(不开任何MOD)试试,如果不卡顿再一个个关掉MOD尝试。

5.4、本文参考链接

1、搭建饥荒服务器(2024.1)by 乔梁

2、Ubuntu搭建饥荒服务器教程 by全栈程序员-用户IM

3、Ubuntu搭建饥荒服务器教程 by全栈程序员站长

4、饥荒联机版独立服务器搭建踩坑记录 by半吊子全栈开发者的日常

5、饥荒服务器搭建指北 by三分之七橙

5.5、游戏&交流

wechat:goldhbs

评论

暂无评论

发表回复