在centos上搭建饥荒服务器

用这篇文章记录一下我搭建饥荒服务器的过程,在阅读参考本文章前,您需要:

  1. 拥有安装CentOS的云服务器,使用其他操作系统在部署饥荒服务器的时候可能会出现问题
  2. 包含cluster_token的地图文件夹。这部分操作比较简单,现在在KLEI配置token时可以直接下载整个地图文件。可以参考专属服务器搭建指南(Windows)这个教程,比较新。

本文我使用的服务器配置及工具,需要的可以参考一下。

  1. 使用的是腾讯云的轻量应用服务器,安装的系统是“官方镜像-系统镜像-CentOS7.6”。
  2. ssh工具使用的是WindTerm

1 准备

首先,需要安装部署饥荒服务器所需的环境

# root用户下执行
yum -y update #升级服务器
yum -y install glibc.i686 libstdc++.i686 screen libcurl.i686 #安装所需环境

然后,创建一个steam用户来管理饥荒服务器。注意,步骤2开始的所有操作在steam用户下进行,若某个步骤在root用户下运行,可能导致使用steam用户启动服务器时没有权限。

# root用户下执行
useradd -d /home/steam steam # 创建steam用户,并设定家目录
passwd steam # 为steam用户设定密码

linux下的用户管理还有其他问题的,可以参考:CentOS 7.6用户和组账号的添加、管理和删除如果出现不能用密码登录的问题,可能是由于开启了密钥,需要修改 SSH 配置开启密码登录。

最后,请切换到steam用户。如果使用的是WindTerm或其他ssh软件,可以尝试为steam用户配置ssh会话,之后控制服务器时可快速登录steam用户,也可以接着上面,由root用户切换到steam用户。

#root用户下执行
su steam
cd ~
pwd

完成本步骤,应该如图所示登录steam用户并位于steam用户的家目录,并确保饥荒服务器的环境已正确安装。

1 准备

2 安装steamcmd及饥荒服务器

在steam用户下执行以下命令,会下载并解压steamcmd,进入~/steamcmd会有一个steamcmd.sh的可执行文件。

mkdir ~/steamcmd
cd ~/steamcmd # 创建安装位置
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz # 下载程序

(如果下载太慢)也可以在本机下载,然后上传到服务器。给个参考的命令,-i是指定密钥的位置,因为我这边是禁用了密码登录,且只给root用户配了密钥,所以需要用root用户加上密钥来将进行上传,如果没禁用密码登录,可以直接用密码上传。

# 本机cmd或本机shell
scp -i "root用户登录密钥位置" .\steamcmd_linux.tar.gz root@服务器ip地址:/home/steam/steamcmd # 密钥

scp .\steamcmd_linux.tar.gz steam@服务器ip地址:/home/steam/steamcmd # 密码

最后解压文件,可以看到多了一个steamcmd.sh可执行文件。

tar -zxvf steamcmd_linux.tar.gz # 解压

在这里插入图片描述
接着使用以下命令安装饥荒服务器。

./steamcmd.sh +login anonymous +force_install_dir ~/dst +app_update 343050 validate +quit
# 登录Steam并安装饥荒联机版服务器

饥荒服务器会安装在~/dst下,安装完成后在bin目录下有dontstarve_dedicated_server_nullrenderer可执行文件,马赛克掉的是后续的内容

cd ~/dst/bin

安装饥荒服务器

3 试运行饥荒服务器并检查依赖

执行以下命令,不带参数运行饥荒服务器。这一步主要检查饥荒服务器的环境有没有问题。

./dontstarve_dedicated_server_nullrenderer

一般情况下centos试运行饥荒服务器这里应该会报一个错,会出现找不到libcurl-gnutls.so.4文件的错误,执行以下代码创建一个软链接链一下即可。(如果这里建软链接也出错了,应该是第1步准备中没有正确安装libcurl.i686等文件,切回root用户重新安装或自行解决。)

#error while loading shared libraries: libcurl-gnutls.so.4: cannot open shared object file: No such file or directory
ln -s /usr/lib/libcurl.so.4 ~/dst/bin/lib32/libcurl-gnutls.so.4

再执行一次上面的命令,如果服务器跑起来了并出现Your Server Will Not StartNo auth token could be found则说明环境没有问题。

./dontstarve_dedicated_server_nullrenderer

试运行饥荒服务器结果
如果这里还出现了其他错误,请参考重写饥荒服务器搭建全指南下的检查依赖部分解决。

4 上传文件到指定位置

我们接下来需要将准备的地图文件上传到服务器,因为直接在游戏的图形界面方便对地图进行设置,还可以添加一些mod。地图上传的位置是/home/steam/.klei/DoNotStarveTogether,也就是steam用户下的~/.klei/DoNotStarveTogether,我们进入这个路径看一下。

cd ~/.klei/DoNotStarveTogether/

试运行留下的地图文件
可能会看到一个Cluster_1文件夹,这个是刚才试运行时新建的地图,直接删除即可。

rm -rf Cluster_*

接下来,需要将准备的地图文件上传到该文件夹下。请检查地图文件是否完整,如下图所示。以下提供几个方案将地图传输到服务器。
在这里插入图片描述

使用scp命令上传

简单介绍一下scp命令,它的格式是scp 源文件 目标文件,用用户名@服务器地址:来表示远程服务器种的文件,加-r可以传文件夹,加-i 密钥位置是通过密钥的方式鉴权。
回到本文的内容,首先需要在本机上打开cmd进入准备好的地图文件所在位置(或者其他方式),在本机的cmd执行以下命令。这里由于我禁用了用户密码鉴权,所以用root用户并带上密钥,如果没禁用可以执行下面用密码鉴权的命令。

# 本机cmd,进入到地图文件所在位置
tar -czf .\MyDediServer.tar.gz .\MyDediServer # 压缩地图文件
scp -i "省略号\.ssh\id_rsa" .\MyDediServer.tar.gz root@服务器ip地址:/home/steam/.klei/DoNotStarveTogether # 密钥

scp .\MyDediServer.tar.gz steam@服务器ip地址:/home/steam/.klei/DoNotStarveTogether # 密码

因为上传的是压缩文件,还需要解压。回到服务器的命令行并进入到地图文件夹。

# 服务器bash
tar -xzf MyDediServer.tar

如果想直接上传文件夹,加上-r就好(我用root用户上传文件夹,发现地图文件的所有者都是root用户,不知道会不会出现权限的问题)。

scp -r .\MyDediServer\ root@服务器ip地址:/home/steam/.klei/DoNotStarveTogether

使用WindTerm文件管理器上传

如果使用的是WindTerm或者FinalShell,可以直接再这些软件的文件管理器中上传文件。以WindTerm为例,请确认以显示文件管理器,通过图形界面操作进入/home/steam/.klei/DoNotStarveTogether,其中进入.klei/文件夹可能需要在地址栏输一下。
确认打开文件管理器
进入文件夹后,直接把地图文件拖进来就好了。
用WindTerm上传文件

使用lrzsz命令上传

使用xshell但不想用xftp的可以使用rz命令上传,putty好像不可以使用rz命令,还是得要使用SCP命令。

首先安装lrzsz。

# centos bash(建议用root用户安装,也可能已经安装了)
yum install -y lrzsz

rz命令不能上传文件夹,所以需要在上传前打包一下。在本地机器上打开shell进入地图文件所在的文件夹,执行打包命令。具体的地图文件位置和地图文件名请根据自身情况进行修改。

# windows cmd
cd /d D:\Desktop\MyDediServer-template
cd ..
tar -cvf MyDediServer.tar MyDediServer-template

tar命令打包文件
回到centos中,执行rz命令。在文件选择器中选择桌面的MyDediServer.tar文件,即可上传到服务器。

# centos bash
rz

rz上传文件到服务器
再运行命令解压缩,上传地图到服务器就完成啦。

tar -xvf MyDediServer.tar

tar解压文件

最后,再总结一下用到的命令:

#scp
scp filename steam@服务器地址 # 上传
scp steam@服务器ip地 filename # 下载

scp -i "密钥位置" steam@服务器ip地 filename # 通过密钥鉴权
scp -r foldername steam@服务器ip地址 # 传文件夹

# lrzsz
sz filename # 发送文件到本地
rz # 上传文件到服务器

# 解压缩文件
tar -cvf xxxx.tar XX # 打包XX文件
tar -xvf xxxx.tar # 解压文件

tar -czf xxxx.tar.gz XX # 打包并压缩XX文件
tar -xzvf xxxx.tar # 解压文件,并显示过程(-v)

5 创建启动文件

上传地图文件到服务器后,回到饥荒服务器的文件夹,执行以下命令创建Master服务器Caves服务器的启动文件,请注意MyDediServer 需要与上传的地图文件夹名对应(不用与server.ini中的服务器名对应)。

cd ~/dst/bin/
echo ./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Master > dst_overworld.sh
echo ./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Caves > dst_caves.sh

创建启动文件

接下来再来试一试启动文件能不能用,一般出现Sim paused就说明服务器已经可以使用了。

sh dst_overworld.sh # 等待其运行完成,没问题后按一下Ctrl+C
sh dst_caves.sh # 同上,没问题后再按Ctrl+C

在这里插入图片描述

6 配置MOD

为饥荒服务器配置MOD涉及两个文件:

  • modoverrides.lua是配置mod是否启用和mod设置的,位于地图文件的Master文件夹Caves文件夹下,而且的内容应该是一样的。一般在图形界面生成就不需要修改了。
  • dedicated_server_mods_setup.lua是用来确定要下载哪些mod,位于~/dst/mods目录下
    dedicated_server_mods_setup文件位置
    modoverrides.lua文件位置
    在本地或服务器上打开modoverrides.lua文件
    modoverrides.lua
    然后把MOD的Id复制出来以ServerModSetup("666155465")的格式写到dedicated_server_mods_setup.lua中。
cd ~
vi ./dst/mods/dedicated_server_mods_setup.lua

dedicated_server_mods_setup.lua

如果是想往现有专服再添加MOD,可以新建一个本地的服务器地图,在饥荒的图形界面里添加配置mod(注意有些mod需要配置),然后再去把modoverrides.lua文件复制出来,到服务器的地图文件中,把的MasterCaves下的该文件给覆盖后重启服务器即可。

7 dst控制脚本

为了方便维护饥荒服务器,在steam家目录新建一个dst_control文件夹,用于存放服务器的控制脚本。

cd ~
mkdir dst_control
cd ~/dst_control/

dst_control文件夹
先创建了一个软连接连到dedicated_server_mods_setup.lua用于快速编辑该文件。

ln -s /home/steam/dst/mods/dedicated_server_mods_setup.lua ./mod_setup.lua

启动饥荒服务器

新建run_dst_server文件并输入以下内容。

vi run_dst_server
# 进入vi后按‘i’键,然后复制下面的脚本,粘贴。再按“Esc”键,在键盘上键入“:wq”并回车
master_screen=$"dst_master"
cave_screen=$"dst_cave"

screen -dmS $master_screen
echo "create screen: dst_master...OK"

screen -dmS $cave_screen
echo "create screen: dst_cave...OK"

to_game_dir=$"cd /home/steam/dst/bin"
run_master_server=$"sh dst_overworld.sh"
run_cave_server=$"sh dst_caves.sh"

screen -x -S $master_screen -p 0 -X stuff "$to_game_dir"
screen -x -S $master_screen -p 0 -X stuff $'\n'
echo "dst_master: goto game dir..."

screen -x -S $master_screen -p 0 -X stuff "$run_master_server"
screen -x -S $master_screen -p 0 -X stuff $'\n'
echo "dst_master: run master server...OK"

screen -x -S $cave_screen -p 0 -X stuff "$to_game_dir"
screen -x -S $cave_screen -p 0 -X stuff $'\n'
echo "dst_cave: goto game dir..."

screen -x -S $cave_screen -p 0 -X stuff "$run_cave_server"
screen -x -S $cave_screen -p 0 -X stuff $'\n'
echo "dst_cave: run cave server...OK"

echo "Success! dst server is running."

尝试执行run_dst_server脚本,会新建两个screen并分别运行mastercave服务器。

sh run_dst_server 
screen -ls

这里解释一下,screen是linux的一个工具,上面的脚本就是通过screen -S screenname让饥荒服务器在后台运行,不然命令行一关饥荒服务器就被关了。可以通过screen -ls查看运行的服务器,下图可以看到dst_masterdst_cave都在被正常创建了,如果少了或没有,检查一下脚本是不是没复制全。
在这里插入图片描述
可以通过-r进入screen中查看服务器运行状况和服务器log

screen -r dst_master

在这里插入图片描述
Ctrl + A, C与screen分离,回到上一级的命令窗口。到饥荒中可以看到服务器已经启动起来了,而且装了MOD。
在这里插入图片描述

关闭饥荒服务器

vi stop_dst_server
# 进入vi后按‘i’键,然后复制下面的脚本,粘贴。再按“Esc”键,在键盘上键入“:wq”并回车
master_screen=$"dst_master"
cave_screen=$"dst_cave"

shutdown_server=$"c_shutdown(true)"
screen_exit=$"exit"

screen -x -S $master_screen -p 0 -X stuff "$shutdown_server"
screen -x -S $master_screen -p 0 -X stuff $'\n'
screen -x -S $cave_screen -p 0 -X stuff "$shutdown_server"
screen -x -S $cave_screen -p 0 -X stuff $'\n'
echo "shutdown master and cave server..."

for i in '20%' '40%' '60%' '80%' '100%'
do
    sleep 1s
    echo $i
done

screen -x -S $master_screen -p 0 -X stuff "$screen_exit"
screen -x -S $master_screen -p 0 -X stuff $'\n'
echo "dst_master screen exit...OK"

screen -x -S $cave_screen -p 0 -X stuff "$screen_exit"
screen -x -S $cave_screen -p 0 -X stuff $'\n'
echo "dst_cave screen exit...OK"

echo "Success!  dst server is stoped."

更新饥荒服务器

饥荒服务器更新后服务器会连不上,需要更新一下服务器。此外,每次更新都会导致dedicated_server_mods_setup.lua被重置(我瞎说的,不知道是不是更新导致的,但这个文件里的内容经常不见),虽然mod已经下载了启动服务器的时候就没有问题,但增加mod的时候就需要把之前的重新打一遍,很麻烦。因此新增一个mods_setup的备份,每次更新后都用这个备份覆盖源文件。

cp /home/steam/dst/mods/dedicated_server_mods_setup.lua ./dedicated_server_mods_setup.lua.backup

新建update_dst_server

vi update_dst_server
# 进入vi后按‘i’键,然后复制下面的脚本,粘贴。再按“Esc”键,在键盘上键入“:wq”并回车

写入一下内容

sh stop_dst_server

~/steamcmd/steamcmd.sh +login anonymous +force_install_dir ~/dst +app_update 343050 validate +quit

cp /home/steam/dst_control/dedicated_server_mods_setup.lua.backup /home/steam/dst/mods/dedicated_server_mods_setup.lua
sh run_dst_server

之后添加mod除了地图上的修改,只需要把对dedicated_server_mods_setup.lua修改增加到dedicated_server_mods_setup.lua.backup文件,然后执行更新饥荒服务器脚本即可。

执行权限

给上述三个文件一个执行权限,可以直接./执行。

chmod +x run_dst_server stop_dst_server update_dst_server

8 总结

本文我参考许多饥荒的搭建专服的文章,我主要是增加了使用脚本控制服务器的内容,但是我也不是很熟悉bash脚本的编写,现学现卖,如果有错误或有更好的想法欢迎在评论区告诉我,不懂的地方或是遇到了问题也可以在评论区留言。祝大家游戏愉快。

  • 17
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值