前言

这周Klei家打折,手一抖就把饥荒联机版(Don’t Starve Together)和两个DLC一起打包买回家了(剁手!)。联机版最大的玩点就是可以和很多人一起玩,而且可以自己搭建服务器。想着前一段时间买的腾讯云服务器(继续剁手!)也算闲置在那里,就干脆闲置利用起来吧。
Don't Starve Together

搭建

实际上,Klie的文档还是写的非常非常详细的,不过只有纯英文的文档,这可能吓退了一部分人。如果真的认真去看了,就会发现英文文档都是比较简单的英语,图片也配的很详细,看懂无压力。
这里我有点懒,哪天有空再翻译吧,所以就直接贴出文档地址:How to setup dedicated server with cave on Linux

搭建注意点

1、游戏的主体文件是在你安装的目录里的。世界的搭建,配置还有数据是在运行游戏的账户下面的,比如你的游戏运行账户是dst,那所有的数据都在 /home/dst/.klei/DoNotStarveTogether 里面。知道这点很重要。

2、因为第一点的原因,所以强烈推荐根据官方文档里的步骤,创建一个非root组的账户。然后剩余所有的操作全都在这个用户里进行操作。这个是非常重要的,第一遍看文档的时候没注意到用户的切换,还有脚本会重置服务器mod配置文件(后面会说到),导致了一直失败。后来耐心重读了一遍文档,才发现问题所在。

3、创建的账户,密码最好弄强一点。不要是账号是dst,密码也是dst。太容易被黑客扫描出来了。

4、我用的是腾讯云服务器,加了安全组。 饥荒联机版默认使用的是UDP 10999端口。如果有类似安全组里的设置,配置一下就好。

5、推荐配置里,默认游戏模式的是生存(survival)。如果是纯新手的话,推荐改为无尽(endless)模式吧。高玩略过这条~

配置服务器Mod

官方依然有非常详细的文档,当然依然是纯英文的,并且依然也是很容易看得懂的英文。文档地址:How to install,configure and update mods on Dedicated Server

配置服务器Mod注意点

如果你是按照官方文档搭建和配置的,会有一个update.sh脚本。这个脚本的作用是更新游戏,并且校验游戏,然后重启游戏。我反复确认了这个脚本,最终确定:如果执行脚本,其中的校验命令,会导致配置服务器Mod文件dedicated_server_mods_setup.lua被重置。

1
2
3
4
5
6
7
8
9
# /home/dst/server_dst/bin/update.sh
# update of server
screen -dr dst_server1 -X quit
screen -dr dst_server2 -X quit
cd /home/dst
./steamcmd.sh +login anonymous +force_install_dir /home/dst/server_dst +app_update 343050 validate +quit
sleep 10
sh /home/dst/server_dst/bin/restart.sh
sh /home/dst/server_dst/bin/restart2.sh

最后思考了下,决定把脚本里的validate参数给移除了,让游戏直接更新,不校验,然后重启。运行了一周也没啥问题,所以就这样处理了吧。

个人使用到的服务器Mod

无Mod,不饥荒。搭建和玩的过程中,发现和使用一些mod,这部分内容纯属个人分享。有兴趣的话,可以把以下内容选择性的或者全部直接拷贝到 /home/dst/server_dst/mods/dedicated_server_mods_setup.lua 文件中。有推荐的Mod的话,欢迎留言分享哦~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
--#Global Position 全地图定位
ServerModSetup("378160973")

--#Ancient Altar 古代祭坛
ServerModSetup("481765222")

--#Health Info 健康信息
ServerModSetup("375859599")

--#Fast Travel 快速旅行
ServerModSetup("458587300")

--#Chinese package
ServerModSetup("1301033176")

--#A Big Bag 大背包,需要科技解锁
ServerModSetup("810443397")

--#Geometric Placement 种植时候可以比较方正
ServerModSetup("351325790")

--#No Thermal Stone Durability 热能石永不损耗
ServerModSetup("466732225")

--#Display Food Values 显示食物的作用
ServerModSetup("347079953")

--#Increased Stack size 多堆叠
ServerModSetup("374550642")

--#Wormhole Marks 虫洞标记
ServerModSetup("362175979")

--# Inventory Slots 45格背包
ServerModSetup("786556008")

--# Restart 重置
ServerModSetup("462434129")

--# 简易血条DST
ServerModSetup("1207269058")

--# Gesture Wheel 表情动作 G启动
ServerModSetup("352373173")

--#移动盒子(一个科学机器,3莎草纸和1蜘蛛网)
ServerModSetup("1079538195")

--#DST Storm Cellar 地窖
ServerModSetup("382177939")


--------------------------------------
--#Syelza
ServerModSetup("804317397")

--#wukong
ServerModSetup("666132449")

--#莉可
ServerModSetup("1181077385")

--#娜娜奇 人物Mod
ServerModSetup("1166220990")

--#空字辈三人组
ServerModSetup("1313109978")

--#WhaRang
ServerModSetup("1108032281")

--#Waenerys
ServerModSetup("1121561312")

--#Sona (League of Legends)
ServerModSetup("871006604")

--#Rem (Re Zero)
ServerModSetup("907441365")

--#Charlie: Stranger Newer Powers
ServerModSetup("1203081846")

运维游戏

一、游戏运行
运行了一周,发现每当饥荒更新,我搭建的服务器就找不到了。目前也没啥好办法,利用更新脚本,更新重启一下世界就好了。

二、游戏备份
一开始不懂生存模式和无尽模式的区别,默认配置了为生存。结果玩了一晚上之后,世界被默认重置了 - -。 后来排查日志,也没发现特别的东西,只是发现有人凌晨5点上线了。推测是他上线死亡了,然后下线了,世界里没有活人,120秒之后就被重置了!!
经过这件事之后,也意识到了,如果服务器出问题或者世界被恶意破坏,那就非常难过了。所以要怎么存档和备份数据呢?我的处理方式大致过程如下:

1、确定存档文件的位置。
如果你是按照官方教程操作的,那么所有的存档文件都在 /home/dst/.klei/DoNotStarveTogether 目录下,也就是你所使用的用户的 .klei/DoNotStarveTogether 目录下。

2、定期备份存档文件。
存档文件还是不大的,所以我选择了每小时定时备份,备份7天的数据。然后存到其他位置。脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/sh

#创建临时文件夹
mkdir /tmp/backup_dst

#复制文档到tmp文件夹
cp -r /home/dst/.klei/DoNotStarveTogether/MyDediServer /tmp/backup_dst

#根据时间创建压缩文件
tar -zcvf /home/dst/.klei/DoNotStarveTogether/back_MyDediServer/bak_$(date +%Y-%m-%d_%k).tar.gz /tmp/backup_dst

#移除临时文件件
rm -rf /tmp/backup_dst

#移除超过7天的备份压缩包
find /home/dst/.klei/DoNotStarveTogether/back_MyDediServer -mtime +7 -name "*.tar.gz" -exec rm -rf {} \;

然后配置一个crontab定时任务,每小时执行一次就好了。

3、定期备份到外部存储(腾讯云文件存储)。
上面的脚本只是备份到服务器里,万一哪天系统被搞崩了,数据还是丢。所以我利用腾讯云的文件存储,挂载了一个免费10G大小的外部存储。然后利用脚本再备份一份。我的外部存储挂载目录是/local,脚本如下:

1
2
3
4
5
#备份文件
cp /home/dst/.klei/DoNotStarveTogether/back_MyDediServer/bak_$(date +%Y-%m-%d_%H).tar.gz /local/dst_bak

#移除超过14天的备份压缩包
find /local/dst_bak -mtime +14 -name "*.tar.gz" -exec rm -rf {} \;

这里我偷了个懒,这个脚本是必须要在上一个脚本执行完之后才可以执行的,因为直接利用时间生成的压缩文件,直接copy的。不推荐这样做,毕竟这样依赖是不好的。不过我也懒得搞了,就这样吧 - -。

4、硬盘快照(腾讯云定期快照)
万一服务器被人家黑了(哪里那么多万一哦,小破服务器谁搞你呢 - -。),删除了整个系统,利用快照也能救回来。默认账户是只有手动快照的,定期快照开工单申请一下就好了,秒开。开启以后,直接每天定时快照就好了。
这样应该万无一失了吧 - -。

恢复备份

没写成一键脚本,需要手动一步步操作。大致过程如下:

1、停止正在运行的服务
进入两个creen,然后control+c停止就好了

1
2
3
#停止服务器:两个screen
screen -r dst_server1
screen -r dst_server2

2、备份目前现有的存档,通过指定的备份文件还原

1
2
3
4
5
6
7
8
#备份服务器
mv /home/dst/.klei/DoNotStarveTogether/MyDediServer/ /home/dst/.klei/DoNotStarveTogether/MyDediServer_tmp

#解压备份文件
tar -xzvf /home/dst/.klei/DoNotStarveTogether/back_MyDediServer/bak_2018-06-21_14.tar.gz

#移动文件
mv /home/dst/.klei/DoNotStarveTogether/back_MyDediServer/tmp/backup_dst/MyDediServer/ /home/dst/.klei/DoNotStarveTogether/

3、重启服务

1
2
sh /home/dst/server_dst/bin/restart.sh 
sh /home/dst/server_dst/bin/restart2.sh

4、清理残留

1
2
rm -rf /home/dst/.klei/DoNotStarveTogether/MyDediServer_tmp
rm -rf /home/dst/.klei/DoNotStarveTogether/back_MyDediServer/tmp

常用的脚本

1、查看游戏运行日志

1
2
3
4
5
# Master运行日志
tail -f /home/dst/.klei/DoNotStarveTogether/MyDediServer/Master/server_log.txt

# 洞穴运行日志
tail -f /home/dst/.klei/DoNotStarveTogether/MyDediServer/Caves/server_log.txt

2、更新、重启脚本

1
2
3
4
更新脚本  sh /home/dst/server_dst/bin/update.sh

重启脚本 sh /home/dst/server_dst/bin/restart.sh
重启脚本2 sh /home/dst/server_dst/bin/restart2.sh

饥荒游戏群

欢迎加入😏~
QQ Group: 0x2f9f24e9 (Hexadecimal)