一、安装依赖
yum install epel-release # 添加 EPEL 仓库
yum update # 更新系统
yum install libstdc++ libgcc glibc.i686 libcurl-devel zlib.i686 # 安装依赖
二、安装 SteamCMD
mkdir /root/steamcmd && cd /root/steamcmd # 创建steamcmd文件夹,并进入
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz # 下载 steamcmd 程序
tar -xvzf steamcmd_linux.tar.gz # 解压 steamcmd_linux.tar.gz 文件
./steamcmd.sh # 启动 steamcmd
三、安装饥荒联机版
steam> force_install_dir /root/dst
steam> login anonymous
steam> app_update 343050 validate
steam> quit
# 每输入一个命令进行等待,等待出现 steam> 在进行下个命令。
四、创建服务器存档
1. 在服务器中创建存档的存放文件夹,进入文件夹。
mkdir -p /root/.klei/DoNotStarveTogether/Cluster_1
cd /root/.klei/DoNotStarveTogether/Cluster_1
2. 在 Windows 上先创建地图,然后找到地图文件,上传到服务器中,没有 cluster_token.txt
文件没关系,后面会创建。
Windows里:
地图文件:C盘/用户/Administrator/文档/klei/DoNotStarveTogether/ID/Cluster_1/
服务器里:
yum install -y lrzsz # 下载文件上传工具
将 Windows 所有地图文件拖入到 XShell 窗口
3. 创建服务器 token,复制。
Klei Account:https://accounts.klei.com/account/game/servers?game=DontStarveTogether
4. 在服务器的Cluster_1文件夹下创建文件cluster_token.txt,将服务器 token 保存到文件中。
echo "token" cluster_token.txt
五、为自己添加管理员权限
1. 访问 Klei Account:https://accounts.klei.com/account/info 页面,找到自己的 klei ID
2. 创建管理员权限文件,复制 klei ID 替换到文件中
echo "klei ID" adminlist.txt
六、为服务器订阅MOD
在 /root/.klei/DoNotStarveTogether/Cluster_1/Master/modoverride.lua
中查看 Mod-ID,将Mod-ID 全部写入 /root/dst/mods/dedicated_server_mods_setup.lua
Ps:/root/.klei/DoNotStarveTogether/Cluster_1/Master/modoverride.lua就是这个地图的 MOD 配置,如果订阅了新 MOD ,一定要到这里添加配置,不然 MOD 不会生效。 Caves中也有一个modoverride.lua文件,记得一起修改。
七、创建启动脚本
cd /root/ # 切换到/root/目录下,创建脚本:
vim boot.sh
--------------------以下为脚本内容---------------------
#!/bin/bash
steamcmd_dir="/root/steamcmd"
install_dir="/root/dst"
cluster_name="Cluster_1"
dontstarve_dir="/root/.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/bin64" || fail
run_shared=(./dontstarve_dedicated_server_nullrenderer_x64)
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 u+x boot.sh # 赋予boot.sh执行权限
八、防火墙开放端口
具体需要开放的端口可以查看存档文件夹下的这几个文件
饥荒端口,UDP 协议:
/root/.klei/DoNotStarveTogether/Cluster_1/cluster.ini
中的master_port
/root/.klei/DoNotStarveTogether/Cluster_1/Master/server.ini
中的server_port
/root/.klei/DoNotStarveTogether/Cluster_1/Caves/server.ini
中的server_port
steam 端口,TCP+UDP 协议:
/root/.klei/DoNotStarveTogether/Cluster_1/Caves/server.ini
中的master_server_port
、authentication_port
在命令行执行此命令:
grep -E 'master_port|server_port|master_server_port|authentication_port' /root/.klei/DoNotStarveTogether/Cluster_1/cluster.ini /root/.klei/DoNotStarveTogether/Cluster_1/Master/server.ini /root/.klei/DoNotStarveTogether/Cluster_1/Caves/server.ini
在云服务器网站上-实例-安全组-配置规则,添加如下配置:
九、启动饥荒服务器
nohup ./boot.sh & # 后台运行,并记录输出内容
tail -100f nohup.out # 动态查看100行
能看到下面这样的输出就是启动成功了:
Caves: [00:01:21]: Received MasterInfoPacket row a4c11a8dbe3e737854e23c2a2744cf50 region ap-southeast-1
Caves: [00:01:21]: Obtaining secondary shard IP from ap-southeast-1 lobby
Caves: [00:01:22]: [Shard] secondary shard is now ready!
Caves: [00:01:22]: World 1 is now connected
Caves: [00:01:22]: [SyncWorldSettings] Sending ResyncWorldSettings.
十、编写操作脚本
【启动脚本】
vim start.sh
------------------------------------------------------
#!/bin/bash
nohup /root/boot.sh &
# 等待进程启动
echo "服务器正在启动..." && sleep 3
# 检查进程是否正在运行
if pgrep -f dontstarve_dedicated_server_nullrenderer > /dev/null
then
echo "服务器启动成功!"
else
echo "警告:服务器未能启动!"
fi
------------------------------------------------------
【停止脚本】
vim stop.sh
------------------------------------------------------
#!/bin/bash
pkill -f dontstarve_dedicated_server_nullrenderer
------------------------------------------------------
【更新脚本】
vim update.sh
---------------------------------------------------------------------------------------
#!/bin/bash
/root/steamcmd/steamcmd.sh +force_install_dir /home/dst +login anonymous +app_update 343050 validate +quit
---------------------------------------------------------------------------------------
十一、修改服务器名称和密码
服务器的名称的名称和密码在/root/.klei/DoNotStarveTogether/Cluster_1/cluster.ini
文件中,修改后重启即可
cluster_password =
xxxxxxx
cluster_name =
Elm的世界
十二、更新服务器到最新版本
每次饥荒联机版更新后都需要同步更新服务器,不同版本之间不能在一起玩,而且搜索不到房间。
这里推荐一个查询饥荒服务器的网址,如果你在这个网址上能搜到自己的服务器,但是其他人搜不到,那应该就是版本不同导致的。
饥荒网页版服务器列表:https://dst.liuyh.com/serverlist
十三、服务器卡顿可能原因排查
导致玩家在服务器上卡顿的原因有很多,比如:
1. 玩家到服务器连接不稳定
2. 服务器CPU负载过高 或 内存不足
3. 存在优化较差的MOD 或 相互不兼容
验证方式:
1. 连接是否稳定可以使用ping命令
【Windows】
Win + R,输入cmd回车,ping 服务器IP -t
C:\Users\Administrator>ping 121.36.205.101 -t
正在 Ping 121.36.205.101 具有 32 字节的数据:
来自 121.36.205.101 的回复: 字节=32 时间=19ms TTL=45
来自 121.36.205.101 的回复: 字节=32 时间=18ms TTL=45
Ctrl+C #停止
观察时间那一列是否经常会跳出一些比较大的数字,一般来说 <60ms 都是正常的。
2. 服务器性能排查,在 ubuntu/centos 系统中可以使用 top 或者 htop 命令查看服务器资源使用情况
yum install -y htop # 下载服务器状态查看工具
htop # 使用工具
3. MOD 问题
可以上传一个纯净存档(不开任何MOD)试试,如果不卡顿再一个个关掉 MOD 尝试,没啥太好的办法。