第一步 安装必备工具

1.安装一些必备的工具

1
apt -y install glibc.i686 libstdc++.i686 libcurl4-gnutls-dev.i686 libcurl.i686 screen

lib32gcc可能无法安装,则运行下面的代码

1
2
3
dpkg --add-architecture i386
apt-get update
apt-get install lib32gcc-s1

2.安装steamcmd

1
2
3
4
5
cd /home && mkdir steamcmd && cd steamcmd

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

tar -xvzf steamcmd_linux.tar.gz

这一步是在Linux下创建/home/steamcmd目录

并远程下载steamcmd的安装包并解压,

解压完目录下会有一个steamcmd.sh文件,

这时候执行这个文件就可以启动SteamCMD,执行代码如下:

1
2
cd /home/steamcmd/
./steamcmd.sh

当你看到上图这种以 Steam> 开头的就代表进入了SteamCMD了,接下来再接着执行以下代码代码:

1
2
3
4
5
login anonymous

force_install_dir /home/dstserver

app_update 343050 validate

第二步 安装饥荒的服务器端

这一步是下载饥荒服务器到/home/dstserver目录下,执行完代码后服务器会自己下载,等待下载完后输入quit或者 (ctrl + c) 退出SteamCMD,至此服务器已经下载好了,接下来就是配置服务器。

首先解决最重要的问题,linux下饥荒的服务器似乎需要的组件跟现在的组件产生了名字上的差错导致启动服务器会显示缺少关键的组件libcurl-gnutls.so.4,因此需要执行下面的命令来解决:

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

然后接着执行:

1
2
3
4
5
6
7
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**启动主世界服务器

img

当看到上图标明服务器启动但还未配置所以显示未正常启动。

但这是成功的标志,之后按下Ctrl +C正常关闭服务器。

同样的输入 ./cave_start.sh 启动洞穴服务器并正常关闭。

经过上述服务器初次启动,在 /home/dstsave/dst/World1/ 文件夹下就会自动生成默认的配置文件,这个配置文件就是我们饥荒服务器的配置文件了,记住这个地址哟,接下来有两种方式,一种是自己修改配置,这种要求比较高,另一种就是现在自己电脑上创建一个服务器,然后将配置文件复制到Linux服务器上,推荐使用第二种,简单,准确,这里也只描述第二种

第三步 创建服务器并启动

1. 本地创建房间

在自己电脑上先创建一个新的服务器,并设置好你的房间名、密码、地洞、配置好服务器mod,然后点击创建,等房间创建好到选人界面,就可以退出了,比如下图的中国共产主义接班人房间。

img

2. 找到本地房间的文件路径,并复制到Linux服务器

第一步创建好房间后,返回服务器搜索页面,点击右下角的“游戏数据”,就会打开本地房间的文件目录

img

img

这里面Cluster_1至Cluster_5就代表联机版的5个房间,按顺序一一对应,比如我创建的“中国共产主义接班人”在第五个,那就是Cluster_5文件夹,双击打开Cluster_5,文件目录如下:

img

将Cluster_5里面的所有文件全部复制到Linux服务器下的**/home/dstsave/dst/World1/**目录下(可以使用FileZilla工具)。

3. 获取服务器token并粘贴到Linux服务器下

首先在刚刚看本地文件目录的那里点击“账户信息

img

跳转至Klei页面,点击查看我的游戏

img

再点击右上角Don’t Strave Together Servers

img

然后拉倒最下面,输入“友好的名字(就是你这个token的名字,仅仅作为一个标识用)”,并点击“添加新的服务器”,这个时候就可以看到生成的token了

img

将步骤3中的Cluster_X文件夹里面的Caves cluster.ini cluster_token.txt Master复制到云服务器的/home/dstsave/dst/World1/目录下

将令牌复制到Cluster_1文件夹内名为cluster_token.txt的文本文档中,直接覆盖里面的内容,cluster_token.txt没有就自己创建,文件类型是文本文档

1
2
3
4
5
/home/dstsave/dst/World1/目录下的文件
├── Caves
├── cluster.ini
├── cluster_token.txt
└── Master

4. 启动服务器

先启动主地图服务器,输入如下命令:

1
2
3
4
5
cd /home/dstserver/bin

screen -S master

./master_start.sh

如果没报错并且看到Simple pause就代表启动成功,按下Ctrl+A然后再按下Ctrl+D就可以让服务后台运行,并回到原来的控制台

同样的方式启动洞穴

1
2
3
screen -S caves

./cave_start.sh

如果没报错并且看到Simple pause就代表启动成功,按下Ctrl+A然后再按下Ctrl+D就可以让服务后台运行,并回到原来的控制台

这时可以通过以下命令来查看改服务是否启动

1
2
3
netstat -nlp |grep :10999

netstat -nlp |grep :10998

10999为主服务器的端口,10998为洞穴的端口,如果两个都显示值,则表明启动成功,如下图。

img

如果你要关闭服务器,直接kill 对应的端口号就行了,比如:

1
2
3
kill -9 7718

kill -9 7766

这时候你本地应该就能搜到你的服务器了

img

第四步 下载和配置mod

下载mod

首先,需要下载mod,下载mod需要对dedicated_server_mods_setup.lua进行操作

  1. 在你自己的电脑上打开Steam>steamapps>common>Don't Starve Together>mods这个文件夹
  2. 把文件夹中的:dedicated_server_mods_setup.lua 复制到云服务器/home/dstserver/mods的文件夹下即可,而具体的mod文件可以不用复制,启动游戏服务器时会自行下载mod,这些下载的mods是保存在服务器的dstserver里面。
  3. 但此时,dedicated_server_mods_setup.lua里面是空的,没有实际添加mod生效,需要结合后面再近一步操作。

配置mod参数

随后,还需要配置mod的参数,配置mod需要对modoverrides.lua进行操作,这里面的modoverrides.lua就是我们之前创建房间配置好的mod

  1. 在服务器/home/dstsave/dst/World1,包含是“Master”和“Caves”两个目录,这两个分别代表主地图和洞穴目录,他们下面的文件都是一样的,以“Master”为例
  2. 同时,在本地电脑上,C:\Users\12904\Documents\Klei\DoNotStarveTogether\1020521427\Cluster_1里面,也包含“Master”和“Caves”两个目录

img

回到我们之前服务器的目录,下面有一个mods文件夹,进入这个文件夹

1
cd /home/dstserver/mods

这个时候你会在里面发现有一个dedicated_server_mods_setup.lua文件,我们之所以没有mod是因为这个文件没有引入并下载mod,所以我们编辑这个文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
--There are two functions that will install mods, ServerModSetup and ServerModCollectionSetup. Put the calls to the functions in this file and they will be executed on boot.

--ServerModSetup takes a string of a specific mod's Workshop id. It will download and install the mod to your mod directory on boot.
--The Workshop id can be found at the end of the url to the mod's Workshop page.
--Example: http://steamcommunity.com/sharedfiles/filedetails/?id=350811795
--ServerModSetup("350811795")

--ServerModCollectionSetup takes a string of a specific mod's Workshop id. It will download all the mods in the collection and install them to the mod directory on boot.
--The Workshop id can be found at the end of the url to the collection's Workshop page.
--Example: http://steamcommunity.com/sharedfiles/filedetails/?id=379114180
--ServerModCollectionSetup("379114180")

ServerModSetup("347079953")
ServerModSetup("374550642")
ServerModSetup("462434129")
ServerModSetup("501385076")
ServerModSetup("566155039")
ServerModSetup("676503184")
ServerModSetup("912647660")
ServerModSetup("2121627026")
ServerModSetup("2311790861")
ServerModSetup("2464402864")
ServerModSetup("2601796546")
ServerModSetup("345692228")
ServerModSetup("1185229307")
ServerModSetup("1207269058")
ServerModSetup("1595631294")
ServerModSetup("1898292532")
ServerModSetup("2505341606")
ServerModSetup("375859599")
ServerModSetup("378160973")

--ServerModCollectionSetup("id")

其中ServerModSetup(“1216718131”)就是引入mod,括号里面的数字就是mod的id,还记得上一步要你记住的那个 modoverrides.lua文件吗?打开那个文件,如下:

img

拿第一个为例

1
2
3
4
5
["workshop-1216718131"]={
["configuration_options"]={ ["clean"]=true, ["lang"]=true, ["stack"]=true },
["enabled"]=true
}
]

[“workshop-1216718131”]里面的这一串数字就是mod的id,所以你将modoverrides.lua文件里面所有的workshop对应的数字(也就是你配置的mod)全部复制到dedicated_server_mods_setup.lua 文件里,一个mod对应一条ServerModSetup(“1216718131”) ,修改好后再重启服务器,mod就配置好了。

小结

modoverrides.lua是在本地创建游戏时,游戏生成的文件,里面包含mod的id以及配置参数,我们需要做的,就是把modoverrides.lua里面的modID添加到dedicated_server_mods_setup.lua文件,从而让服务器端自行下载这些mod。当然,modoverrides.lua也要被上传到服务器里面,从而让mod有配置,如果以后需要配置mod参数,也需要修改modoverrides.lua文件

添加mod

如果想添加新mod,首先将dst的程序关掉,在dedicated_server_mods_setup.lua文件添加modid

1
ServerModSetup("modid")

随后,需要配置modoverrides.lua文件,从而来调整新mod的参数,一种方法是找到新mod的配置文件,第二种是直接在本地新生成一个世界,需要将新mod也勾选上,从而在本地文件会产生新的modoverrides.lua,将新的modoverrides.lua复制到服务器对应位置即可。

删除mod

直接在dedicated_server_mods_setup.lua将对应modid的代码删除。

第五步 配置管理员

首先准备好要做管理员的好友的KLEI用户ID,怎么看好友的KLEI用户ID?往下看
打开游戏,点击账户信息

img

img

然后进入之前的**/home/dstsave/dst/World1**目录,也就是第三步最后面cluster_token.txt存放的目录,使用vim命令(没有vim的可以用vi命令)创建一个名叫“adminlist.txt”的文件

1
2
cd /home/dstsave/dst/World1/
vim adminlist.txt

img

按 i 开启编辑(开启编辑后下面会显示 – INSERT –),将好友的KLEI用户ID复制到adminlist.txt文件里,然后按一下esc退出编辑(下面的 – INSERT – 会消失),再按 :wq保存文件。如果要加两位管理员,则换一行输入第二位好友的 KLEI用户ID,一行只能放一个好友的 KLEI用户ID,房间创建者(也就是第三步创建token的那位用户)默认为管理员,不需要再在 adminlist.txt里面添加

img

img

至此服务器就搭建完成了,尽情的跟好朋友玩耍吧。

注意:遇到的坑

我在启动服务器的时候遇到了一个坑,就是主地图服务器启动没有问题,但是洞穴服务器一直启动不了,提示我端口被占用,我一一去查看了主地图服务器(Master文件夹)和洞穴服务器(Caves文件夹)的配置,也就是文件夹下的server.ini,发现主服务器(Master文件夹)下的server.ini 在复制过来后丢失了配置,没有配置端口号,然后又重新将本地服务器的server.ini 复制过去,就可以了。如果你们想详细了解每个配置对应的意思,可以参考饥荒联机独立服务器搭建教程(三):配置篇,讲的非常详细。

饥荒更新后搜索不到原来的服务器

今天饥荒更新了,发现一个大坑!!!

之前创建的服务器竟然搜索不到了!!!游戏更新前还可以搜到,退出去更新了游戏再进来就搜不到了,经过各种搜索,终于在一篇帖子的一个小小的回复里找到了,原来游戏客户端更新了,服务器没更新就会出现版本不一致,从而导致搜索不到服务器,这个时候我们需要去把服务器也更新一遍,怎么更新呢?其实就是安装过程中第二大步的第一小步。

这一步是在Linux下创建/home/steamcmd目录,并远程下载steamcmd的安装包,并解压,解压完目录下会有一个steamcmd.sh文件,这时候执行这个文件就可以启动SteamCMD,执行代码如下:

首先进入之前的steamcmd的安装目录,我的是/home/steamcmd,然后启动steamcmd

1
./steamcmd.sh

img

当你看到上图这种以 Steam> 开头的就代表进入了SteamCMD了,接下来再接着执行以下代码代码:

1
2
3
4
5
login anonymous

force_install_dir /home/dstserver (这里的/home/dstserver要改为你们自己的服务器路径)

app_update 343050 validate

这时候服务器就更新完了,然后再去重启服务器,你会发现你又可以搜到自己的独立服务器了。

问题一:无效令牌

img无效令牌

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[00:00:04]: [200] Account Failed (6): "E_INVALID_TOKEN"

[00:00:04]: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

[00:00:04]: !!!! Your Server Will Not Start !!!!

[00:00:04]: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

[00:00:04]: No auth token could be found.
[00:00:04]: To generate a cluster_token you must
[00:00:04]: open the console from a logged-in game
[00:00:04]: client with the tilda key (~ / �) and type:

[00:00:04]: TheNet:GenerateClusterToken()

[00:00:04]: This will create 'cluster_token.txt' in
[00:00:04]: your client settings directory. Copy this
[00:00:04]: into your cluster settings directory.
[00:00:04]: [Connect] PendingConnection::Reset(true)

解决方法一:重新申请服务器令牌

解决办法二:cluster_token文件内的令牌有误,重新复制并覆盖

解决方法三:未找到cluster_token文件,看上一篇搭建教程,确保cluster_token文件在指定目录下

问题二:端口被占用

1
2
3
4
5
6
7
[00:00:05]: Port 10999 is open in the firewall.
[00:00:05]: [Shard] Shard server mode disabled by configuration file
[00:00:05]: [Error] Server failed to start!
[00:00:05]: Unhandled exception during server startup: RakNet UDP startup failed: SOCKET_PORT_ALREADY_IN_USE (5)
[00:00:05]: PushNetworkDisconnectEvent With Reason: "ID_DST_INITIALIZATION_FAILED", reset: false
[00:00:05]: Details: SOCKET_PORT_ALREADY_IN_USE
[00:00:08]: ... FilesExistAsyncThread complete

解决方法一:关闭防火墙或者在防火墙中设置允许该服务程序通过

解决方法二:森林服务器的默认端口为10999,洞穴服务器的默认端口为10998,打开命令行输入netstat -an查看端口10999或10998是否被占用,若被占用,编辑Cluster_1>Master和Cluster_1>Caves文件夹下的server文件,分别更改server_port的值为10997,10996。

解决方法三:程序未找到server文件,这时候只开一个森林服务器有可能不会报错,默认10999如果未被占用的话,但如果同时开了森林和洞穴那么就会报错,后打开端口的服务程序会显示端口被占用。确保server文件的路径正确,确保launch_preconfigured_servers批处理程序内的命令正确,具体看上一篇搭建教程。

问题三:服务启动成功但游戏大厅浏览不到自己的房间

解决方法:打开steamcmd,输入app_update 343050 validate #升级Don’t Starve Together Dedicated Server

问题四:如何添加或者删除服务端mod

解决方法:打开饥荒联机版,创建游戏,选择与服务器上对应的存档,配置MOD(添加或者删除),启动,在选择人物时断开连接。把游戏新生成的modoverrides文件覆盖到服务器上,洞穴和森林都要覆盖,删除的话到此就可以了,添加的话还要复制mod文件夹到服务器上,具体看上一篇搭建教程。

添加mod

如果想添加新mod,首先将dst的程序关掉,在dedicated_server_mods_setup.lua文件添加modid

1
ServerModSetup("modid")

随后,需要配置modoverrides.lua文件,从而来调整新mod的参数,一种方法是找到新mod的配置文件,第二种是直接在本地新生成一个世界,需要将新mod也勾选上,从而在本地文件会产生新的modoverrides.lua,将新的modoverrides.lua复制到服务器对应位置即可。

删除mod

直接在dedicated_server_mods_setup.lua将对应modid的代码删除。