ubuntu搭建饥荒专用服务器教程

本文最后更新于:2024年6月16日 下午

 

游戏:饥荒联机版(Steam)

测试服务器:Ubuntu22.04 2核2G内存 3M带宽(京东云)

本次搭建是在完全纯净的ubuntu22.04系统上进行的,所以如果您保持一致,按照步骤即可搭建。

本文主要讲解搭建饥荒服务器,为了文章不臃肿,如何ssh连接远程服务器请自行前往浏览器或者b站学习,一般都有十分方便的软件。

本文中有不少链接,如果您对某一部分(例如steamcmd或者tmux)困惑或者感兴趣可以点击跳转,但是可能由于版本老旧存在问题,请勿盲目相信任何文章,例如steamcmd链接内容全面但是在安装方面lib32gcc1已经弃用但是文章未更新。

!!由于steamcmd目前需要32位依赖,本次搭建需要添加i386架构,如果服务器用于重要业务,请谨慎操作!!

 

一、服务器配置

由于我只测试了 2核2G内存3M带宽 服务器配置,所以在配置选择方面我主要是根据在本服务器上的体验和其他教程博客得到的估计总结,如果您想知道您需求下的准确配置,可以私信询问b站的各位饥荒区up主。

我采用 2核2G内存3M带宽 配置,地面大小为中,洞穴大小为中,添加了八个史诗血量,Show Me,全球定位等辅助型mod,未添加大型内容方面的mod。

当服务器中人数为3人时,服务器性能显示大多为黄色,有时为绿色,网络大多数时候均为绿色,偶尔有一人为黄色,整体体验有时会有点点小卡顿,但是并不特别影响游戏体验。3人时内存使用率为**80%,cpu使用率为60%**。

但是本次测试只运行到第一个冬季初,后期可能内存占用率等会上升。因此,对于想要不添加许多大型mod或者只有五六人的小型服务器,推荐配置 2核4G内存 (618京东云价格在250左右一年)。

二、搭建

1.安装 steamcmd

steamcmd 是一个命令行版本的 Steam 客户端。它的主要用途是在一个命令行界面的 Steam 客户端上安装及更新各种可用的专用服务端。

通过ssh连接服务器后,在服务器终端以root身份执行以下命令(# 带头的都是注释,不是要执行的命令):

 sudo add-apt-repository multiverse
 sudo dpkg --add-architecture i386
 sudo apt update
 sudo apt install lib32gcc-s1 steamcmd 
# 如果您的服务器是64位,先要按照上述指令添加 multiverse
# 如果是32位直接sudo apt update后sudo apt install steamcmd 
# 此时可能会要求你输入密码,如果发现输入时终端无显示请不要慌张,这是正常的,为了保护密码的内容和长度信息
# 中间出现红色页面,ok和选择agree回车即可

sudo apt remove libcurl4-gnutls-dev
sudo apt install libcurl4-gnutls-dev:i386
# 因为两个包存在冲突,如果您已经下载libcurl4-gnutls-dev需要卸载安装i386版本

/usr/games/steamcmd
# 这会花费一段时间安装

出现以下内容便说明安装好了

image-20240616114059249

2.安装 dontstarvetogether_dedicated_server

在steamcmd中运行以下命令,如果您已经退出,在终端执行 steamcmd 即可进入:

login anonymous
# 此为匿名登录,可能会因为网络问题出现失败(国内裸连steam抽风是正常的),你可以在服务器上设置代理,也可以多试几次(我试了两次就登上了)

force_install_dir ./dontstarvetogether_dedicated_server

app_update 343050 validate
# 安装,这会花费一段时间,请耐心等待
# 安装过程中可能出现 Error! App '343050' state is 0x402 after update job. 错误
# 这是网络不稳定,磁盘大小不足,缓存不足等多种问题导致的
# 如果是网络不稳定,可以重新执行该命令或者退出steamcmd后重新进入重新按序执行

quit
# 安装完成后退出steamcmd

目前饥荒服务器底层部分安装完毕,相当于打好了地基

3.导入地图配置

  1. 在创建游戏创建一个新世界(配置什么的按你正常玩来)

 

  1. 在成功进入游戏后退出,在文件管理系统中找到该地图存档的文件夹,如果这个存档是第一个创建的文件夹名就是 Cluster_1 ,第二个就是 Cluster_2 ,以此类推。

如果你的电脑有全局搜索工具,搜对应的文件夹名称即可,我的是ubuntu系统,文件夹在 ~/.kelei/DoNotStarveTogether/1231618362/

image-20240616125015816

  1. 将找到的 Cluster_n 这个文件夹通过 SFTP 等方法上传至服务器
mkdir -p ~/.klei/DoNotStarveTogether
# 创建~/.klei/DoNotStarveTogether文件夹

cp -R Cluster_1/ ~/.klei/DoNotStarveTogether
# 将上传的Cluster_1文件夹拷贝一份到~/.klei/DoNotStarveTogether文件夹下
  1. 在饥荒游戏主界面点击左下角的 帐号 ,进入 Klei Account 界面后点击上方栏中的 游戏

image-20240616125709025

点击 《饥荒:联机版》的游戏服务器 按钮,复制服务器的序列号(如果没有请先添加新服务器)

  1. 添加序列号
cd ~/.klei/DoNotStarveTogether/Cluster_1
# 进入你上传的Cluster文件夹,~/.klei/DoNotStarveTogether/Cluster_1替换为你自己的文件夹位置

vim cluster_token.txt
# 这是通过vim编辑器编辑cluster_token.txt文件,如果没有会自动创建
# 如果报错说没有安装vim,就执行 sudo apt install vim 安装,也可使用其他文本编辑器

# 此时你进入了一个新的界面,若不熟悉vim请勿乱动
# 1.如果你鼠标右键有Paste或者粘贴等字样请直接将序列号粘贴
# 2.若没有,请按a(注意是否大写锁定!!)进入编辑模式,然后像正常文本编辑器一样将你的序列号手动输入,完成后按 Esc 退出编辑模式

# 至此,你的第一行应该是一串序列号
# 键盘输入 :wq 这三个字符然后回车,保存文件并退出至终端

ps:如果序列号是从玩家a复制的,那么玩家a就默认是管理员

  1. 编写执行脚本
cd
# 返回主文件夹

vim start.sh
# 创建并编辑start.sh文件

以下是 start.sh 文件中的内容,您要注意的只是最前面的四个赋值语句

steamcmd_dir steamcmd可执行文件所在的位置

install_dir 安装dontstarvetogether_dedicated_server的位置

cluster_name 保存地图内容的文件夹名

dontstarve_dir 保存地图内容的文件夹的保存位置,即 parent_path

如果不知道位置,可以用 find / -name "file_or_dir_name" 搜索

#!/bin/bash

steamcmd_dir="/usr/games/steamcmd"
install_dir="/root/.local/share/Steam/steamcmd/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: /'

保存退出后执行

sudo chmod -R 777 /root/.local/share/Steam/steamcmd/dontstarvetogether_dedicated_server
sudo chmod 777 start.sh
# 更改文件权限

此时,你若在终端执行 ./start.sh ,即运行 start.sh 脚本,待加载完毕,你就可以在大厅搜索到你的房间了!!!!

但是,还是不够的,因为你会发现房间是纯净档,mod不见了?!并且当你关闭ssh连接,运行的脚本会被强制中断!!服务器将断开连接!!

同时,如何添加管理员?如何设置白名单?如何禁止投票?

别急,都会在后文讲到

三、添加mod

如果你创建时勾选了mod,在 Cluster_n 文件夹(就是上文上传的那个文件夹)的 Master 文件夹下有个 modoverrides.lua 文件,其中内容类似:

return {
  ["workshop-1185229307"]={
    ["configuration_options"]={
      ["CAMERA"]=true,
      ["DAMAGE_NUMBERS"]=true,
      ["DAMAGE_RESISTANCE"]=true,
      ["FRAME_PHASES"]=true,
      ["GLOBAL"]=false,
      ["GLOBAL_NUMBERS"]=false,
      ["HEADER_CLIENT"]=false,
      ["HEADER_SERVER"]=false,
      ["HORIZONTAL_OFFSET"]=0,
      ["TAG"]="EPIC",
      ["TRANSLATOR"]=false,
      ["WETNESS_METER"]=false 
    },
    ["enabled"]=true 
  },
  ["workshop-1418746242"]={
    ["configuration_options"]={ ["clearfont"]=true, ["eventplus"]=true, ["extratrans"]=true },
    ["enabled"]=true 
  }
}

这个是你勾选的mod的配置文件,例如第一个 workshop-1185229307 ,实际就是史诗血量mod,而 1185229307 就是该mod的ID号。

接下来 ,将进行添加mod操作:

# 首先,如果你还在运行start.sh脚本,请 Ctrl+c 中止
cd /root/.local/share/Steam/steamcmd/dontstarvetogether_dedicated_server/mods

vim dedicated_server_mods_setup.lua
# 此时打住,先别动
# 阅读文件中的注释就知道,我们需要ServerModSetup或ServerModCollectionSetup函数来初始化我们的mod,即告诉服务器应该下载哪些mod,前者用于初始化单个mod,后者用于合集

接下来,打开你本地电脑的记事本,新建一个txt文件,对照着你的modoverrides.lua内容,一行一个ServerModSetup函数,函数内为mod的ID号。

比如我上文的lua内容,我的txt文件内容应该为:

ServerModSetup("1185229307")
ServerModSetup("1418746242")

lua中有两个mod,我勾选了两个mod,那么这就是两个ServerModSetup函数。

接着,复制txt文件内容,粘贴至刚刚打开的dedicated_server_mods_setup.lua文件

形如:

image-20240616165324100

接着同样的,按 :wq 回车 保存退出

此时,若再去运行start.sh脚本,等待加载(由于要下载mod这次加载时间会较长),大厅搜索发现房间的mod加上了!

如果出现显示mod只有部分,那是因为下载mod失败(依旧是网络问题。。),重新运行脚本即可(一次不行就多几次),下载好了以后运行就不用这么麻烦了。

四、后台运行

还有一个困扰,如果我们关闭ssh连接,由于终端被关闭,运行在终端的start.sh脚本也被杀死,服务器强行退出。但是我们总不能一直连着ssh吧?为此,我们可以采用 tmux 这一命令行工具实现脚本的后台运行。(只要能后台运行即可,tmux使用方便,所以用它)

sudo apt update
sudo apt install tmux
# 如果未安装先安装tmux

tmux new -s game_server
# 创建一个session,game_server是session的名字,可自取,最好英文

# 接下来你会进入一个新终端(运行在背景的终端)
# 在该终端下启动start.sh脚本
# 检查没有问题后先按 ctrl+b 后按 d 退出这个终端(实际上是隐藏,它依旧在运行)
# 此时,你若断开ssh连接,服务器依旧运行!

tmux更多内容

五、额外配置

更改以下配置最好先终止脚本,关闭服务器

1.用户Id

在配置之前,我们先了解如何获得Klei用户ID

在饥荒联机版游戏中,点击左下角 帐号 ,点击 弹出窗口上方 用户信息 ,你就可以看到你的 Klei用户ID

2.管理员

cd ~/.klei/DoNotStarveTogether/Cluster_1
# 来到Cluster_1文件夹

vim adminlist.txt
# 创建或编辑adminlist.txt文件

# 将所有管理员的Klei用户ID粘贴进去,一行一个

# 保存退出

3.白名单

我开了一个服务器,有6个位置,但是每次我自己都挤不进去,这时就需要白名单

打开 Cluster_n 下的 cluster.ini 文件,这个就是该档的基础配置文件,内容大致如下:

[GAMEPLAY]
game_mode = survival //endless无尽模式 survival生存 wilderness荒野
max_players = 6 //人数
pvp = false //PVP玩家互怼,true开,false关
pause_when_empty = true //没人的时候暂停,true开,false关


[NETWORK]
cluster_description = abababa //服务器描述
cluster_name = 某某某的世界 //服务器名字
cluster_intention = cooperative //服务器分类,默认可以不用修改
cluster_password = 123 // 服务器进入密码


[MISC]
console_enabled = true //服务器能否使用控制台,true开,false关


[SHARD]
shard_enabled = true //启用分层世界,true开,false关默认即可,关闭不可用洞穴
bind_ip = 127.0.0.1 //分层世界绑定连接地址,默认即可
master_ip = 127.0.0.1 //分层世界主世界地址,默认即可
master_port = 10889 //分层世界连接端口,可根据你有几个世界修改
cluster_key = supersecretkey //分层世界相互连接的密码,这个一定得改,改成自己的

NETWORK 部分加入以下内容:

whitelist_slots= 1 //白名单功能 设置成2 就是留2个位置,3就是留3个位置

保存退出后,创建 whitelist.txt 文件,和管理员一样,你想给谁预留位置就一人一行他的科雷Id。

4.禁止投票

cluster.ini 文件的 GAMEPLAY 部分添加:

vote_enabled = false //投票功能,true开,false关

 

 

至此,便是Ubuntu服务器搭建饥荒联机服务器的全部内容了,祝大家游戏愉快,欢迎指正和补充讨论!

 

参考文章:

教你用Ubuntu快速搭建饥荒服务器

饥荒服务器配置