本文重现了笔者在自己的 CentOS 7 (64-bit) 系统中部署饥荒联机版服务器的全过程,供君参考。
Steam 版的饥荒联机版与 Wegame 版数据不互通,也无法相互联机。
笔者主要参考了如下两个部署教程:
安装 steamcmd
安装的步骤可以直接参考 SteamCMD 的官方文档(中文版)。
需要注意的是,SteamCMD 仅提供 32 位二进制文件。如果您的系统仅能运行 64 位进程(例如 OpenWRT 系统),将不能正常使用。
为了安全考虑,steamcmd
官方建议创建新的系统用户运行,而不是拥有最高命令权限的 root
用户。因此,首先创建一个名为 steam
的用户:
1 | # 创建 steam 用户 |
对于 64 位系统,需要安装如下的必要依赖以运行 steamcmd
:
1 | yum -y install glibc.i686 libstdc++.i686 |
切换至 steam
用户:
1 | su - steam |
安装 steamcmd
:
1 | cd ~ |
运行 steamcmd
:
1 | /home/steam/steamcmd.sh |
耐心等待更新文件下载、安装完毕……
安装饥荒联机版
安装饥荒联机版运行的必要依赖:
1 | yum -y install libcurl.i686 |
设置饥荒联机版安装目录:
1 | Steam> force_install_dir /home/steam/steamapps/DST |
匿名登录到 steamcmd
:
1 | Steam> login anonymous |
安装饥荒联机版:
1 | Steam> app_update 343050 validate |
测试饥荒联机版的运行。特别的,由于相对路径的缘故,执行 dontstarve_dedicated_server_nullrenderer
前一定要先移动到它所在的目录:
1 | cd /home/steam/steamapps/DST/bin |
如果没有其它的报错,那么打印内容大致如下:
1 | $ ./dontstarve_dedicated_server_nullrenderer |
此时,会自动创建存档目录 /home/steam/.klei/DoNotStarveTogether/Cluster_1
,如果后续不再需要可直接删除。
添加饥荒联机版服务器管理脚本
screen
命令可以用来创建独立的命令行窗口执行进程,方便对进程的管理,例如追踪运行的日志信息。笔者选用它来管理饥荒联机版服务器的进程。
1 | yum install -y screen |
首先创建存放脚本的文件夹:
1 | mkdir /home/steam/scripts |
下面开始编写管理服务器过程中最常用的两个脚本。
自动更新脚本
创建自动更新饥荒联机版的脚本 /home/steam/scripts/update_dst.sh
,编写内容如下:
1 |
|
其中 CustomSaveName
为您的存档目录名称,可自定义修改,如不配置将默认使用 Cluster_1
。
添加脚本的执行权限,后略:
1 | chmod +x /home/steam/scripts/update_dst.sh |
启动(重启)服务器脚本
创建启动(重启)饥荒联机版服务器的脚本 /home/steam/scripts/start_dst.sh
,编写内容如下:
1 |
|
脚本将自动保存服务器数据(如果不使用 c_shutdown()
而直接关闭 Screen 的话,将丢失度过黑夜前未保存的所有数据),检查并安装饥荒联机版更新包,最后重新启动服务器。
服务器启动后,执行命令 screen -r dst_master
或 screen -r dst_caves
查看日志,您会发现打印有如下内容:
1 | [00:00:05]: [200] Account Failed (6): "E_INVALID_TOKEN" |
这意味着我们最后还需要配置 Auth Token 等信息,使得服务器能正确地注册并被联机用户发现。
正式启动饥荒联机版服务器
访问 https://accounts.klei.com/account/game/servers?game=DontStarveTogether,创建一个饥荒联机版服务器并获取 Auth Token:
填写基本的配置信息:
下载设置并上传到主机,将解压后的文件放置到存档目录:
1 | unzip DST_Lolipop.zip |
最后的最后,执行前面编写的启动脚本:
1 | /home/steam/scripts/start_dst.sh |
在游戏大厅里搜索服务器,开始愉快地玩耍吧!
饥荒联机版服务器运维
添加模组
在饥荒联机版服务器添加并启用模组,需配置两部分内容。
下载模组
第一部分是告诉服务器要下载哪些模组。编辑 /home/steam/steamapps/DST/mods/dedicated_server_mods_setup.lua
,使用指令 ServerModSetup()
或 ServerModCollectionSetup()
添加需要下载的模组,例如:
1 | -- /home/steam/steamapps/DST/mods/dedicated_server_mods_setup.lua |
通过上面的配置,服务器将自动下载 Steam 创意工坊上的模组 #345692228,以及模组集合 #3286974182 中的所有模组。
由于每次执行 steamcmd.sh
命令检查游戏更新后会重置 dedicated_server_mods_setup.lua
,建议手动备份该文件,这样的话未来增删模组时可以直接复用。例如:
1 | cp dedicated_server_mods_setup.lua dedicated_server_mods_setup.temp.lua |
优化前面我们编写的更新服务器脚本 /home/steam/scripts/update_dst.sh
,在检查游戏更新之后还原备份文件:
1 | cd /home/steam |
启用模组
第二部分是告诉服务器要启用哪些模组。有两种配置方式,选择其一即可:
/home/steam/.klei/DoNotStarveTogether/CustomSaveName/Caves/modoverrides.lua
用于管理洞穴世界模组的启用与配置;/home/steam/.klei/DoNotStarveTogether/CustomSaveName/Master/modoverrides.lua
用于管理地上世界模组的启用与配置。/home/steam/steamapps/DST/mods/modsettings.lua
用于管理模组的启用。需留意的是:1)本方式通常用于模组的开发调试;2)不能对模组进行详细设置,模组将始终使用默认配置;3)使用部分模组时可能会报错,此时请切换为第一种配置方法。
笔者选用第一种配置方法,新建文件 modoverrides.lua
,编写内容如下:
1 | -- modoverrides.lua |
需注意的是,modoverrides.lua
不支持一键启用某个模组合集的所有模组,还是需要获取这些模组的编号并编写配置。
添加可执行权限并拷贝到对应目录:
1 | chmod +x modoverrides.lua |
执行脚本 /home/steam/scripts/start_dst.sh
重启服务器即可。
自定义世界
笔者建议在电脑上手动启动一个自定义好的世界,再将生成的配置文件 worldgenoverride.lua
和 leveldataoverride.lua
分别粘贴到服务器的对应文件夹里。地上世界和洞穴世界的配置文件有所区别,不要搞混喽:
/home/steam/.klei/DoNotStarveTogether/CustomSaveName/Caves/leveldataoverride.lua
/home/steam/.klei/DoNotStarveTogether/CustomSaveName/Caves/worldgenoverride.lua
/home/steam/.klei/DoNotStarveTogether/CustomSaveName/Master/leveldataoverride.lua
/home/steam/.klei/DoNotStarveTogether/CustomSaveName/Master/worldgenoverride.lua
其中,worldgenoverride.lua
是世界生成规则,修改后需要重新生成世界才能生效。
进一步配置服务器
之前步骤中下载的基本配置已足够支持正常游玩。如果还想要更深度的定制,可以参考此文档,按需修改以下三个文件:
/home/steam/.klei/DoNotStarveTogether/CustomSaveName/cluster.ini
/home/steam/.klei/DoNotStarveTogether/CustomSaveName/Caves/server.ini
/home/steam/.klei/DoNotStarveTogether/CustomSaveName/Master/server.ini
定时重启并更新服务器
可以使用 crontab
命令实现,但默认情况下,我们新建的 steam
用户是没有使用该命令的权限的,需要首先切到管理员用户添加权限:
1 | echo steam >> /etc/cron.allow |
切回 steam
用户,编辑计划任务 crontab -e
,添加如下内容:
1 | 0 6 * * * /home/steam/scripts/start_dst.sh |
上面的配置表示,在系统时间每天凌晨 6 点整,自动重启并更新饥荒联机版服务器。