饥荒服务器配置(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
- 本地没有代理但是有相关订阅链接,推荐参考以下仓库对服务器进行代理。 https://github.com/mzz2017/gg
二、安装饥荒服务器
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
文件中所需的内容,使用方法如下:
- 从客户端找到 modoverrides.lua 文件
- 通常位于:
.klei/DoNotStarveTogether/客户端设置/Cluster_1/Master/modoverrides.lua
- 和
.klei/DoNotStarveTogether/客户端设置/Cluster_1/Caves/modoverrides.lua
- 通常位于:
- 将文件内容粘贴到dst-mod-config-converter对应的输入框,即可在线快速转换
- 点击生成按钮
- 复制生成的内容到服务器的 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 服务文件
创建服务文件:
在
/etc/systemd/system/
目录下创建一个服务文件dst_server.service
:sudo nano /etc/systemd/system/dst_server.service
填写服务配置:
将以下内容复制到文件中,修改必要的路径:
[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
说明:
User
和Group
:指定运行服务的用户和用户组(此处为root
)。WorkingDirectory
:脚本的工作目录。ExecStart
:运行boot.sh
脚本。Restart=on-failure
:在脚本失败时自动重启服务。StandardOutput
和StandardError
:将标准输出和错误日志分别写入日志文件。
保存文件并退出: 按
Ctrl+O
保存,按Ctrl+X
退出编辑器。重新加载 systemd 配置:
sudo systemctl daemon-reload
3、启动和管理服务
启动服务:
sudo systemctl start dst_server
设置开机自启:
sudo systemctl enable dst_server
查看服务状态:
sudo systemctl status dst_server
停止服务:
sudo systemctl stop dst_server
重启服务:
sudo systemctl restart dst_server
4、查看和分析日志
实时查看日志:
sudo journalctl -u dst_server -f
查看特定时间段日志:
sudo journalctl -u dst_server --since "2025-01-01 00:00:00"
查看日志文件: 如果使用
StandardOutput
和StandardError
将日志记录到文件,可以通过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