Ubuntu 20.04 LTS,饥荒服务器对性能要求不高,建议 2G 内存,1 核 CPU,带宽 1M 以上。通过 SSH 连接到服务器后:

方案一、使用全功能脚本

脚本地址

上传脚本,给予权限chmod u+x dst.sh,按照提示运行即可。

缺陷是脚本年代久远,脚本有一些莫名奇妙的 Bug:比如容易崩档,地上无齿轮等。

方案二、Docker

地址:https://github.com/fairplay-zone/docker-dontstarvetogether

对 Docker 不太熟悉,放在这里供参考。应该非常简单

方案三、手动

相当于逐行执行脚本命令。好在命令比较简单:

安装依赖

sudo dpkg --add-architecture i386 && sudo apt update
sudo apt install libstdc++6:i386 libgcc1:i386 libcurl4-gnutls-dev:i386 wget screen # screen 是为了让脚本脚本后台运行

SteamCMD 安装

sudo apt install steamcmd 或者

mkdir ~/steamcmd # 创建所在文件夹,这个文件夹命名任意,脚本需要用到
cd ~/steamcmd # 进入
wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz # 下载
tar -xvzf steamcmd_linux.tar.gz # 解压

安装游戏

./steamcmd.sh # 会安装 steam 并进入 CMD
Steam> login anonymous 
Steam> force_install_dir ../dstserver # 指定游戏安装目录,后面脚本需要用到
Steam> app_update 343050 validate # 下载游戏,可能比较慢

完成后即可quit或 Ctrl + C 退出

Token 、创建本地存档以及上传

Klei account 处获得游戏 Token,在本地创建一个游戏存档,将获得的 Token 替换掉本地存档中的 Token

  • 将本地存档上传到 .klei/DontStarveTogether/,
  • 将使用到的 Mod上传到游戏安装目录的 mods 文件夹

本地创建存档比在线编辑方便得多,上传 mod 也省去下载

创建启动脚本

脚本示例,文件夹中的 go.sh

#!/bin/bash
steamcmd_dir="$HOME/steamcmd" # steamcmd 目录
install_dir="$HOME/dstserver" # 游戏目录
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!" # TODO
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"

./steamcmd.sh +force_install_dir "$install_dir" +login anonymous +app_update 343050 validate +quit
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: /'

假设存为 go.sh ,chmod u+x go.sh,运行一次,不成功再运行一次。

后台运行

运行:screen -S DST -d -m ~/go.sh

停止:screen -d -r DST 后 Ctrl + C

配置文件参考

cluster.ini 来自:steam 社区

重启后生效

[MISC]
max_snapshots = 
默认值: 6
快照留存最大值。每次存档会生成一个快照,用于回滚游戏。游戏默认存档动作在天刚亮的时候执行。

console_enabled = 
默认值: true
允许在游戏控制台或正在运行的server终端中输入命令

[SHARD]
shard_enabled = 
默认值: false
开启服务器分片。搭建多层世界,此配置项必须设置为true。单层世界可以忽略。
*每个cluster.ini中的设置必须一致。(见章节末尾说明)

bind_ip = 
可被server.ini的配置覆盖
默认值: 127.0.0.1
在shard_enabled = true,is_master = true时,必须配置
bind_ip指定了主服务器监听分片服务器连接请求的网络地址。当分片服务器向此地址发出连接请求后,主服务器监听到请求,自动连接其他世界。如果你的主服务器和分片服务器都在同一台机器上,此值设为127.0.0.1即可;如果在不同的机器上,此值设为0.0.0.0。此配置项只需要在主服务器端的cluster.ini或server.ini中设定。

master_ip = 
可被server.ini的配置覆盖
默认值: none
在shard_enabled = true,is_master = false时,必须配置
未配置主服务器的分片服务器,将尝试使用此IP地址连接主服务器。如果一个集群中的所有服务器都在同一机器上,将此地址设置为127.0.0.1

master_port =
可被server.ini的配置覆盖
默认值: 10888
主服务器对此UDP端口保持监听状态,未配置主服务器的分片服务器将使用此端口连接主服务器。对于所有分片服务器,应只在cluster.ini中保证唯一配置,或者直接忽略此配置项,采用默认配置。此配置项的值必须与主服务器的server_port值不同。

cluster_key =
可被server.ini的配置覆盖
默认值: none
在shard_enabled = true时,必须配置
这是从属服务器连接主服务器时,用于验证的密码。如果主从服务器运行在不同的机器上,每台机器上配置的cluster_key值需保持一致。如果主从服务器在同一机器运行,在cluster.ini中设置一次即可。
*每个cluster.ini中的设置必须一致。(见章节末尾说明)

[STEAM]
steam_group_only = false
默认值: false
如果设置为true,服务器将仅允许steam_group_id配置项中所指定steam群组的成员加入。

steam_group_id = 
默认值: 0
用于给steam_group_only / steam_group_admins指定steam群组id。
steam群组id获取方法,见本指南“常见问题”部分。

steam_group_admins = false
默认值: false
如果设置为true,指定steam群组的管理员将自动成为饥荒服务器的管理员。

[NETWORK]
offline_cluster = 
默认值: false
创建一个离线服务器。此服务器不会在公共服务器列表展示,只有本地用户可以加入,所有steam相关的功能无效。
*每个cluster.ini中的设置必须一致。(见章节末尾说明)

tick_rate = 
默认值: 15
这个值表示服务器每秒向客户端刷新状态的次数。加大这个值会使客户端响应更加精确,但同时也会增加网络通讯压力。推荐将此值保持默认值15。如果确实要更改此设定,推荐在局域网环境下进行,取能整除60的值(15,20,30)。

whitelist_slots =
默认值: 0
为白名单中的玩家预留的空位数量。要将玩家加入白名单,在whitelist.txt文件(此文件应与cluster.ini放置同一目录)中添加相对应的Klei用户id即可。
**仅主服务器有效(见章节末尾说明)

cluster_password =
默认值: none
玩家进入服务器时所输入的密码。如果不需要密码,将此项留空或忽略设置即可。

cluster_name =
服务器名称,在公共房间列表中将显示此名称。

cluster_description =
默认值: empty
服务器描述。在公共房间列表中,服务器详细信息一栏将显示设定的内容。
**仅主服务器有效(见章节末尾说明)

lan_only_cluster =
默认值: false
如果设置为true,服务器仅允许同一个局域网的玩家进入。
**仅主服务器有效(见章节末尾说明)

cluster_intention =
默认值: 取决于游戏模式选择
服务器集群的游戏风格。此配置项的功能和游戏中Host Game中选择游戏风格的功能一致。可选值有:cooperative, competitive, social, madness
**仅主服务器有效(见章节末尾说明)

autosaver_enabled =
默认值: true
如果此项设为false,游戏将不会在每天结束时自动存档。相对的,游戏会在关闭服务器时存档。通过c_save()命令手动存档依然可用。

[GAMEPLAY]
max_players = 5
默认值: 
可用同时连接服务器的玩家数量。

pvp = 
默认值: false
设置为true时,打开pvp功能

game_mode =
默认值: survival
游戏模式。此配置项的功能与Host Game中游戏模式的选项一致(生存、无尽,狂野)。可选值有:survival, endless, wilderness
*每个cluster.ini中的设置必须一致。

pause_when_empty =
默认值: false
设置为true时,当服务器中无玩家,暂停服务器时间流逝。

vote_enabled = 
默认值: true
设置为true时,打开玩家投票功能。

参考资料

  1. 官方教程贴: Don't Starve Together Dedicated Server Quick Setup Guide - Klei Entertainment Forums
  2. 英文教程:Set up a Don’t Starve Together server on Ubuntu Server 18.04 – Tony Merryfield
  3. 配置文件详解:Steam 社区 :: 指南 :: Dedicated Server配置项和命令行参数详解
  4. 中文教程(有错误):Linux上搭建饥荒联机版Don't Starve Together服务器 - 看天博客