0 背景
几个小伙伴一起玩饥荒,用的其中一个人的电脑作为主机,但是我连上去之后延迟爆高以至于动都动不了暴毙于青蛙嘴下。因此萌生了搭一个服务器的想法,正好有一个小伙伴有一台没有使用了的阿里云学生机,遂打起了心思。在征得他的同意后拿到了管理权限,重装上 CentOS 7.3,开干。
1 准备
1.1 官方配置要求
经过查询官方文档,了解到《饥荒联机版》的服务器基本要求如下:
- Internet (Upload) = 8Kbytes / player / s
- Ram = around 65Mbytes/player
而对 CPU 等其他的要求没有明确提到,显然阿里云的学生机跑一个6个玩家的饥荒联机版服务器是绰绰有余的。
1.2 我的搭建环境
- 一台最便宜的装了 CentOS 7.3 和宝塔面板的的阿里云学生机(单核 2G)。
- 购买了正版《饥荒联机版》的 Steam 账户。
- 一台能运行《饥荒联机版》的 Windows 电脑。
- 一组会在服务器后台敲代码的脑子和手。
2 安装 Steamcmd 并下载游戏
2.1 安装游戏本体
在服务器端运行的《饥荒联机版》也是需要使用 Steam 来安装并搭建服务器的,因此我们首先安装上命令行版本的 Steam,再安装游戏。
- 升级服务器并且安装所需环境
yum -y update yum install -y mailx postfix curl wget bzip2 gzip unzip python tmux glibc.i686 libstdc++ libstdc++.i686 libcurl.i686
关于提升 yum 下载速度,可以参考配置 yum 的阿里云镜像源。
- 创建用户
user add -m dst -p password sudo su dst #切换到这个用户
使用 root 用户运行 Steam 有风险,因此建议创建一个新的用户。代码中 ‘password’ 为设置的用户密码。
- 下载安装 Steamcmd 并安装游戏
mkdir ~/steamcmd cd ~/steamcmd #创建 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 #运行 Steamcmd 并下载饥荒联机版
- 检查依赖
cd ~/dst/bin ldd 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
错误的大概意思也能读懂,就是没有找到那个文件,我们这样解决:cp /usr/lib/libcurl.so.4 ~/dst/bin/lib32/libcurl-gnutls.so.4
2.2 安装 Mod
游戏的安装文件夹在/root/dst/,我们打开 /root/dst/mods/dedicated_server_mods_setup.lua 文件,这里的语法十分简单,在文件中原有的注释里我们就能读到。
我们在最下方添加代码:
ServerModCollectionSetup("1704583429") --添加一个 Mod 合集包,括号内为合集包的创意工坊 id ServerModSetup("360722606") --添加一个 Mod,括号内为 Mod 的创意工坊 id
这里的创意工坊 id 可以在 mod 的创意工坊页面的地址中找到。
Steamcmd 和《饥荒联机版》的游戏就已经安装完毕了,游戏启动后便会自动下载相关的 Mod。但是在此之前,我们还需要对游戏服务端进行配置。
3 配置游戏服务器
3.1 获取 token
这里的 token 可以认为是一种用来标识你的身份证明,表明你拥有这款游戏,这样才能正常运行服务器。
首先我们在电脑上打开 Steam 并运行游戏。进入游戏登录后,点击左下角的“账号”。
在接下来弹出来的网页中选择“游戏”。
单击右侧的“饥荒联机版的游戏服务器”
接下来填写一个服务器名称,然后选择“添加新的服务器”
接下来就会生成一串代码,就是我们需要的 token,将其复制下来并且保存,后面将会用到。
3.2 配置游戏文件
手动配置游戏相关设置,编写配置文件过于硬核,因此我们使用游戏客户端直接生成相应的配置文件。
首先我们在自己的电脑上,到创意工坊订阅好自己需要的 Mod 并下载。然后进入游戏,选择“创建游戏”,在其中调整好自己的相关设置以及要启用的 Mod,然后进入这个游戏存档,直到选择角色的界面。
接下来退出游戏到主页面,单击左下角的“数据”就可以直接到达存档文件夹,默认的存文件夹地址为\文档\Klei\DoNotStarveTogether\你的Steam id,在这个文件夹下找到 Cluster_1(数字为存档编号,根据电脑上已有的存档数而定,这里没有其他的存档,因此就是1),将这个文件夹复制出来。
由于服务器配置的原因,在这里我只准备配置 Master 而不准备配置 Cave,因此接下来将 Cluster_1 中的 Master 文件夹打包,然后上传到服务器的/root/.klei/DoNotStarveTogether/MyDediServer 目录下,解压形成 Master 文件夹。同时将本地目录中的 cluster.ini 文件上传到 MyDediServer 目录下。
然后在 MyDediServer 文件夹中新建一个名为 cluster_token.txt 的文件,将之前获取的 token 直接粘贴进去,保存。
4 启动游戏服务器
我们使用了 screen 程序来后台运行游戏服务端,因此我们先安装 screen 。
yum install screen
然后输入以下命令,进入游戏文件夹并启动游戏。
cd /root/dst/bin/ screen -S dst ./dontstarve_dedicated_server_nullrenderer -console -cluster "MyDediServer" -shard Master -monitor_parent_process $$
如果有显示了 [Steam] SteamGameServer_Init success
即说明启动成功。此时可以直接输入游戏的控制台命令。
此时按下 Ctrl + A + D 即可退出当前界面返回 SSH。
若要再次进入游戏服务端后台,先输入命令 screen -ls
查看正在运行的终端 pid,然后输入 screen -r [pid]
即可进入程序的管理后台。如果在 screen -ls
的结果后标记为 Attached
,说明当前终端有其他窗口打开,则输入 screen -r [pid] -Rd
抢占即可进入。
如果要关闭服务器,则在游戏服务端控制台按下 Ctrl + C 即可。
至于游戏控制台命令,可以到游戏官方 Wiki 查询。
5 一些其他的操作
5.1 添加管理员
在 /root/.klei/DoNotStarveTogether/MyDediServer/ 目录中新建一个名为 adminlist.txt 的文件,然后将你要设为管理员的玩家的 Klei ID (KU_开头的一串字符)填进去,一行一个,然后保存即可。
5.2 无法直接通过 c_connect() 命令加入游戏/游戏真延迟过大
刚开始的时候我连接到游戏服务器延迟极高,但是直接 ping 服务器地址延迟一直在 100 ms 以内。尝试多种方法后发现,可能是由于云服务器端口设置问题,在使游戏端口(默认为10999)的 TCP 与 UDP 协议均开放后,再连接到服务器延迟便降了下来。