0. 说明
建Steam版饥荒的服务器主要可以解决两个问题:
- Steam版国内非局域网情况下联机延迟超高
- 建世界玩家不在时,其他朋友就玩不了
为解决第一个延迟高的问题,个人尝试了用 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