本教程适用于 Ubuntu 20.04/22.04,部署 Don’t Starve Together(DST)联机版专用服务器,采用集中式目录管理结构,即服务端程序、配置文件、世界存档、MOD 均统一放在一个目录下,便于维护、备份和迁移。


📁 路径结构设定

内容路径示例
安装目录/home/youruser/Steam/steamapps/common/dst_dedicated_server
存档配置路径同上,位于 .klei/DoNotStarveTogether/Cluster_1/ 子目录中
启动脚本start.sh 位于 dst_dedicated_server 根目录下
执行用户假设为 youruser(普通非 root 用户,请替换为实际用户名)

① 安装依赖和 SteamCMD

执行以下命令安装 32 位运行环境和 SteamCMD:

sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install lib32gcc-s1 steamcmd
sudo apt remove libcurl4-gnutls-dev
sudo apt install libcurl4-gnutls-dev:i386

确认安装成功:

/usr/games/steamcmd

出现 SteamCMD 命令行界面后输入 quit 退出。


② 安装 DST 服务端

创建服务端目录并安装游戏服务端文件:

mkdir -p /home/youruser/Steam/steamapps/common/dst_dedicated_server

使用以下命令安装 DST:

/usr/games/steamcmd +force_install_dir /home/youruser/Steam/steamapps/common/dst_dedicated_server +login anonymous +app_update 343050 validate +quit

③ 上传或复制世界存档

从客户端游戏中导出的世界存档(如 Cluster_1 文件夹),应上传至以下路径:

/home/youruser/Steam/steamapps/common/dst_dedicated_server/.klei/DoNotStarveTogether/

命令示例:

mkdir -p /home/youruser/Steam/steamapps/common/dst_dedicated_server/.klei/DoNotStarveTogether
scp -r Cluster_1 youruser@server_ip:/home/youruser/Steam/steamapps/common/dst_dedicated_server/.klei/DoNotStarveTogether/

④ 添加服务器 Token

前往 Klei 游戏服务器页面 获取 token,写入:

vim /home/youruser/Steam/steamapps/common/dst_dedicated_server/.klei/DoNotStarveTogether/Cluster_1/cluster_token.txt

粘贴并保存,内容应为一行字符串。


⑤ 配置端口(关键)

编辑 cluster.ini

[SHARD]
shard_enabled = true
bind_ip = 127.0.0.1
master_ip = 127.0.0.1
master_port = 10889
cluster_key = secret_key_123

编辑 Master/server.ini

[NETWORK]
server_port = 10999

编辑 Caves/server.ini

[NETWORK]
server_port = 11000

⑥ 开放防火墙端口

如使用 UFW:

sudo ufw allow 10999/udp     # Master 世界
sudo ufw allow 11000/udp # Caves 世界
sudo ufw allow 10889/tcp # Shard 分片连接
sudo ufw allow 8767/udp # Steam大厅匹配(可选)
sudo ufw allow 27017/udp # Steam大厅匹配(可选)

查看状态:

sudo ufw status

⑦ 编写启动脚本

vim /home/youruser/Steam/steamapps/common/dst_dedicated_server/start.sh

内容如下:

#!/bin/bash

install_dir="/home/youruser/Steam/steamapps/common/dst_dedicated_server"
cluster_name="Cluster_1"
dontstarve_dir="$install_dir/.klei/DoNotStarveTogether"

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

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

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

export KLEI_SAVE_DIR="$dontstarve_dir"

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: /'

保存并授权:

chmod +x /home/youruser/Steam/steamapps/common/dst_dedicated_server/start.sh

⑧ 配置 systemd 服务

sudo vim /etc/systemd/system/dst_server.service

内容:

[Unit]
Description=Don't Starve Together Dedicated Server
After=network.target

[Service]
Type=simple
User=youruser
WorkingDirectory=/home/youruser/Steam/steamapps/common/dst_dedicated_server
ExecStart=/home/youruser/Steam/steamapps/common/dst_dedicated_server/start.sh
Restart=on-failure
RestartSec=5
Environment=KLEI_SAVE_DIR=/home/youruser/Steam/steamapps/common/dst_dedicated_server/.klei/DoNotStarveTogether

[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable dst_server
sudo systemctl start dst_server

🔍 查看运行状态

sudo systemctl status dst_server
journalctl -u dst_server -e --no-pager

✅ 总结目录结构

/home/youruser/Steam/steamapps/common/dst_dedicated_server/
├── bin/ # DST 服务端
├── mods/ # MOD目录
├── start.sh # 启动脚本
├── .klei/DoNotStarveTogether/
│ └── Cluster_1/
│ ├── cluster.ini
│ ├── cluster_token.txt
│ ├── Master/server.ini
│ └── Caves/server.ini

✅ 常见问题提醒

问题原因解决方法
服务器大厅无法搜索未开放 UDP 端口检查 10999/11000 UDP 是否开放
洞穴无法进入Caves 配置错误或端口被占用确保 server.inicluster.ini 设置正确
多个服务器冲突使用了相同端口给每个服务器分配不同端口组

这就是一份可开机自启、集中管理、能直接公网运行的 DST 服务端部署全教程(含端口配置)

Leave a Reply

Your email address will not be published. Required fields are marked *