SANSUI'S BLOG

系统外观
分类标签
RSS
Sansui 2023
All rights reserved
人活着就是为了卡卡西
2022 年 12 月 28 日

部署饥荒联机版Linux服务器

此文为 Docker 版饥荒联机版服务器在 CentOS 下的部署教程。

为什么要部署Linux服务器?因为玩到后面,只要一联机连主机都卡,闲得想试

这个中文教程讲了native steam版的安装方法,包括了Cent OS缺少的库,坑全踩了一遍写得十分详细。官方文档实在太拉,基本就是没有文档,像跨平台缺库这种事情也没有解决,没有脚本。不过教程中对于网络环境问题与mod的配置方法提得不多。

我这里使用的是Docker版本。优点是

  • 国内的云平台对于Dockerhub的加速后走内网流量,不使用公网流量下载镜像。而且国内的服务器公网下载速度堪忧。
  • Docker版本的文档写得对用户友好,易上手
  • 文件管理集中,比较方便。原版服务器的mod和存档是分开放的

也有一些在国内环境下比较要命的缺点

  • 网络环境原因,无法下载创意工坊mod。最近靠改 hosts 也不行了。
  • 如果想开代理下载,docker容器开代理(设置环境变量)非常麻烦,具体来讲
    1. 如果每次开关代理都创建一个新的容器,Steam和游戏文件的更新都得再触发一次,又消耗流量又慢
    2. 如果动态修改容器的配置文件,docker需要重启才能生效,所有docker服务都得宕机一会儿

准备

  • 一台至少2G内存的服务器
  • 使用ssh连接服务器、传输并管理文件的技能

Docker的安装

由于涉及到Docker镜像和Dockerhub加速的问题,具体安装步骤建议看docker的文档和各个云平台。

我使用的腾讯云,见安装 Docker 并配置镜像加速源,大约花费2分钟。

服务器防火墙设置

需要放行 10999,11000,12346,12347 这四个端口的UDP流量。

  • 在国内云平台的控制台-防火墙中,放行服务器的这四个端口
  • 如果服务器上iptables有流量拦截,也需要放行

饥荒服务器镜像的启动

mkdir ${HOME}/Klei # 创建存放数据有文件夹

# 拉取镜像并在前台启动
# 由于Steam要更新,根据网络环境可能要等比较久的时间
# 如果实在无法连接,再考虑给容器挂个代理下载。但总体不建议容器挂代理,因为我不清楚挂代理后steam是连接到服务器的游戏端口还是连到代理的端口上去了,取消容器的代理也非常麻烦。
docker run --name dst -v ${HOME}/Klei:/data -p 10999-11000:10999-11000/udp -p 12346-12347:12346-12347/udp -it jamesits/dst-server:latest

以上命令执行期间,可以去准备一下游戏存档和Mod相关文件。

准备游戏存档和Mod

我使用的Mac,饥荒的游戏文件相关目录位于

# 游戏存档
SAVE_DIR="~/Documents/Klei/DoNotStarveTogether/324927772/Cluster_1"
# mod下载目录
MODS_DIR="~/Library/Application Support/Steam/steamapps/common/Don't Starve Together/dontstarve_steam.app/Contents/mods" #

cd $SAVE_DIR # 进入存档目录

windows可以在饥荒游戏内点数据打开游戏存档,并在Steam中查看游戏的安装目录。

准备存档信息

点开饥荒的账号,记下 Klei User ID。如果没有就注册一个。

然后,新建adminlist.txt,并写入你的Klei User ID。

$ vim adminlist.txt
# 写入以下内容
你的Klei User ID

点开自建饥荒服务器的页面,新建一个服务器,记下生成的Server Token,其他不用管。

然后,新建 cluster_token.txt,并写入Server Token。

$ vim cluster_token.txt
# 写入以下内容
你的Server Token

准备mods

不开mod的可以跳过这一步。

由于国内环境没法下载mod,需要把对应的mod文件复制过来。我为了方便就全复制了

cp -r "$MODS_DIR" mods

先查看一下目前的存档开了哪些mod。

$ cat Master/modoverrides.lua
# 开启的mod
return {
  ["workshop-1172839635"]={ configuration_options={ icebox_freeze="0.5" }, enabled=true },
  ["workshop-1294206358"]={ configuration_options={  }, enabled=true },
}

然后,编辑 mods/dedicated_server_mods_setup.lua 文件,写入上面的mod编号

$ vim mods/dedicated_server_mods_setup.lua
# 写入以下内容
ServerModSetup("workshop-1294206358")
ServerModSetup("workshop-1595631294")

至此,游戏存档和mods就准备好了。

转移游戏存档和Mods至服务器

上传游戏存档到服务器。打包和上传文件我一般使用GUI操作,用命令行的话是这样

cd ~/Documents/Klei/DoNotStarveTogether/324927772/
tar -cvf Cluster_1.tar.gz Cluster_1 
scp Cluster_1.tar.gz root@myserver:/Klei/

如果之前的服务器连接还在,等无新日志输出后使用control+c退出容器。如果已断开连接,重新用ssh登录服务器。

然后可以看到在服务器的 ~/Klei/DoNotStarveTogether 中有了一个 Cluster_1 存档。

转移游戏存档时,需要注意有两种情况(来自文档

第一种情况是,如果自己的存档开启了洞穴,把自己的存档覆盖过去即可。

rm -rf Cluster_1
tar -xvf Cluster_1.tar.gz

第二种情况是,自己的存档没有开启洞穴,需要

  1. 在自己的电脑中,存档的上一级有个 client_save 。复制下面的除了 session 外的所有文件到服务器的 Cluster_1/save
  2. 自己存档中的 Cluster_1/save/session 需要删除,其他文件可以直接覆盖

存档覆盖完毕后,启动容器

docker start -a dst
# 如果最后输出了 Sim Pause 就代表 OK 了,按 ctrl + c 退出,容器继续后台运行

我第一次装Mod启动时发生了一个莫名其妙的 Segmentation fault,程序退出了,但是第二次启动就好了。搜了一下相关issue,完全相同的情况,也是CentOS,偶尔发生,难稳定复现。

游玩

之前自己的存档叫什么名字就搜什么名字,加入就完事,好好玩吧w


参考资料:

更新于 2022-12-28 08:00
Waline