饥荒服务器配置(2025/02/15更新)

  • 基于腾讯云轻量的饥荒服务器配置

  • 解决启动服务器时下载Mod提示DownloadServerMods timed out with no response from Workshop...的错误。

机器配置

主机配置

系统版本:Windows 11 23H2

服务器

腾讯云轻量级服务器

配置:2C4G

存储:SSD云硬盘 70GB

流量:600GB/月(带宽:6Mbps)

镜像:Ubuntu22.04-Docker26

推荐使用Termora进行SSH连接。

Termora is a terminal emulator and SSH client for Windows, macOS and Linux.

一、下载 steamcmd

1、安装相关依赖

安装steamcmd和饥荒服务器需要用到的依赖

sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libstdc++6 libgcc1 libcurl4-gnutls-dev:i386 lib32z1

2、安装 steamcmd

在根目录下创建 Steam 文件夹

mkdir ~/Steam && cd ~/Steam

下载 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

由于网络问题,更新可能很慢,推荐以下方式进行代理。

  • 如果你本地有开启相关代理服务,可以通过ssh隧道转发本地代理端口到服务器上,并在服务器设置代理相关环境变量。
ssh -CR 7890:localhost:7890 用户名@公网ip
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890

二、安装饥荒服务器

1、下载dst_dedicated_server

进入steamcmd后,参照以下命令输入:

steam> force_install_dir ../dontstarvetogether_dedicated_server
steam> login anonymous
steam> app_update 343050 validate
steam> quit

2、登陆方式选择

方法1:匿名登录

下载大多数游戏服务端,你可以选择匿名登录。

login anonymous

方法2:使用 Steam 帐户登录

一些服务端需要你使用一个 Steam 帐户来登录。

注意:

为了安全起见建议您创建一个服务端专用的 Steam 帐户。

一个用户同时只能在一处登录(无论是在图形界面客户端还是在 SteamCMD 登录)。

login <用户名>

下一步请输入您的密码。

如果 Steam 令牌已经在用户帐户上激活,查看你电子邮箱中的 Steam 令牌验证码并输入它。这仅仅只是第一次登录时需要(以及当你删除了 SteamCMD 用于存储登录信息文件的时候)。

如果你已经成功登录了你的帐户,你应该会看到一条消息。

三、创建服务器存档

1、创建地图

在Windows上先创建地图,然后找到地图文件上传到服务器中。

在Windows上打开饥荒联机版,在选单界面点击创建游戏对联机需要创建的世界进行配置,服务器模式选择公共,配置好密码,选择服务器设置,并勾选要使用的MOD。

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


2、拷贝地图

在服务器中创建存档的存放文件夹。

mkdir -p ~/.klei/DoNotStarveTogether/Cluster_1

在Windows中的C:\Users\{user_name}\Documents\Klei\DoNotStarveTogether文件夹下,找到你刚才创建的存档,将所有内容上传到云服务器中的/.klei/DoNotStarveTogether/Cluster_1文件夹里。


3、创建服务器token

进入科雷用户管理页面,点击导航栏中的游戏,看到饥荒后点击《饥荒:联机版》的游戏服务器,输入名称点击新增服务器,得到服务器token。

在服务器的Cluster_1目录下创建文件cluster_token.txt, 将服务器token保存到文件中。

vim cluster_token.txt
// 按i进入输入模式
// 将生成的 pds-g 开头的 token 复制进该文件
// 输入:wq保存

4、添加管理员权限

进入科雷用户管理页面,点击导航栏中的用户信息,查看自己的Klei用户ID

同样的创建管理员权限文件,复制kleiID到文件中

vim adminlist.txt
// 按i进入输入模式
// 将 Klei ID 复制进该文件
// 输入:wq保存

5、给服务器订阅mod

使用以下在线服务dst-mod-config-converter将已经创建的服务器中的modoverrides.lua文件转换为dedicated_server_mods_setup.lua文件中所需的内容,使用方法如下:

  1. 从客户端找到 modoverrides.lua 文件
    • 通常位于:.klei/DoNotStarveTogether/客户端设置/Cluster_1/Master/modoverrides.lua
    • .klei/DoNotStarveTogether/客户端设置/Cluster_1/Caves/modoverrides.lua
  2. 将文件内容粘贴到dst-mod-config-converter对应的输入框,即可在线快速转换
  3. 点击生成按钮
  4. 复制生成的内容到服务器的 dedicated_server_mods_setup.lua
cd /dontstarvetogether_dedicated_server/mods
vim dedicated_server_mods_setup.lua
// 按i进入输入模式
// 将生成的内容复制进该文件
// 输入:wq保存

6、编写启动脚本

回到根目录,创建boot.sh文件

cd ~
vim boot.sh

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

#!/bin/bash

# steamcmd路径
steamcmd_dir="$HOME/Steam"
# 饥荒联机版安装路径
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: /'

脚本中默认启动的是32位服务器,如果想启动64位服务,只需要更改这两行。

# 32bit
cd "$install_dir/bin" || fail
run_shared=(./dontstarve_dedicated_server_nullrenderer)
# 64bit
cd "$install_dir/bin64" || fail
run_shared=(./dontstarve_dedicated_server_nullrenderer_x64)

赋予boot.sh执行权限

sudo chmod u+x boot.sh

到这里,饥荒服务器的部署就全部完成了,接下来还要开放端口以供其他人访问。

四、开放端口

具体需要开放的端口可以查看存档文件夹下的这几个文件

# 饥荒端口,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

注意开放的协议,饥荒端口都是UDP协议,steam的保险起见两种协议都开。

五、启动饥荒服务器

到根目录,也就是boot.sh所在的目录,运行下面的代码

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

执行后饥荒服务器会在后台运行,可以通过下面这个命令查看输出的日志

tail -f root.log

此时服务器在下载Mod时,日志可能出现DownloadServerMods timed out with no response from Workshop...的错误,请按照以下方式替换steamclient.so文件。

将/dontstarvetogether_dedicated_server/linux64文件夹下的steamclient.so复制到/dontstarvetogether_dedicated_server/bin64/lib64文件夹。

cp ~/dontstarvetogether_dedicated_server/linux64/steamclient.so ~/dontstarvetogether_dedicated_server//bin64/lib64/steamclient.so

再次重新启动服务器,mod可以正常下载了。

六、关闭服务器

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

ps -ef | grep don
kill [pid]

七、使用 systemd 管理饥荒服务器启动脚本(可选)

基于此前的boot.sh 脚本,使用 systemd 管理饥荒服务器的完整配置和操作指南。


1、准备工作

  • 确保脚本路径:

    确认您的 boot.sh文件位于 /root/boot.sh,并且该脚本有执行权限。

    chmod +x /root/boot.sh
    
  • 修改boot.sh文件

    在脚本顶部添加trap 'kill $(jobs -p)' SIGINT SIGTERM

    在脚本末尾添加 wait 命令,确保脚本运行时,主脚本不会在后台子进程还未退出时直接终止

    最终bash.sh文件如下:

    #!/bin/bash
    
    # steamcmd路径
    steamcmd_dir="$HOME/Steam"
    # 饥荒联机版安装路径
    install_dir="$HOME/dontstarvetogether_dedicated_server"
    cluster_name="Cluster_1"
    dontstarve_dir="$HOME/.klei/DoNotStarveTogether"
    
    # 在 boot.sh 中捕获终止信号,并确保所有子进程在停止时被正确清理
    trap 'kill $(jobs -p)' SIGINT SIGTERM
    
    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: /'
    wait
    
  • 创建日志目录:

    如果您的 boot.sh没有指定日志文件路径,建议设置一个日志目录,例如:

    mkdir -p /root/logs
    

2、创建 systemd 服务文件

  1. 创建服务文件:

    /etc/systemd/system/ 目录下创建一个服务文件 dst_server.service

    sudo nano /etc/systemd/system/dst_server.service
    
  2. 填写服务配置:

    将以下内容复制到文件中,修改必要的路径:

    [Unit]
    Description=Don't Starve Together Dedicated Server
    After=network.target
    
    [Service]
    User=root
    Group=root
    WorkingDirectory=/root
    ExecStart=/root/boot.sh
    ExecStop=/bin/kill -TERM $MAINPID
    KillMode=control-group
    Restart=on-failure
    RestartSec=5s
    StandardOutput=append:/root/logs/dst_server.log
    StandardError=append:/root/logs/dst_server_error.log
    
    [Install]
    WantedBy=multi-user.target
    

    说明:

    • UserGroup:指定运行服务的用户和用户组(此处为 root)。
    • WorkingDirectory:脚本的工作目录。
    • ExecStart:运行 boot.sh 脚本。
    • Restart=on-failure:在脚本失败时自动重启服务。
    • StandardOutputStandardError:将标准输出和错误日志分别写入日志文件。
  3. 保存文件并退出:Ctrl+O 保存,按 Ctrl+X 退出编辑器。

  4. 重新加载 systemd 配置:

    sudo systemctl daemon-reload
    

3、启动和管理服务

  1. 启动服务:

    sudo systemctl start dst_server
    
  2. 设置开机自启:

    sudo systemctl enable dst_server
    
  3. 查看服务状态:

    sudo systemctl status dst_server
    
  4. 停止服务:

    sudo systemctl stop dst_server
    
  5. 重启服务:

    sudo systemctl restart dst_server
    

4、查看和分析日志

  1. 实时查看日志:

    sudo journalctl -u dst_server -f
    
  2. 查看特定时间段日志:

    sudo journalctl -u dst_server --since "2025-01-01 00:00:00"
    
  3. 查看日志文件: 如果使用 StandardOutputStandardError 将日志记录到文件,可以通过 tail 查看:

    tail -f /root/logs/dst_server.log
    

5、注意事项

  • 确保 steam 用户对 /root/boot.sh 和日志目录具有读写权限。

  • 如果修改了 dst_server.service文件内容,记得重新加载 systemd配置:

    sudo systemctl daemon-reload
    
  • 如果服务无法正常启动,检查日志文件或运行以下命令查看错误:

    sudo journalctl -u dst_server
    

八、开启 swap 虚拟内存(可选)

如果Mod开启数量较多导致服务器内存溢出,可以考虑开启虚拟内存缓解内存压力。 推荐开启大小为你的服务器内存大小。

1、Swap 配置方法

假设你要创建 4G Swap

sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile sudo mkswap /swapfile
sudo swapon /swapfile 
echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab`

检查 Swap 是否生效:

free -h swapon --show

2、Swap 优化

如果 Swap 频繁被使用,可能需要优化 swappiness 值:

sudo sysctl vm.swappiness=10 echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf

这样能降低 Swap 频繁使用,提高系统性能。


相关链接

https://developer.valvesoftware.com/wiki/Zh/SteamCMD

https://zhuanlan.zhihu.com/p/625645476

https://accounts.klei.com/account/info

https://github.com/ACAne0320/dst-mod-config-converter

https://github.com/TermoraDev/termora

https://github.com/mzz2017/gg

https://dst-mod-config-converter.vercel.app

https://tieba.baidu.com/p/9251408506