安装Don't Starve Together服务器

安装Don't Starve Together服务器

最近迷恋一群人在Don’t Starve Together开荒,把安装心得记录下来

  1. 服务器要求
    1.1 服务器在游戏暂停的时候,需要10~12%左右的标准CPU
    1.2 单层世界需要600M左右的内存
    1.3 每增加一个玩家大概需要8%左右的CPU开销
    1.4 游戏里面每个会动的生物动起来都会增加CPU开销
    1.5 服务器带宽要求很低,很低,默认配置每个玩家<100kbps
  2. 安装之大坑
    2.1 Steam很简单,可以运行在64bit的环境里面
    2.2 BUT!!! dstserver是32bit的程序,依赖32bit的依赖库!!!
    2.3 解决方案
dpkg --add-architecture i386
apt update
apt install libcurl4-gnutls-dev:i386
  1. 安装步骤
    3.1 安装依赖包
apt install lib32gcc1

3.2 创建steam用户

  • 网上的教程都是坑,默认创建的用户没有指定bash,超级超级难用,请指定bash
useradd -m steam -s /bin/bash

3.3 安装Steam

su - steam
mkdir ~/steamcmd && cd ~/steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz

3.4 安装dstserver

./steamcmd.sh
login anonymous
force_install_dir /home/steam/dstserver 
app_update 343050 validate 
quit

3.5 试运行

cd ~/dstserver/bin
./dontstarve_dedicated_server_nullrenderer

这样,就会根据默认参数,生成
~/.klei/DoNotStarveTogether/Cluster_1/ 目录及一系列文件
如果对Cluster_1这个名字不满意,可以在执行的时候加上

./dontstarve_dedicated_server_nullrenderer -cluster <MyClusterName>

3.6 配置游戏服务器
3.6.1 进入配置的目录

cd ~/.klei/DoNotStarveTogether/Cluster_1

3.6.2 部署token

vi cluster_token.txt

!!!这个文件的内容是从有效的steam安装版本通过一个什么命令获得的,网上有两个版本,具体是哪个,我忘记了!!!
文件内容大概是

pds-g^KU_u***

只有这个文件配置对了,服务器才算授权通过,可以启动
3.6.3 配置cluster.ini

[network]
cluster_name = idiot DST
cluster_intention = cooperative
cluster_description = idiot and idiots
cluster_port = 10999
cluster_password = idiot@idiot

[misc]
console_enabled = true

[gameplay]
max_players = 10
pvp = false
game_mode = endless
pause_when_empty = true

[shard]
shard_enabled = true
is_master = true
bind_ip = 0.0.0.0
cluster_key = ffxxffxx

[network] [misc] [gameplay] 网上讲解的教程一堆一堆,不展开了
这个游戏的架构设计很有意思,大致可以理解为

  • Cluster
    • Master
    • Cave1
    • Cave2

Cluster像是一个宿主机,Masters和Caves就是里面的Docker虚拟机。
[shard].shard_enabled = true时,里面启动的世界才是可以外连的世界,否则,里面启动的Master和Cave1都是独立的世界,并没有外连的能力
[shard].is_master = true时,表示服务器间的控制进程会在这台机器上启动
[shard].bind_ip 表示绑定的网卡
[shard].cluster_key = ffxxffxx,这个是配置通讯密钥,长度不限制
对比一下Master所在集群的cluster.ini

[shard]
shard_enabled = true
is_master = true
bind_ip = 0.0.0.0
cluster_key = ffxxffxx

非Master(Caves)所在服务器的cluster.ini

[shard]
shard_enabled = true
master_ip = 192.168.100.4
cluster_key = ffxxffxx

这里没有修改默认端口,默认端口是10888,Caves会主动连接192.168.100.4:10888[udp]进行服务器间通讯,玩家数据交换。
3.6.4 配置Master

cd Master
vi server.ini

文件内容

[ACCOUNT]
encode_user_path = true
is_master = true

3.6.5 配置Caves

cd Caves
vi server.ini

文件内容

[SHARD]
is_master = false
name = Caves
id = 2

[NETWORK]
server_port = 10998

[ACCOUNT]
encode_user_path = true

server_port默认是10999,Caves如果和Master在一台机器上,port必须不一样。如果在不同的机器上,是否可以一样没测试过。
默认通过./dontstarve_dedicated_server_nullrenderer生成的世界名称叫Master,如果需要生成非Master的目录结构,执行时需要带上参数

-shard Caves

则生成Caves名字的目录
!!!高能,在这里Master和Caves并不代表这个世界就是地面世界,或者地下世界,只是一个世界名字叫Master,一个世界名字叫Caves,如果你喜欢,完全可以起名God是is_master,dog是另外一个世界,God和dog互联!!!

3.6.6 这个时候启动世界应该就能成功了

cd ~/dstserver/bin
./dontstarve_dedicated_server_nullrenderer -shard Master

等个1分钟,应该就能看到成功信息。
然后可以开你的客户端进行测试

  1. 优化服务器配置
    4.1 利用systemctl 启动游戏
    创建文件/lib/systemd/system/dst.service
[Unit]
Description=Don't Starve Together Caves
After=network.target

[Service]
User=steam
Group=steam
Restart=always
Type=simple
WorkingDirectory=/home/steam/dstserver/bin
ExecStart=/home/steam/dstserver/bin/dontstarve_dedicated_server_nullrenderer -persistent_storage_root /home/steam/.klei -conf_dir DoNotStarveTogether -shard Caves
StandardOutput=null

[Install]
WantedBy=multi-user.target

然后执行

systemctl daemon-reload
systemctl enable dst
systemctl start dst

这个例子是启动的一个叫Cluster_1宿主机下面的名为Caves的世界。

4.2 Don’t Starve Together随机生成的世界一律是地面世界,需要想进洞穴,需要修改
~/.klei/DoNotStarveTogether/Cluster_1/Caves/worldgenoverride.lua文件
修改内容

preset="DST_CAVE"

所以,完全可以主世界进来就是洞穴,然后想办法找楼梯进入地面世界。。。。

4.3 Mod的配置,网上教程基本没问题,不展开了
4.4 配置Dst监控进程,可以实现微信推送通知
创建/lib/systemd/system/dstmon.service文件

[Unit]
Description=Auto Mon for [Don't Starve Together Server]
After=dst.service

[Service]
Restart=always
Type=simple
ExecStart=/bin/bash /home/steam/dstmon.sh

[Install]
WantedBy=multi-user.target

创建/home/steam/dstmon.sh

tail -fn0 /home/steam/.klei/DoNotStarveTogether/Cluster_1/Master/server_log.txt | \

while read line ; do

echo "$line" | grep "Sim paused"
if [ $? = 0 ]
then
echo "$line"
curl https://sc.ftqq.com/SCU9111T***.send?text=世界暂停了 2>/dev/null
fi

echo "$line" | grep "Sim unpaused"
if [ $? = 0 ]
then
curl https://sc.ftqq.com/SCU9111T***.send?text=世界恢复了
echo "世界恢复正常了["`date`"]"
fi

echo "$line" | grep "Client authenticated:"
if [ $? = 0 ]
then
url="https://pushbear.ftqq.com/sub?sendkey=****-8a00***"
curl \
--data-urlencode "text=玩家进入世界" \
--data-urlencode "desp=$line" \
$url 2>/dev/null
fi
done

就可以实现监控日志,然后特定信息触发特定的微信提醒。

Comments