饥荒linux服务器搭建教程

0. 说明

建Steam版饥荒的服务器主要可以解决两个问题:

  1. Steam版国内非局域网情况下联机延迟超高
  2. 建世界玩家不在时,其他朋友就玩不了

为解决第一个延迟高的问题,个人尝试了用 steam 自带 windows 版 Don’t Starve Together Dedicated Server 在本地搭建服务器。但发现非局域网的朋友联机延迟依旧很高,没有太明显效果。

后尝试用带公网 IP 的服务器搭建,才解决了延迟的问题。

讲道理如果有带公网 IP 的 windows 服务器,则可以直接安装 steam 直接用 Don’t Starve Together Dedicated Server,操作更简单一点。不过 windows 版服务器一般需要要求更高的服务器配置,没有 Linux 的性价比高。

1. 系统环境

个人也是查阅了一些网上的饥荒搭建教程,失败了很多次。踩坑后发现用 debian、ubuntu 都会有一些问题(应该也能解决,但个人还没研究出解决方法),如果图省事可以直接用 centos7 系统,个人尝试下来很顺利,没有问题。

如果服务器系统本身不是 centos 7,又不希望重装系统,可以装 docker (类似虚拟机),并建一个基于 centos:7 镜像的容器也行。个人是用的 docker。

这里讲一讲 docker 的使用方式,本就是 centos7 系统的可以跳过,直接看 2.服务器安装

docker 安装方法见:https://pangruitao.com/post/4226

docker 安装完毕后创建 centos:7 容器的命令如下:

docker run --name mydst -dit \
        -p 10999:10999/udp \
        -p 10998:10998/udp \
        -p 10888:10888/udp \
        -p 10888:10888/tcp \
        -v /ppfiles/mydst/mycluster:/home/dstsave/dst/World1/ \
        centos:7 /sbin/init

命令说明:

  • -p 10999:10999/udp -p 10998:10998/udp -p 10888:10888/udp -p 10888:10888/tcp 设置容器对外开放10999、10998、10888三个端口,之后会用于饥荒服务器使用,其中10999为主世界端口,10998为洞穴端口,10888为洞穴连主世界时用的端口。这些端口需要和之后世界的设置一致。同时需要保证这些端口在服务器上是开放的。
  • -v /ppfiles/mydst/mycluster:/home/dstsave/dst/World1/ 指定容器外世界目录和容器内的世界目录对应关系 ,前面这部分(/ppfiles/mydst/mycluster)可以自行修改,如果有修改则后续传文件也传到修改后的目录下即可

创建完后进入容器,用命令:

docker exec -it mydst bash
命令行前缀(用户)有变化,通常意味着成功进入了

2. 服务器安装

依次运行以下命令:

yum -y update

yum -y install glibc.i686 libstdc++.i686 libcurl4-gnutls-dev.i686 libcurl.i686 screen wget

cd /home && mkdir steamcmd && cd steamcmd

wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz

tar -xvzf steamcmd_linux.tar.gz

./steamcmd.sh

正常的话,如上图前缀变为 Steam>,则成功打开 steam

再依次运行以下内容:

force_install_dir /home/dstserver

login anonymous

app_update 343050 validate

运行后会自动安装steam版饥荒服务器

待安装完毕后,前缀会重新变成 Steam>

输入 exit 退出 steam:

exit

依次运行以下命令:

ln -s /usr/lib/libcurl.so.4 /home/dstserver/bin/lib32/libcurl-gnutls.so.4

cd /home/dstserver/bin

echo "./dontstarve_dedicated_server_nullrenderer -console -persistent_storage_root /home/dstsave -conf_dir dst -cluster World1 -shard Master" > master_start.sh

echo "./dontstarve_dedicated_server_nullrenderer -console -persistent_storage_root /home/dstsave -conf_dir dst -cluster World1 -shard Caves" > cave_start.sh

chmod +x master_start.sh cave_start.sh

顺利的话,则完成了初步配置

试启动一下服务器,运行:

./master_start.sh

等跑了一堆命令后,顺利的话应可以看到明显的 Your Server Will Not Start 提示。这代表一切正常,但是由于我们还没有对世界进行配置,所以无法启动。于是接下来需要配置世界。

3. 配置世界

打开本地的饥荒联机版,创建一个世界(建议此时没有创建过世界,如果已经创建过,需要改下配置,会略麻烦一丢丢)

配置好名字、密码等各个选项后点 生成世界

进到选人物界面即可退出。

打开电脑上的文件夹:C:\Users\PP\Documents\Klei\DoNotStarveTogether\338869220\Cluster_1

  • 备注:即用户的文档路径下 Klei\DoNotStarveTogether 下的用户id下的 Cluster_1 (如果是从无建的世界则是1,否则需要对应找一下)

目录下创建一个 txt 文件,命名为 cluster_token,打开它

再打开游戏,进主界面 – 点左下角 账号 – 点 游戏 – 点 游戏服务器

设置一个集群名(比较随意),点添加新服务器

复制生成出的那串代码(token)到之前打开的 cluster_token.txt 中,保存关闭。

检查一下 cluster.ini 内容,需要有 master_port = 10888 ,值有问题则修改

检查一下 Master/server.ini,需要有 server_port = 10999,值有问题则修改

如果创建了洞穴,则检查一下 Caves/server.ini,需要有 server_port = 10998,值有问题则修改

检查/修改 完毕后

将以上四个文件/文件夹一起传到服务器上的 /home/dstsave/dst/World1/ 目录下(如果使用 docker 则需要先传到服务器再传到容器内)

上传服务器可以使用 FileZilla ,通过 FTP上传。

也可以使用 scp 命令:需要在装游戏的本机上打开 powershell,再cd 进饥荒目录(根据自己的修改):

 cd C:\Users\PP\Documents\Klei\DoNotStarveTogether\338869220\ 

再传 Cluster_1 文件至自己的服务器的 /home/dstsave/dst/World1/(饥荒世界文件的路径)

如果没有使用 docker,则直接传到对应目录下

scp Cluster_1 root@pangruitao.com:/home/dstsave/dst/World1/
  • 注:命令需要根据自己的服务器修改,pangruitao.com 替换为自己的域名或者ip:

如果有使用 docker 则传进挂载的目录

scp Cluster_1 root@pangruitao.com:/ppfiles/mydst/mycluster/

但这样复制进容器后是一个文件夹,需要 cd 至服务器对应目录下,将文件夹内内容移至 World1 目录下

如果没有使用 docker,则在服务器上运行

mv /home/dstsave/dst/World1/Cluster_1/* /home/dstsave/dst/World1/

如果有使用 docker,则在服务器上运行

mv /ppfiles/mydst/mycluster/Cluster_1/* /home/dstsave/dst/World1/

做完则世界相关文件也应没问题了

4. 开启服务器

在自己的服务器或 docker 容器内(服务器上运行 docker exec -it mydst bash),新建 master 的 screen (方便多屏管理)

screen -S master

进入饥荒服务器运行目录,并启动主世界:

cd /home/dstserver/bin
./master_start.sh

看到 Sim paused 则启动成功

Ctrl+A Ctrl+D 离开此 screen

如果有洞穴则类似方式启动洞穴:

screen -S master
cd /home/dstserver/bin
./cave_start.sh

如果也出现Sim paused 则启动成功,如果提示 can not connect to master world 则很可能是之前这几步:

  • 检查一下 cluster.ini 内容,需要有 master_port = 10888 ,值有问题则修改
  • 检查一下 Master/server.ini,需要有 server_port = 10999,值有问题则修改
  • 如果创建了洞穴,则检查一下 Caves/server.ini,需要有 server_port = 10998,值有问题则修改

有问题,可以直接用 vi 检查和修改,并重新运行 master 和 caves

5. 连接

进游戏搜自己的世界名即可,如果搜不到有可能需要略等待一会,或尝试重启游戏。正常则可以连进去玩起来了。

6. 服务器更新

如果一段时间没有玩,连接时提示“服务器版本过低”,或者在大厅搜不到自己的服务器了。

则需要更新一下服务器。最暴力的方式是整个docker容器重建一次。

也可以先进入容器,先进 screen 把master 和 cave 都关掉,再在steam里更新一下服务器:

cd /home

./steamcmd.sh

force_install_dir /home/dstserver

login anonymous

app_update 343050 validate

更新完成后再重新启动 Master 和 Cave 即可

7. 配置直连服务器

如果不配置,每次进游戏都得等登录,再进大厅,再搜索进服务器。

由于访问大厅需要 klei 的服务器,很可能不稳定。

所以可以配置为直连,更快且稳地连接自己的服务器。

配置方式:

右键饥荒联机版,选择属性-通用
设置启动选项
+connect 47.67.133.39:10999 +password "123456"
  • 47.67.133.39 需要替换为自己服务器的 IP 地址,个人尝试过用域名,但无法连接,还是建议填 IP
  • 123456 需要替换为服务器的密码

这样打开饥荒游戏的时候就会自动尝试连接设置的服务器了

8. Mod 配置

在服务器的 dstserver 目录下,打开 mods 文件夹,编辑 dedicated_server_mods_setup.lua 文件

vi /home/dstserver/mods/dedicated_server_mods_setup.lua

按如上方式添加需要的 mod 序号

ServerModSetup("1595631294")
ServerModSetup("347079953")

找 对应 mod 的序号可以通过 win 下创建的房间(加入了 mods 的房间),查看

打开文件modoverrides.lua

我的在 C:\Users\PP\Documents\Klei\DoNotStarveTogether\338869220\Cluster_2\Master\modoverrides.lua

直接用里面的对应位置数字(ID)就行

dedicated_server_mods_setup.lua 编辑完毕后重启服务器即可

参考资料

https://dontstarve.fandom.com/wiki/Guides/Don%E2%80%99t_Starve_Together_Dedicated_Servers

https://www.zhihu.com/search?type=content&q=linux%20%E9%A5%A5%E8%8D%92%E6%9C%8D%E5%8A%A1%E5%99%A8

https://zhuanlan.zhihu.com/p/146379848

https://www.bilibili.com/read/cv14688048

发表评论