搭建一个饥荒服务器
前言
哈喽,许久未见,肾是想念。转眼就到了五月,这次呢,我开始打算搭建一个饥荒的服务器。因为先前的服务器内存不够,所以只好换个服务器重新搭建啦。正好整理成一个文章,方便日后copy。
准备
- 一台4G+RAM的服务器(装MOD的话至少4G)
- 服务器系统:CentOS Stream 8 64位
开始
废话少说,开始进入正文。
创建新Linux用户
sudo adduser steam
注意:该命令可以创建用户和该用户在home中的文件夹
修改用户密码
sudo passwd steam
# 以 root 用户身份升级至 steam 用户:
su - steam
安装环境依赖
# 安装epel源
sudo yum install epel-release
# 安装各种环境软件依赖
sudo yum -y install glibc.i686 libstdc++.i686 libcurl.i686
安装steamcmd
Tips:
您可以自行百度或google或bing搜索centos安装steamcmd方法,应该能搜到官方的文档,这也是最推荐的,当然您也可以选择直接看下面的命令,或者点击下面的连接查看文档
# 注意,需要在你刚刚创建的用户下(steam)执行下面命令,否则目录不一致
cd ~
mkdir steamcmd
cd steamcmd
# 下载并解压缩适用于 Linux 的 SteamCMD。
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
# 中国内地用户可使用以下命令以使用内地节点,注意:该方式我试了下会报错,也许是系统的问题,大家可以试试能不能用
curl -sqL "https://media.st.dl.bscstorage.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
安装tmux 和/或 screen 以简化服务器管理
sudo yum install tmux screen
steamcmd操作
进入steam
./steamcmd.sh
Tips:
当出现
Steam>
的时候代表steam服务已经启动成功了,第一次启动可能需要更新
设置你的应用安装目录
# force_install_dir <路径>
force_install_dir /home/steam/software/dontstarve
登录用户
login 用户名
set_steam_guard_code 验证码
Tips:
验证码为你输入正确密码后向你输入的账户的邮箱中发送的验证码
安装或更新应用(饥荒)
在Steam中执行以下命令
# app_update ID validate
app_update 343050 validate
Tips:
安装或更新应用使用
app_update
命令(在这里提供Steam 应用 ID)。 要同时校验应用的话,需添加validate
到命令里。要下载测试分支的话,使用-beta <测试名称>
选项 – 例如,半条命专用服务器的测试分支名为beta
以及起源专用服务器的测试分支名为prerelease
。一些测试分支设置了密码;如果要从它那里下载,需同时添加-betapassword <密码>
选项。app_update <应用ID> [-beta <测试名称>] [-betapassword <密码>] [validate]
退出Steam
quit
# 或者按一次Ctrl+c即可
游戏内操作
游戏风格
选择轻松或者无尽模式,其它模式可能会因为死亡而从零开始
森林设置
本设置以轻松游戏风格模式下进一步调整,主要面对萌新,毕竟俺也是萌新(●ˇ∀ˇ●)
世界规则
- 全局
- 秋季时间设置为长或默认,秋季长一些对新手友好
- 冒险家死亡推荐设置为更改冒险家
- 冒险家
- 血量上限惩罚建议关闭
- 理智怪兽设置为默认
- 世界
- 冰猎犬群和火猎犬群关闭
- 野火设为无
- 猎犬袭击不建议关闭,可以设为很少,不然犬牙不好得
- 资源再生
- 个人推荐,想降低难度的话,只需要将胡萝卜调快一些即可
- 生物
- 别的可以不动,但是草壁虎转化必须关闭,不然你种的草乱跑很难受
- 想降低难度的话,推荐将猪设置多一些,别太多,不然就没意思了
世界生成
世界
- 分支:最多
- 环形:从不
这样设置的话会跟花瓣一样你在花瓣中间其它区域四散分开,就很少需要跨海了
资源
- 没啥好说的,就把资源中的萝卜调多一些
模组设置
推荐模组:
强烈推荐
- 防卡两招:物品堆叠+垃圾清理
- Global Positions:共享地图、查看玩家位置
- Show Me:查看物品信息
- Tips:左上角查看怪物到来倒计时
- Smart Minisign:箱子显示首个物品图标,方便分类
- Simple Health Bar DST:简易血条
- Fast Travel(GUI):快速在两个木牌之间传送,方便跑图
难度降低
从上到下逐渐不推荐
- More cooking:整租烹饪和喂鸟
- 六格装备栏:允许为护甲、衣服、护身符添加单独的装备槽
- 永久保鲜反鲜(不太推荐):冰箱永久保鲜,还可以返还新鲜度
- Multi Rocks(不推荐):挖矿概率掉落宝石且单个矿就可以挖很久很久出很多很多矿
- 45格物品栏(非常不推荐):除非你是刚玩,不然非常不推荐,物品栏那么多,谁还做背包啊,没难度了
设置好后就可以生成世界了
Klei操作
获取Klei用户ID
注意:挂好加速器或者科学上网
回到游戏主界面
点击账号(英文的话可以点击Account)
点击用户信息
保存用户信息下的Klei用户ID
方便设置管理员
获取服务器token
回到游戏主界面
点击账号(英文的话可以点击Account)
点击游戏
点击《饥荒:联机版》的游戏服务器
随便起个服务器名称(边貌似不允许设置中文)
创建好后你会发现有一条很奇怪的字母和特殊字符组成的token,复制保留下来
注意:看好自己服务器截止日期,我24年5余额4日创建的,结束日期是44年4月29日
地图文件操作
打开地图在本机的位置
有两种方式
第一种直接找到下面目录
C:\Users\当前用户文件夹\Documents\Klei\DoNotStarveTogether\编号就是一串数字\Cluster_数字
第二种,进入饥荒联机版游戏首页,然后点击左下角的数据(英文应该叫Data)
Cluster_数字
文件夹就是你的地图数据,如果你不知道哪个是的话。。。。粗暴点,都删了(记得备份)只保留你创建的就知道哪个是你刚创建的了进入
Cluster_数字
目录,并创建cluster_token.txt
文件,并将token扔进去进入
Cluster_数字
目录,并创建adminlist.txt
,并将Klei用户ID扔进去Cluster
重要文件目录解析(并非全部)(目录解析容可以不看,不影响开服)Caves
:地图资源、Master
:洞穴资源modoverrides.lua
:订阅的mod以及mod的配置信息backup
:备份日志信息
cluster.ini
:基本配置因为我也是萌新,所以我只写一些自己确定和方便修改的配置
- max_players:最多玩家人数
- pvp:玩家是否允许互殴
- cluster_password:房间密码
- cluster_description:房间描述
- cluster_name:房间名称
cluster_token.txt
:服务器tokenadminlist.txt
:管理员的Klei用户ID,一行一个
利用ssh连接到服务器,并进行下面操作
进入用户目录下
cd ~
查看是否有.klei文件夹
ls -al
若没有则需要依次创建
cd ~ mkdir .klei cd .klei mkdir DoNotStarveTogether
将
Cluster_数字
目录上传到服务器的~/.klei/DoNotStarveTogether
目录中即可若不知道~代表什么
可以用ssh连接好后进入到
~/.klei/DoNotStarveTogether
目录下并使用pwd
命令来查看例如我的目录就是
/home/steam/.klei/DoNotStarveTogether
我用的是filezilla来上传文件,看各位自己用啥都行,不想装软件的大神直接用scp命令吧
当然也可以直接使用免安装版、
注意:是将
Cluster_1
整体扔进去,包括这个目录
服务器操作
加载mod
如果你任务只有地图设置mod就完事的话那就大错特错了,这是个很容易踩坑的一点,我们还需要让服务器来下载并加载mod
获取mod的id
打开本机的
Cluster_数字\Caves
目录下,并找到modoverrides.lua
文件记住
workshop
后的纯数字,这个就是mod的id进入到steam下载目录下的mods目录下,我的是
~/software/dontstarve/mods
cd ~/software/dontstarve/mods
编辑
dedicated_server_mods_setup.lua
文件vim dedicated_server_mods_setup.lua
根据注释提示,可以通过下面的命令来设置mod
ServerModSetup("MOD的id")
按下esc,按下输入冒号
:
输入wq
即保存退出
大概就是这样
--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("1207269058") ServerModSetup("1216718131") ServerModSetup("1530801499") ServerModSetup("1595631294") ServerModSetup("1607644339") ServerModSetup("1607644339") ServerModSetup("1898292532") ServerModSetup("2287303119") ServerModSetup("2798599672") ServerModSetup("378160973")
编写启动脚本
#创建脚本文件
touch dontstarve_start.sh
#编辑脚本文件
vim dontstarve_start.sh
脚本文件写入以下内容
#!/bin/bash
steamcmd_dir="$HOME/steamcmd"
install_dir="$HOME/software/dontstarve"
cluster_name="Cluster_1"
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/bin64" || fail
run_shared=(./dontstarve_dedicated_server_nullrenderer_x64)
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: /'
注意:若只有32位支持,可以更改脚本中的,上面脚本是64位的
cd "$install_dir/bin64" || fail #和 run_shared=(./dontstarve_dedicated_server_nullrenderer_x64)
为
cd "$install_dir/bin" || fail #和 run_shared=(./dontstarve_dedicated_server_nullrenderer)
Tips:
vim一次性清除文件内所有内容
ggdG
不需要输入冒号
说明:
- gg:光标跳转到该文件的行首;
- dG:删除光标行及其以下行的全部内容。(注:d为删除,G为光标跳转到末尾行)
开放端口
UDP协议开放10888、10998、10999
TCP和UDP协议开放8767、27017
ps:林风亲测,不开放端口貌似也行,可以先不开放试试,如果没有搜到服务器再开放端口
启动服务器
启动服务器很简单,比较头疼的一点是如何将饥荒服务器置于后台启动,不然关闭了ssh服务器也就关了
所以这里有两个方案:
screen(推荐)
# 创建screen screen -S dontstarve # 运行服务器 bash ./dontstarve_start.sh # 当想要回到这个screen时可以这么玩 screen -r dontstarve # 关闭进程只需要进入screen后按下ctrl+c即可
nohup
自行搜索,比较麻烦,林风比较懒,尤其关闭进程很麻烦
查看日志
# 在启动时可以这么玩,但是不推荐,因为日志会越来越多,文件会越来越大
bash ./dontstarve_start.sh>logs.log
tail -f logs.log
常见问题
libcurl-gnutls.so.4:无法打开共享目标文件:没有这样的文件或目录
详细报错内容:
./dontstarve_dedicated_server_nullrenderer_x64./dontstarve_dedicated_server_nullrenderer_x64: : error while loading shared libraries: libcurl-gnutls.so.4: cannot open shared object file: No such file or directory
error while loading shared libraries: libcurl-gnutls.so.4: cannot open shared object file: No such file or directory
我们翻译一下
./dontstarve_dedicated_server_nullrenderer_x64./dontstarve_dedicated_server_nullrenderer_x64::加载共享库时出错:libcurl-gnutls.so.4:无法打开共享目标文件:没有这样的文件或目录。
加载共享库时出错:libcurl-gnutls.so.4:无法打开共享目标文件:没有这样的文件或目录
说白了就是没有libcurl-gnutls.so.4文件,林风百度了下发现,主要是有个依赖只有Ubuntu的apt源才能下载,centos的yum源没有,于是我在一个帖子上搜到了另一个方法,可以不需要使用Ubuntu也不需要make或换源的方法:
centos系统直接用软连接拉一下依赖即可
32位执行
ln -s /usr/lib/libcurl.so.4 /home/steam/software/dontstarve/bin/lib32/libcurl-gnutls.so.4
64位执行
ln -s /usr/lib64/libcurl.so.4.3.0 /home/steam/software/dontstarve/bin64/lib64/libcurl-gnutls.so.4
这里林风试过了,没用,后来看了下usr/lib64的目录才发现libcurl.so.4.3.0文件没有,反而有个更高版本的libcurl.so.4.5.0文件,所以如果还是不行的可以试试这个命令
ln -s /usr/lib64/libcurl.so.4.5.0 /home/steam/software/dontstarve/bin64/lib64/libcurl-gnutls.so.4
更新服务器
只需要走一遍steamcmd操作即可,有mod的话还需要重新写一遍mod的id或者直接备份然后copy一份即可
例如:
# 进入到steamcmd
./steamcmd.sh
# 设置安装目录
force_install_dir /home/steam/software/dontstarve
# 登录用户
login 用户名
# 更新应用
app_update 343050 validate
# 退出steamcmd
quit
# 进入到备份文件夹
cd ~/back/dontstarve
# 将备份的mod文件copy到指定目录
cp dedicated_server_mods_setup.lua /home/steam/software/dontstarve/mods
Tips:
我这里将备份的
dedicated_server_mods_setup.lua
文件扔到了~/back/dontstarve
里面,你们跟我的或许不一样,所以不要照抄,直接进你自己的备份目录即可
更新mod
重启下服务器即可,完全不需要重新进入steamcmd下载
关于本次开服
有人可能会问:为什么没有图片?
先前我图片都是扔在阿里云的oss上,怕有人恶意攻击刷流量之类的,就扔到了路过图床,但是有图片上传次数限制,所以,索性直接不加图片了,也是无奈之举。
最后感谢大家能看到这里,林风希望这篇文章能对你有所帮助,当然也希望大家能来我服务器里玩,直接在steam版的饥荒联机版中搜索林风即可