部署饥荒联机版Linux服务器
此文为 Docker 版饥荒联机版服务器在 CentOS 下的部署教程。
为什么要部署Linux服务器?因为玩到后面,只要一联机连主机都卡,闲得想试
这个中文教程讲了native steam版的安装方法,包括了Cent OS缺少的库,坑全踩了一遍写得十分详细。官方文档实在太拉,基本就是没有文档,像跨平台缺库这种事情也没有解决,没有脚本。不过教程中对于网络环境问题与mod的配置方法提得不多。
我这里使用的是Docker版本。优点是
- 国内的云平台对于Dockerhub的加速后走内网流量,不使用公网流量下载镜像。而且国内的服务器公网下载速度堪忧。
- Docker版本的文档写得对用户友好,易上手
- 文件管理集中,比较方便。原版服务器的mod和存档是分开放的
也有一些在国内环境下比较要命的缺点
- 网络环境原因,无法下载创意工坊mod。最近靠改 hosts 也不行了。
- 如果想开代理下载,docker容器开代理(设置环境变量)非常麻烦,具体来讲
- 如果每次开关代理都创建一个新的容器,Steam和游戏文件的更新都得再触发一次,又消耗流量又慢
- 如果动态修改容器的配置文件,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
第二种情况是,自己的存档没有开启洞穴,需要
- 在自己的电脑中,存档的上一级有个
client_save
。复制下面的除了session
外的所有文件到服务器的Cluster_1/save
。 - 自己存档中的
Cluster_1/save/session
需要删除,其他文件可以直接覆盖
存档覆盖完毕后,启动容器
docker start -a dst
# 如果最后输出了 Sim Pause 就代表 OK 了,按 ctrl + c 退出,容器继续后台运行
我第一次装Mod启动时发生了一个莫名其妙的 Segmentation fault,程序退出了,但是第二次启动就好了。搜了一下相关issue,完全相同的情况,也是CentOS,偶尔发生,难稳定复现。
游玩
之前自己的存档叫什么名字就搜什么名字,加入就完事,好好玩吧w
参考资料: