Don't Starve Together 私有服务器搭建
在 Linux 上玩饥荒联机版是通过 Proton 兼容层运行的,玩起来没什么么问题,但是联机使用自己本机建的公共服务器就会出现延迟过高,别人连进来没法一起开心的游戏。毕竟是兼容层里面的,也难怪。正好手里有服务器,所以就想顺手整个自建的私有饥荒服务器。
下面就是我自己搭建饥荒私有服务器的过程以及踩坑实录。
必备条件
- 云服务器一台
- Klei用户ID:按下面图片的流程就可以拿到了
- {% asset_img “Pasted image 20220324135501.png” “用户信息” %}
- {% asset_img “Pasted image 20220324135649.png” “KeliID” %}
- cluster_token
- {% asset_img “Pasted image 20220324135758.png” “游戏” %}
- {% asset_img “Pasted image 20220324135835.png” “服务器” %}
- {% asset_img “Pasted image 20220324135912.png” “创建服务器” %}
- 根据上面的连接就可以创建新的 cluster_token 了
- 存档文件
- 存档可以使用前面的网页里生成的
- 也可以使用自己本地游戏新建存档
Proton 6.3
可以适应 Linux 下的目录结构,直接在当前用户的$HOME
目录下就可以见到.klei
,里面就是每个存档的目录Proton 7
以上的在.steam/steam/steamapps/compatdata/322330/pfx/drive_c/users/steamuser/Documents/Klei/DoNotStarveTogether
下找到可以找到
部署流程
可以使用 饥荒联机版专用服务器搭建全流程Windows-Linux - 冰牛奶 的流程,包括了 Windows 和 Linux 的,不过我的有我自己的优化。
也可以直接用 GitHub - cuukenn/dontstarveserver: 饥荒linux服务器安装、启停、定时更新脚本 的脚本,可能更快捷。
安装依赖
# Ubuntu 服务器的话就使用这个吧
sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
# aliyun 的用户可以直接用这条,tencentyun 的就老实把前面的运行了
# 不知道 tencenyun 的镜像怎么定制的
sudo apt install libstdc++6:i386 libgcc1:i386 libcurl4-gnutls-dev:i386 screen
创建用户
创建个新用户,分离不同服务,避免相互权限干扰。
useradd steam
password steam
su steam
安装 steamcmd
国内的服务器下载安装可能会慢一些。
mkdir ~/steamcmd
wget -P ~/steamcmd https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
cd ~/steamcmd
tar -xvzf ~/steamcmd/steamcmd_linux.tar.gz
./steamcmd.sh \
+login anonymous \
+app_update 343050 validate \
+quit
部署游戏配置
服务器上的游戏存档目录在 ~/.klei/DoNotStarveTogether
下面,里面有各个档的目录,每个档下面目录结构如下:
├── Caves # 洞穴世界的目录
│ ├── backup
│ ├── leveldataoverride.lua
│ ├── modoverrides.lua # 使用的服务器 mod 列表,后面需要用
│ ├── save
│ ├── server_chat_log.txt
│ ├── server.ini
│ └── server_log.txt
├── Master # 地上世界的目录
│ ├── backup
│ ├── leveldataoverride.lua
│ ├── modoverrides.lua # 使用的服务器 mod 列表,后面需要用,但是内用和前面的那个基本一样
│ ├── save
│ ├── server_chat_log.txt
│ ├── server.ini
│ └── server_log.txt
├── adminlist.txt # 管理员 ID 存储文件
├── blocklist.txt # 黑名单 ID 存储文件
├── cluster_token.txt # cluster_token 就放这里面
└── cluster.ini # 当前存档的配置文件
cluster.ini
内容
[GAMEPLAY]
game_mode = survival # 游戏风格
max_players = 6 # 服务器支持的最大玩家数量,最大值 12
pvp = false # PvP
pause_when_empty = true # 没人服务器暂停
[NETWORK]
lan_only_cluster = false # 是不是局域网联机
cluster_intention = cooperative
cluster_password = 01days # 游戏密码
cluster_description = # 游戏描述
cluster_name = 01days的世界 # 游戏名
offline_cluster = false # 可不可以联机
cluster_language = zh
[MISC]
console_enabled = true # 控制台开启
# 下面的和洞穴世界分服务器有关,但是一般创建在一台服务器里没啥问题
[SHARD]
shard_enabled = true
bind_ip = 127.0.0.1
master_ip = 127.0.0.1
master_port = 10888 # 端口
cluster_key = defaultPass
初次运行 & mod 下载
存档和配置文件配置好了,就可以上传服务器,放在相应的位置了。
紧接着配置 mod。
在 ~/Steam/steamapps/common/Don't Starve Together Dedicated Server/mods
下
├── bin # 32位运行程序
│ ├── dontstarve
│ ├── dontstarve_dedicated_server_nullrenderer
│ ├── dontstarve.xpm
│ ├── lib32
│ ├── scripts
│ └── steam_appid.txt
├── bin64 # 64位运行程序
│ ├── dontstarve
│ ├── dontstarve_dedicated_server_nullrenderer_x64 # 主程序
│ ├── dontstarve.xpm
│ ├── lib64
│ ├── scripts
│ └── steam_appid.txt
├── cached_mod_manifests
├── data
│ └── ...
├── dontstarve.xpm
├── linux64
│ └── ...
├── mods # mod 都在里面
│ ├── dedicated_server_mods_setup.lua # 指定 mod 加载更新的配置文件
│ ├── INSTALLING_MODS.txt
│ ├── MAKING_MODS.txt
│ ├── modsettings.lua
│ └── ...
├── steamclient.so
├── ugc_mods
│ └── ...
└── version.txt
dedicated_server_mods_setup.lua
内容结构
--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")
这里使用的 ID 不一定就得自己去创意工坊去找,可以在游戏里自己添加,然后寻找 ~/.klei/DoNotStarveTogether/Master/modoverrides.lua
里面的 workshop-xxxxxx
,这里 xxxxxx
就是 ID,放进里面就可以了。
切换到 ~/Steam/steamapps/common/Don't Starve Together Dedicated Server/bin64/lib64
下运行 ./dontstarve_dedicated_server_nullrenderer_x64
,等运行完了看看有没有在 mods
目录下创建对应的 workshop-xxxxxx
目录,缺一个加载 mod 都会失败。
tencenyun 的话可能下载 mod 会有下不下来的,但是如果你只前在自己本地的游戏有创建过游戏存档,那你就可以从本地把 mod 都拿出来上传服务器。 关于本地 mod 的研究可以看 Steam版饥荒联机版 创意工坊下载mod的机制探索 - 哔哩哔哩 。 我个人对于的理解就是:
~/.steam/steam/steamapps/workshop/content/322330
- 所有的创意工坊 mod
- 解压了的是本地 mod
- 没解压的是
.bin
格式的压缩文件
~/.steam/steam/steamapps/common/Don't Starve Together/mods
- 里面是服务器 mod
参考资料
饥荒联机版专用服务器搭建全流程Windows-Linux - 冰牛奶 GitHub - cuukenn/dontstarveserver: 饥荒linux服务器安装、启停、定时更新脚本 Steam版饥荒联机版 创意工坊下载mod的机制探索 - 哔哩哔哩