侧边栏壁纸
  • 累计撰写 1 篇文章
  • 累计创建 0 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux 饥荒服务器搭建

Administrator
2026-01-31 / 0 评论 / 0 点赞 / 17 阅读 / 0 字

Linux 饥荒服务器搭建

服务器搭建使用 Ubuntu 20.04 版本,其他版本未经测试。

安装 SteamCMD 及 Don’t Strave Together Dedicated Server

  1. 为方便管理,首先新建用户 dst,并切换至新建的用户。

     sudo useradd dst -m -d /home/dst -s /bin/bash
     #新建 dst 用户,并设置用户家目录/home/dst,设置用户登录 shell 为 bash
     sudo passwd dst
     #修改 dst 用户的登录密码
     sudo usermod -aG sudo dst
     #将新建的 dst 用户加入 sudo 组
     su - dst
     #切换至 dst 用户并切换目录至 dst 用户家目录
    image-20260127183123949
  2. 安装 SteamCMD 及 Don’t Strave Together Dedicated Server,参考 https://developer.valvesoftware.com/wiki/SteamCMD#Ubuntu

     mkdir ~/steamcmd
     #在当前用户 dst 家目录下创建 steamcmd 文件夹
     cd ~/steamcmd
     #进入 steamcmd 文件夹内
     sudo apt-get install lib32gcc-s1 && sudo dpkg --add-architecture i386 && sudo apt-get update && sudo apt-get install lib32stdc++6 && sudo apt-get install libcurl4-gnutls-dev:i386
     #安装 SteamCMD 所需的依赖,以上命令为 64 位系统命令,若位 32 位系统,将 apt-get install lib32stdc++6 修改为 apt-get install libgcc1
     wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
     #下载 Linux 版 SteamCMD
     tar -xvzf steamcmd_linux.tar.gz
     #解压 Linux 版 SteamCMD
     ./steamcmd.sh +force_install_dir ~/dst +login anonymous +app_update 343050 validate +quit
     #安装 SteamCMD,其中:
     #./steamcmd.sh:为运行 SteamCMD
     #force_install_dir ~/dst:指定安装目录为当前用户家目录下的 dst 文件夹,若不指定,在安装目录为~/Steam/steamapps/common/
     #login anonymous:为以匿名的方式登录 steam 服务器
     #app_update 343050:安装 ID 为 343050 的游戏,该游戏为 Don't Starve Together Dedicated Server,可在 https://developer.valvesoftware.com/wiki/Zh/Dedicated_Servers_List 查看
     #validate:验证已安装文件的完整性
     #quit:在完成所有操作后退出 SteamCMD
    image-20260127190930595
    image-20260127191023803

运行 Don’t Strave Together Dedicated Server 并检查依赖

 cd ~/dst/bin
 #切换到 Don’t Strave Together Dedicated Server 的 bin 安装目录
 ldd dontstarve_dedicated_server_nullrenderer
 #查看是否缺失依赖
 #若缺失依赖,如下图中缺失对应依赖,重新执行第一部分中步骤 2 中安装 SteamCMD 所需的依赖命令即可安装
 #若存在步骤 2 中安装 SteamCMD 所需的依赖命令中未涉及到的依赖,apt-get install <对应依赖>
 ./dontstarve_dedicated_server_nullrenderer
 #执行启动饥荒服务器

执行启动饥荒服务器命令后,若出现 Your Server Will Not Start 字样表明服务器安装成功,按 CTRL+C 停止服务器。

image-20260127200915770
image-20260127200116949
image-20260127200520737

配置启动世界

启动森林、洞穴

 cd ~/dst/bin
 ./dontstarve_dedicated_server_nullrenderer -console -cluster MyDstServer_001 -shard Master
 #启动森林,其中:
 #./dontstarve_dedicated_server_nullrenderer:启动饥荒服务器
 #-console:启用控制台模式
 #-cluster MyDstServer_001:指定服务器集群名称
 #-shard Master:指定当前启动的是森林服务器
 ./dontstarve_dedicated_server_nullrenderer -console -cluster MyDstServer_001 -shard Caves
 #启动洞穴
 #-shard Caves:指定当前启动的是洞穴服务器

执行以上命令时,先执行启动森林命令,当日志中出现 Your Server Will Not Start 时,表明启动成功,随后按 CTRL+C 停止服务器后再次执行启动洞穴命令,当日志中出现 Your Server Will Not Start 时,表明启动成功,随后按 CTRL+C 停止服务器。

此时,查看 ~/.klei/DoNotStarveTogether/ 下的文件即可查看到创建的存档集群文件。

 ls ~/.klei/DoNotStarveTogether/
 ls ~/.klei/DoNotStarveTogether/MyDstServer_001/
image-20260127203236402

配置存档(包括存档内各文件介绍)

  1. 在本地创建存档,注意要添加想要安装服务器 mod,生成世界后在选人界面即可退出;

    image-20260127203806492
  2. 此时打开创建的存档的文件夹,如此处显示的存档文件夹为 Cluster_3

    image-20260127203826262
    image-20260127203831447
  3. 此时,在存档文件夹中,存在三个文件或文件夹,其中 Caves 文件夹为洞穴存档,Master 文件夹为森林存档,cluster.ini 为服务器集群相关配置文件,在该文件夹中可自行创建如下文件以补充相关配置:

    • cluster_token.txt必须):用于保存 Klei 服务器令牌,获取该令牌方式如下:

      • 登录科雷网站 https://accounts.klei.com/account/game/list

      • 在该 游戏 页面中点击 《饥荒联机版》的游戏服务器

        image-20260127203843363
      • 在该页面添加新服务器,并获取到对应的 Klei 服务器令牌。

        PixPin_2026-01-26_21-46-03
    • adminlist.txt:用于保存服务器管理员 Klei_ID,每行一个 Klei_ID,Klei_ID 获取方式如下:

    • blocklist.txt:用于保存被拉黑的成员的黑名单 Klei_ID,每行一个 Klei_ID,用于 Ban 用户。

    • whitelist.txt:用于保存服务器白名单 Klei_ID,每行一个 Klei_ID。

  4. cluster.ini:集群配置

     [GAMEPLAY]
     ;游戏模式,可以选择survival(生存)、endless(无尽)、wilderness(荒野)
     game_mode = survival
     ;最大玩家数量
     max_players = 6
     ;是否开启玩家对战
     pvp = false
     ;服务器内没有玩家时是否暂停
     pause_when_empty = true
     ​
     [NETWORK]
     ;是否仅通过局域网访问,设置为false表明服务器可以通过互联网访问
     lan_only_cluster = false
     ;设置服务器密码
     cluster_password = 
     ;服务器描述
     cluster_description = 
     ;服务器名称
     cluster_name = test_world
     ;服务器是否离线,设为false可在在线服务器列表发现,设为true则只能通过直连IP连接
     offline_cluster = false
     ;服务器默认语言
     cluster_language = zh
     ;云存档ID,每个新世界自动随机生成,是存档的唯一标识符
     cluster_cloud_id = 603A4A7966A869E3
     ​
     [MISC]
     ;是否运行游戏内使用管理员控制台,true表示允许
     console_enabled = true
     ​
     ;以下配置是使得森林、洞穴协同工作的配置
     [SHARD]
     ;true表示允许运行多层世界,若为false表示只运行森林
     shard_enabled = true
     ;服务器进程监听本地IP
     bind_ip = 127.0.0.1
     ;主世界的IP地址
     master_ip = 127.0.0.1
     ;主世界监听端口
     master_port = 10888
     ;世界之间内部通信的密码
     cluster_key = defaultPass
  5. Master 文件夹,Caves 文件夹

    • backup:自动备份文件夹。

    • save:存档文件夹。

    • leveldataoverride.lua:世界生成配置文件,可以控制世界生成预设。

    • modoverrides.lua:世界模组配置。

    • server.ini:世界服务器配置。

       [NETWORK]
       ;世界端口
       server_port = 10999
       ​
       [SHARD]
       ;标识是否是主世界
       is_master = true
       ​
       [ACCOUNT]
       ;是否编码用户路径,设置为true可防止因玩家名称包含特殊字符导致的路径问题
       encode_user_path = true
    • server_chat_log.txt:服务器的聊天日志文件。

    • server_log.txt:服务器日志。

上传存档

  1. 打开本地存档,将存档放入 ~/.klei/DoNotStarveTogether/MyDstServer_001/ 文件夹下;

    记得之前配置启动世界的命令吗,以启动森林世界命令为例:

     ./dontstarve_dedicated_server_nullrenderer -console -cluster MyDstServer_001 -shard Master

    该命令中的参数 -cluster MyDstServer_001 中,MyDstServer_001 为自定义的集群,或者说是存档的文件夹名,若直接将整个存档文件上传到 ~/.klei/DoNotStarveTogether/ 文件夹下,假设此时存档的文件夹名为 Cluster_1,那么需要修改命令为:

     ./dontstarve_dedicated_server_nullrenderer -console -cluster Cluster_1 -shard Master
  2. 若是云服务器,可以使用官方上传方式或 scp、sftp 等方式上传;

    • 使用 scp 上传存档到目标位置;

       cd C:\Users\<userName>\Documents\Klei\DoNotStarveTogether\一串数字\存档名
       scp -r .\* UserName@服务器IP:/home/dst/.klei/DoNotStarveTogether/MyDstServer_001
       #以上命令为使用密码上传
       scp -i "本地存放私钥位置" -r .\* UserName@服务器IP:/home/dst/.klei/DoNotStarveTogether/MyDstServer_001
       #以上命令为使用密钥登录上传
       ​
       #scp -i "本地存放私钥位置" -r 源文件 目标文件
       #-i "本地存放私钥位置":使用私钥登录
       #-r:迭代上传
       #源文件:指定要复制的源文件
       #目标文件:要上传的文件的位置
       #对于源文件和目标文件,若文件位置在本地,则直接填写文件在本地的路径,若为远程服务器,则格式为 UserName@服务器 IP: 要上传到位置
      image-20260127213820241
    • 使用 sftp 上传存档到目标位置,推荐使用 WinSCP 工具,该工具亦可使用 scp 等上传,下载地址为:https://winscp.net/eng/index.php

      • 登录

        image-20260127215139460
      • 上传文件,左边为本地文件,右边为服务器文件,将左边本地文件拖入到右边对应的文件夹内即可。

        image-20260127215404200

上传 mod

  1. dedicated_server_mods_setup.lua:DST 专服务器的 mod 自动下载配置文件(该文件需要上传至服务器mods目录下,如此处的目录为 ~/dst/mods/dedicated_server_mods_setup.lua):

     ServerModSetup("id")
     --配置一个特定的mod,id需修改为该mod的WorkshopID,每行一个
     --ServerModCollectionSetup("id")
     --配置一个合集的mod,id需修改为该mod合集的WorkshopID,每行一个
     --若使用mod集合,去掉前面的"--",若不使用则无需去掉,特定mod同理
    • 访问要添加的 mod 的创意工坊;

    • 查看对应的 URL 中参数 id 的值。

      image-20260127211130043
    • 获取 mod 或 mod 合集的 WorkshopID 方式二:

      • 再创建存档时,选定了 mod;

      • 查看存档中 Master 文件夹或 Caves 文件夹中的 modoverrides.lua 文件;

      • modoverrides.lua 文件中存在添加的 mod 的 WorkshopID。

        image-20260127211832257
    • 最后形成文件如下:

      image-20260127212145089
    • 将该文件以上传存档同样的方式上传至服务器 mods 文件夹内。

  2. 然而该方式因为网络波动等因素,存在有些 mod 无法下载或下载慢,可以在本地下载好后上传至目标文件夹内:

    • 在本地 steam 安装目录中找到文件夹 steam安装目录/steamapps/workshop/content/322330,该目录下即为本地中下载的 mod。

    • mod 对应的代码可以在 modoverrides.lua 文件中获取。

    • mods 文件夹中,将第一步中本地 mod 中存档要使用的 mod 上传至该目录下(注意,要修改mod文件夹的名字,文件夹数字名之前需要增加 workshop-)。

       find . -maxdepth 1 -type d -regex './[0-9]+' | while read dir; do mv "$dir" "workshop-${dir#./}"; done
      image-20260127224819370
      image-20260127224803435

使用脚本一键启动服务器

  1. 在服务器中创建文件 dst_screen.sh,写入脚本内容(脚本使用 AI 生成,未完全测试稳定性);

  2. 授予脚本执行权限并使用脚本。

     chmod +x dst_screen.sh
     ./dst_screen.sh start
     #启动服务器
    image-20260127231311573

控制台命令

直连代码:

 c_connect("ip",端口,"密码")
 #没密码可以不填密码,格式为 c_connect("ip", 端口, "")
 #端口为 Master 文件夹内 server.ini 文件显示的端口
image-20260127232106540

全体复活:

 for k,v in pairs(AllPlayers) do v:PushEvent('respawnfromghost') end

单人复活:

 for _, v in ipairs(AllPlayers) do if v.name == '待复活玩家名字' and v:HasTag('playerghost') then v:PushEvent('respawnfromghost') end end

回档:

 c_rollback(待回档的天数)

保存:

 c_save()


0

评论区