环境要求
- Internet (Upload) = 8Kbytes / player / s
- Ram = around 65Mbytes/player
搭建的环境配置
本机,使用VMware 开Linux虚拟机搭建:
系统:centos 7 x64
参数:2核2G
平台:Steam
ssh软件:Xshell
前置工作
饥荒的运行与本地跑是一样需要载体,这里我们使用Steam平台:
yum -y update
yum -y install glibc.i686 libstdc++.i686 libcurl.i686 screen#安装环境依赖
其他可能需要的依赖:
yum install -y wget #链接下载
yum install -y unzip zip #解压缩
yum install lrzsz -y #上下载文件
新建用户,为了服务器的安全请不要随意使用root账号操作!
useradd -m dst #新增用户 dst
passwd dst #设置密码,公网服务器的密码一定要非常非常复杂,否则容易被爆破!!!
为dst用户添加sudo权限
chmod 777 /etc/sudoers
vi /etc/sudoers
找到root ALL=(ALL) ALL
,按 i 键进入编辑,在下面添加新的一行:
dst ALL=(ALL) ALL
按ESC退出编辑,然后在vi键入命令 :wq 保存并退出。
恢复/etc/sudoers的访问权限为440:
chmod 440 /etc/sudoers
切到dst账号进行操作:
su dst
安装Steam CMD
mkdir ~/steamcmd #创建安装位置
cd ~/steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz #下载
tar -zxvf steamcmd_linux.tar.gz ##解压
./steamcmd.sh +login anonymous +force_install_dir ~/dst +app_update 343050 validate +quit
之后会进行下载更新,耐心等待一会。
检查依赖
cd ~/dst/bin
./dontstarve_dedicated_server_nullrenderer
这时候可能会显示
./dontstarve_dedicated_server_nullrenderer: error while loading shared libraries: libcurl-gnutls.so.4: cannot open shared object file: No such file or directory
在CentOS下没有这个链接库,可以用其它的库代替一下
以root权限执行如下命令:
sudo ln -s /usr/lib/libcurl.so.4 /usr/lib/libcurl-gnutls.so.4 && ldconfig
另外也可以使用如下命令来查看程序缺少的动态链接库:
ldd ./dontstarve_dedicated_server_nullrenderer
这时候我们再次执行./dontstarve_dedicated_server_nullrenderer
,你会看到如下日志:
[00:00:02]: [200] Account Failed (6): "E_INVALID_TOKEN"
[00:00:02]: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[00:00:02]: !!!! Your Server Will Not Start !!!!
[00:00:02]: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[00:00:02]: No auth token could be found.
[00:00:02]: Please visit https://accounts.klei.com/account/game/servers?game=DontStarveTogether
[00:00:02]: to generate server configuration files
[00:00:02]:
[00:00:02]: Alternatively generate a cluster_token you can
[00:00:02]: open the console from a logged-in game
[00:00:02]: client with the tilda key (~ / ù) and type:
[00:00:02]: TheNet:GenerateClusterToken()
[00:00:02]: This will create 'cluster_token.txt' in
[00:00:02]: your client settings directory. Copy this
[00:00:02]: into your cluster settings directory.
[00:00:02]: [Connect] PendingConnection::Reset(true)
我们可以在~/.klei/DoNotStarveTogether
目录下通过命令看到默认的一个配置Cluster_1
,如果想在~
目录看到.klei
需要使用ls -la
命令。
配置准备
这里我们只介绍比较快捷的方式:
创建本地存档
首先在本地的steam开一个新存档,选择好游戏模式、最大玩家数、mod等一系列初始化世界的配置之后开始游戏,直到加载出角色选择界面,直接退出。到时候我们会以当前的配置作为服务器世界初始化的配置。
Klei官方添加服务器并获取token
使用Steam账号登录:https://accounts.klei.com/login
这一串被打码的就是服务器票据(token)
修改存档配置
windows下的路径一般是
文档/Klei/DoNotStarveTogether/你的steamId一串数字/Cluster_X
X是你的当前存档的编号,比如排第4个就是Cluster_4,copy出我们之前创建的存档信息:
修改cluster_token.txt的内容换成上面的token
上传本地存档到服务器
这里我们就用Cluster_4作为示例。
压缩Cluster_4文件夹为zip格式
cd ~/.klei/DoNotStarveTogether
删除默认的配置
rm -rf ~/.klei/DoNotStarveTogether/Cluster_*
使用 rz 命令选择我们的压缩包进行上传,可以看到已经上传OK了
[dst@localhost DoNotStarveTogether]$ ll
总用量 1944
-rw-r--r--. 1 dst dst 1988490 9月 1 2020 Cluster_4.zip
解压
unzip Cluster_4.zip -d .
因为之前打包是把Cluster_4这个文件夹一起打包了,所以解压后:
[dst@localhost DoNotStarveTogether]$ ll
总用量 1944
drwxrwxr-x. 4 dst dst 77 9月 1 00:07 Cluster_4
-rw-r--r--. 1 dst dst 1988490 9月 1 2020 Cluster_4.zip
删除不必要的东西
rm -rf Cluster_4.zip
添加mod配置
在服务器上想要运行我们在本地配置的mod必然需要配置下载
cd ~/dst/mods/
里面有一个dedicated_server_mods_setup.lua
文件
文件内容配置格式ServerModSetup("创意工坊id"),示例:
ServerModSetup("1084023218")
ServerModSetup("1207269058")
ServerModSetup("1418746242")
ServerModSetup("1458450094")
ServerModSetup("1699194522")
ServerModSetup("1898292532")
ServerModSetup("1991746508")
ServerModSetup("2032577827")
ServerModSetup("2078243581")
ServerModSetup("2121392316")
ServerModSetup("2126680407")
ServerModSetup("2151452010")
ServerModSetup("2174620235")
ServerModSetup("347079953")
ServerModSetup("353697884")
ServerModSetup("356930882")
ServerModSetup("367546858")
ServerModSetup("374550642")
ServerModSetup("375850593")
ServerModSetup("375859599")
ServerModSetup("378160973")
ServerModSetup("380423963")
ServerModSetup("458940297")
ServerModSetup("463621557")
ServerModSetup("466732225")
ServerModSetup("501385076")
ServerModSetup("543945797")
ServerModSetup("551324730")
ServerModSetup("623749604")
ServerModSetup("646227245")
ServerModSetup("666155465")
ServerModSetup("784481384")
你可以根据存档里的Cluster_4/Master/modoverrides.lua
文件的内容进行配置
例如:
["workshop-1458450094"]={
["configuration_options"]={
[""]=0,
["houndstooth"]=false,
["livinglog"]=false,
["log"]=false,
["mode"]="fix",
["retrapfix"]=60,
["retraprandomx"]=10,
["retraprandomy"]=120,
["rope"]=false,
["stinger"]=false
},
["enabled"]=true
},
这里的workshop-1458450094
的1458450094就是我们要的。
在本地都编辑完毕后将配置好的内容通过vi dedicated_server_mods_setup.lua
编辑,放在文件末尾并保存。并把这个文件设置成只读
chmod 444 dedicated_server_mods_setup.lua
启动脚本
在真正运行服务器之前,需要先写一个服务器启动脚本。
脚本命名为startup.sh,放置于~目录下
cd ~
vi startup.sh
内容:
#!/bin/bash
steamcmd_dir="$HOME/steamcmd"
install_dir="$HOME/dst"
cluster_name="Cluster_4"
dontstarve_dir="$HOME/.klei/DoNotStarveTogether"
function fail()
{
echo Error: "$@" >&2
exit 1
}
function check_for_file()
{
if [ ! -e "$1" ]; then
fail "Missing file: $1"
fi
}
cd "$steamcmd_dir" || fail "Missing $steamcmd_dir directory!"
check_for_file "steamcmd.sh"
check_for_file "$dontstarve_dir/$cluster_name/cluster.ini"
check_for_file "$dontstarve_dir/$cluster_name/cluster_token.txt"
check_for_file "$dontstarve_dir/$cluster_name/Master/server.ini"
check_for_file "$dontstarve_dir/$cluster_name/Caves/server.ini"
check_for_file "$install_dir/bin"
cd "$install_dir/bin" || fail
run_shared=(./dontstarve_dedicated_server_nullrenderer)
run_shared+=(-console)
run_shared+=(-cluster "$cluster_name")
run_shared+=(-monitor_parent_process $$)
run_shared+=(-shard)
"${run_shared[@]}" Caves | sed 's/^/Caves: /' &
"${run_shared[@]}" Master | sed 's/^/Master: /'
赋予脚本文件以执行权限:
chmod u+x ~/startup.sh
防火墙开放端口
查看防火墙状态:
sudo firewall-cmd --state
如果是running就需要开放端口,强烈建议开启防火墙!!
sudo firewall-cmd --zone=public --add-port=10998/udp --permanent
sudo firewall-cmd --zone=public --add-port=10999/udp --permanent
sudo firewall-cmd --reload
查看当前已开放的端口:
sudo firewall-cmd --list-ports
输出:10998/udp 10999/udp
如果真的不想开端口,想直接关闭防火墙:
sudo systemctl stop firewalld.service
启动游戏
开启虚拟窗口:
screen -S myDSTserver
运行脚本:
sh startup.sh
执行之后就会开始跑了,如果有安装mod会先下载mod,耐心等待,只有mod都下载完才会真正跑起来,看到如下日志即执行成果,按下Ctrl+A+D最小化虚拟窗口,后台运行服务器。
Caves: [00:02:54]: Validating portal[10] <-> 1[10] (active)
Caves: [00:02:54]: Validating portal[3] <-> 1[3] (active)
Caves: [00:02:54]: Validating portal[9] <-> 1[9] (active)
Caves: [00:02:54]: Validating portal[2] <-> 1[2] (active)
Caves: [00:02:54]: Validating portal[4] <-> 1[4] (active)
Caves: [00:02:54]: Validating portal[1] <-> 1[1] (active)
Caves: [00:02:54]: Validating portal[5] <-> 1[5] (active)
Caves: [00:02:54]: SimLuaProxy::QueryServer()
Caves: [00:02:55]: [Shard] secondary shard LUA is now ready!
Caves: [00:02:55]: Sim paused
Master: [00:03:01]: Registering master server in Sing lobby
如果想恢复窗口,使用screen -r
以下是一个示例,74234.myDSTserver就是查看的session-id
[dst@localhost ~]$ screen -S myDSTserver
[detached from 74234.myDSTserver]
[dst@localhost ~]$ screen -r 74234.myDSTserver
[detached from 74234.myDSTserver]
开始游戏
更新游戏/MOD
列出当前的screen
screen -ls
[dst@localhost root]$ screen -ls
There is a screen on:
74234.myDSTserver (Detached)
1 Socket in /var/run/screen/S-dst.
杀掉进程
screen -dr 74234.myDSTserver -X quit
更新
cd ~/steamcmd
./steamcmd.sh +login anonymous +force_install_dir ~/dst +app_update 343050 validate +quit
注意更新之后需要重新修改dedicated_server_mods_setup.lua ,如果你没有把这个文件设置成可读的话
开启虚拟窗口:
screen -S myDSTserver
运行脚本:
cd ~
sh startup.sh
按下Ctrl+A+D最小化虚拟窗口,后台运行服务器。
内存占用
top
可以看到洞穴和地上世界各占700M左右。所以内存要大一些。
其他可选配置
copy[[重写]饥荒服务器搭建 配置篇](https://www.vincehut.top/index.php/2020/03/19/重写饥荒服务器搭建-配置篇/#toc-head-5)
管理员
管理员拥有控制台指令权限,比如可以实现回档、创建新世界、开挂等等。你只需要把玩家的id放到adminlist.txt里,一行一个。
举个栗子:
KU_xxxxx
KU_xxxxxxxx
KU_xxxxxxxx
KU_xxxxxxxx
KU_BAv10492
黑名单
我不想让熊孩子跑进我的服务器,我想屏蔽他!从日志中找到他的 SteamID64,添加到 blocklist.txt 中,一行一个
白名单
连接服务器的人太多,导致管理员都进不来,怎么办呢?编辑 whitelist.txt 和cluster.ini。
whitelist.txt和blocklist.txt很像,但是里面的内容是以 KU_ 开头的用户id
cluster.ini中的whitelist_slots字段限制了服务器的最大玩家数。 现在假设最大玩家数为6,whitelist_slotst里有2个玩家,所以实际上普通玩家的最大数量是4
参考
http://blog.ttionya.com/article-1235.html
https://zhuanlan.zhihu.com/p/105219404
https://steamcommunity.com/sharedfiles/filedetails/?id=590565473