> U酱收藏了一篇笔记,小兔报告说。
> 主要的内容是:
> 在云服务器上搭建饥荒联机版(Don't Starve Together)服务器。
第一步 安装Steamcmd
对于Ubuntu 16.04来说,可以用apt install steamcmd -y
直接安装steamcmd;
如果说什么E: 无法定位软件包steamcmd (E: Unable to locate package steamcmd)
的话,说明APT的软件源里面没有添加muitiverse
的仓库(例如阿里云)。
解决方案当然就是添加进去了,APT的软件源是写在文件/etc/apt/sources.list
文件里的,在里面加上multiverse:
这里采用阿里云的镜像站,其他镜像站也可;Ubuntu的codename,16.04是xenial,18.04是bionic,和文件里的其他行保持一致即可
deb http://mirrors.cloud.aliyuncs.com/ubuntu/ xenial multiverse deb-src http://mirrors.cloud.aliyuncs.com/ubuntu/ xenial multiverse deb http://mirrors.cloud.aliyuncs.com/ubuntu/ xenial-updates multiverse deb-src http://mirrors.cloud.aliyuncs.com/ubuntu/ xenial-updates multiverse
- 阿里云本身的话,打开
/etc/apt/sources.list.d/sources-aliyun-0.list
这个文件然后把里面相应的几行前的#
去掉即可)
手动安装参考官方文档,关键代码如下。并且需要用steamcmd.sh
的路径代替steamcmd
命令。
(其实使用steamcmd会产生一个Steam
文件夹,想让文件夹少一点的话,也可以一开始就解压到Steam文件夹里面)
apt install lib32gcc1 screen -y useradd -m -s /bin/bash steam su - steam mkdir steamcmd && cd steamcmd curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
第二步 安装服务端
这一步建议不要使用root用户运行,可以留在上一步的steam用户。
安装服务端不需要登录已购买游戏的steam账号。故采用匿名(Anonymous)登录即可。
steamcmd +login anonymous \ +force_install_dir ~/dstds \ +app_update 343050 \ +quit
- 这里采用steamcmd的脚本模式,效果相当于在steamcmd中按顺序运行每个
+
后的命令; \
为排版用,具体效果请询问渡渡鸟。- 这个命令同样也用于更新。
第三步 编写配置文件
概念:在服务器列表中能看到的世界称为"Cluster",意为群组;而其中的每一张地图叫做"Shard",意为分区。典型的含洞穴世界就是一个包含地上地下共两个Shard的一个Cluster。
Cluster里指定一个Shard作为Master(主服,一般就是地表服务器),其余的都是Slave(从服)。Slave的配置文件内容比较精简。
配置文件的位置在.klei/DoNotStarveTogether
,如图:
CLUSTER_NAME/ ├── cluster.ini ├── cluster_token.txt └── SHARD_NAME/ ├── modoverrides.lua ├── leveldataoverride.lua │ 或 worldgenoverride.lua └── server.ini
CLUSTER_NAME
:群组的名称,这里只是内部名称,因此不要使用特殊字符;cluster.ini
:群组的设置文件,在服务器列表里显示的信息可以在这里修改;cluster_token.txt
:由已购买的游戏产生的令牌,服务端必须拥有令牌才能运行;SHARD_NAME
:分区的名称。习惯上将地表命名为Master
,地下命名为Caves
;server.ini
:服务端的设置文件,主要是端口一类的,和游戏内容无关;*.lua
:如果设置了MOD,或者世界生成选项就需要对应的文件供服务端读取。
下面介绍各个文件的写法。注意要想正常使用这些文件,建议在SSH里用vim、nano等编辑器直接粘贴修改;如果要在Windows里编写的话,请用Notepad++并且选择UTF-8无BOM编码,一定不要用记事本。
cluster.ini
设主服和从服在两台不同的云服上。
主服需要完整的cluster.ini,例子如下:
[GAMEPLAY] game_mode = endless ; 游戏模式可选无尽endless,荒野wilderness,生存survival max_players = 4 ; 玩家上限,一般1Mbps可带4人 pvp = false ; 是否开启玩家间pvp pause_when_empty = true ; 服务器无人时暂停,建议开启 [NETWORK] cluster_intention = cooperative ; 表面上的服务器类型,似乎没什么实际影响 cluster_description = Antoher DST dedicated server ; 服务器在列表里显示的描述文 cluster_name = DST-DS ; 服务器在列表里显示的名字 cluster_password = ; 服务器的密码,不要的话可以跳过 [STEAM] steam_group_id = 33026301 ; 使服务器变成"组服务器",会在组员的列表里置顶显示 steam_group_admins = true ; steam组的管理员自动成为服务器管理员 steam_group_only = false ; true的话只有steam组员能够加入服务器 [SHARD] shard_enabled = true ; 开启这个才能让地上和地下连接 bind_ip = 0.0.0.0 ; 如果主从都在同一台机器上,填127.0.0.1 master_port = 10889 ; 对外的通讯端口,要让防火墙放行 cluster_key = zxcvbnm ; cluster暗号,所有shard需要保持一致
从服只需要下列的精简版:
[GAMEPLAY] game_mode = endless ; 和主服保持一致 [SHARD] master_ip = 8.8.8.8 ; 主服的IP地址,同一台机器用127.0.0.1 shard_enabled = true master_port = 10889 cluster_key = zxcvbnm ; 以上全部保持一致
cluster_token.txt
内容为形如pds-g^KU_********^H6q2zR9Kj6********************ePCsBfec=
的序列号。需要注意的是,虽然一个cluster_token.txt可以用在多个cluster里,但是同一个cluster在不同主机上的cluster_token.txt一定要一致。
server.ini
主服的例子
[NETWORK] server_port = 11000 ; 要求在10998-11018之间,不能重复 [SHARD] is_master = true ; 表明这是主服 [STEAM] master_server_port = 27018 authentication_port = 8768 ; 同样不能重复
从服的例子
[NETWORK] server_port = 11001 [SHARD] is_master = false name = Caves ; 除了主服外的shard都需要名称 [STEAM] master_server_port = 27019 authentication_port = 8769
leveldataoverride.lua或worldgenoverride.lua
影响世界的生成,地表服务器没有这个文件可以生成一个完全默认的世界;但是地下没有的话就会获得另一个地表……
lua文件可以通过在游戏里修改预设并建立世界来自动写好,然后在"我的文档"里寻找Klei/DoNotStarveTogether/Cluster_n/(n和存档在第几格对应),把里面的lua文件上传到服务器的对应位置即可。
worldgenoverride.lua
现在已经被leveldataoverride.lua
取代了,这里提一下它仍然可以生效而已。
- 对于所有的配置文件,要注意文件所有者!如果饥荒服务端在普通用户运行,而配置文件属于root用户,就可能读取不了。
请使用ls -al
来检查文件夹,下列的输出是正确的(均为steam用户所有):total 28 drwxrwxr-x 4 steam steam 4096 Nov 29 00:13 . drwxrwxr-x 3 steam steam 4096 Aug 17 10:21 .. drwxrwxr-x 4 steam steam 4096 Nov 27 10:01 Caves -rw-r--r-- 1 steam steam 631 Jul 23 19:15 cluster.ini -rw-r--r-- 1 steam steam 62 Jul 7 23:56 cluster_token.txt drwxrwxr-x 4 steam steam 4096 Nov 27 10:01 Master
- 万一发现里面混入了属于root的文件,请用root用户于此文件夹执行
chown steam:steam -R *
来修复(如果普通用户名为steam的话)
第四步 配置MOD
如果想要在服务器上配置mod的话,首先需要修改游戏安装目录里的mods/dedicated_server_mods_setup.lua
文件。
这个文件原先的内容是若干--
开头的注释,不需要理会。
安装mod的代码格式是
ServerModSetup("884395113") --古明地恋
引号内是MOD的创意工坊ID,可以很轻松地从网址里找到:
https://steamcommunity.com/sharedfiles/filedetails/?id=884395113
建议在代码后用--
来注释上MOD的名字,当想删除一个MOD时可以很方便地找到。
服务器装上MOD之后并不会自然启用。还需要在shard文件夹里放入modoverrides.lua
告诉服务器MOD的设置。这个lua文件同样可以在游戏里创造世界时生成。
里面的代码是由若干这样的块构成的:
["workshop-884395113"]={ configuration_options={ lan=0, power=1, system=1, vision=1, volume=0.1 }, enabled=true },
- 每个shard可以有不同的设置,例如让恋恋在地上处于伪自我系统
system=1
,地下处于无意识系统system=0
是完全可行的。 - 如果要禁用一个MOD,最快的办法是把它改成
enabled=false
- 其实可以利用
modoverrides.lua
和Notepad++的正则替换功能快速写出dedicated_server_mods_setup.lua
来,留给读者思考。
第五步 启动脚本和自动更新脚本
(自动更新脚本更新中,这里先摘录启动脚本)
- 下载启动脚本(更新自过时的官方脚本),建议直接下载到服务器上
wget https://gitlab.com/inactive_virus/auto_update_dst/raw/master/run_shard.sh
- 根据脚本内的说明,编辑文件最开始的变量信息(更新后会把这部分单独取出来,并且再写一个脚本来帮助填写这个文件)
INSTALL_DIR= SERVER_DIR= CLUSTER_NAME= SHARD_NAME= PREFIX=
- 为了让服务器在后台运行,我们需要使用screen来运行脚本。
screen bash run_shard.sh
- 先观察运行情况,如果没有出错,最终显示Sim paused.就可以用Ctrl+a 然后按d断开screen了。
- 别忘了防火墙。一般默认防火墙是关闭的,但是真诚建议把防火墙打开然后放行配置文件里写的对应port。ufw的具体用法请问渡渡鸟吧,别忘了给SSH端口22放行,不然可能再也连不上了。