在云服务器搭建部署私人饥荒联机版游戏服务器 [2025.10.3][ubuntu 24.04][腾讯云2核2G服务器]

频繁断联, 看不到内存占用和流量使用情况, 界面难用.

SB 阿里云, 配完不要了, 又转去腾讯云了.

相同配置的腾讯云能跑起来, 直接源文件打包到阿里云就爆了...

你看他还在运行中, 实际已经死掉了, 重启(长达数分钟的关停中...)后有概率恢复.

文章目录

    • [1. 环境安装](#1. 环境安装)
    • [2. 存档配置](#2. 存档配置)
      • [1. 创建存档](#1. 创建存档)
      • [2. 获取 tokens](#2. 获取 tokens)
      • [3. 添加管理员权限](#3. 添加管理员权限)
      • [4.订阅 mod](#4.订阅 mod)
      • 5.开放服务器端口
    • [3. 服务器启动脚本](#3. 服务器启动脚本)
    • [4. 可能的问题](#4. 可能的问题)
      • [1. 饥荒更新后搜索不到原来的服务器](#1. 饥荒更新后搜索不到原来的服务器)
      • [2. 提示服务器模组版本低](#2. 提示服务器模组版本低)
    • 参考链接:

1. 环境安装

适用 Ubuntu 24.04 64 位, 不一样的话前期依赖可以让 gpt 解决.

  1. 安装依赖

    • 启用 i386 架构并 update apt, 安装依赖 (这里图省事, 属于超量安装)

      bash 复制代码
      sudo dpkg --add-architecture i386
      sudo apt update
      sudo apt install -y lib32gcc-s1 lib32stdc++6 zlib1g:i386 libcurl4:i386 libc6:i386 libstdc++6:i386 libgcc1:i386  libcurl3-gnutls:i386
    • 安装 steamcmd

      bash 复制代码
      mkdir ~/steamcmd/
      mkdir ~/server_dst/
      cd ~/steamcmd/
      wget "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz"
      tar -xvzf steamcmd_linux.tar.gz
      rm steamcmd_linux.tar.gz
  • 验证

    装完 steamcmd 后, 看看缺什么依赖:

    bash 复制代码
    ldd ~/steamcmd/linux32/steamcmd

    如果还缺什么, 建议直接扔给 gpt 解决.

  • 运行

    执行自带的启动脚本, 进入 steamcmd:

    bash 复制代码
    cd ~/steamcmd
    ./steamcmd.sh

    会进入漫长的启动环节, 和 windows 中 steam 启动的更新流程差不多.

    结束后进入 steamcmd 的交互界面:

    bash 复制代码
     Steam>

    选择安装文件夹位 server_dst (务必用绝对路径, steam 无法解析 ~ . ... 这些 linux 的相对符号), 匿名登录, 然后安装饥荒服务端, 饥荒对应代码是 343050, 安装结束后 quit 退出 steamcmd:

    bash 复制代码
    force_install_dir /home/username/server_dst
    login anonymous
    app_update 343050 validate

2. 存档配置

先查一下缺不缺依赖:

bash 复制代码
ldd ~/server_dst/bin/dontstarve_dedicated_server_nullrenderer

# ldd ~/server_dst/bin/dontstarve_dedicated_server_nullrenderer_x64
# 这是 64 位版本

有问题扔给 gpt 解决

~/server_dst/bin下分别执行:

bash 复制代码
./dontstarve_dedicated_server_nullrenderer -console -cluster Cluster_1 -shard Master
./dontstarve_dedicated_server_nullrenderer -console -cluster Cluster_1 -shard Caves

分别均会看到 "Your Server Will Not Start", 然后 ctrl + c 停止.

就会在 ~/.klei/DoNotStarveTogether/ 中就生成了一个 Cluster_1 文件夹,该文件夹下有名为 MasterCaves 的两个子文件夹,这两个文件夹分别是地上和洞穴的配置目录。

Cluster_1是存档名. 更详细参数在: LINK

到这里, 存档的文件就建好了, 接下来就是往存档里填东西.

eg: 这一步你也可以选择 mkdir 去建, 只要路径名和你后面启动服务器时传的参数一致就行. 这一步还有个作用就是最后检查一下环境依赖.

接下来就可以按照 LINK, 去写存档的选项文件, 但太麻烦. 这里选择在 windows 的游戏中创建好存档, 在传入服务器.

1. 创建存档

在 windows 的游戏中正常创建存档, 到选择人物的界面就可以退出了.存档在C:\Users\username\Documents\Klei\DoNotStarveTogether\1477698797\Cluster_1. 用这个文件夹去替换上面的 Cluster_1, 可以用 sftp, ssh也可以直接传.

这考虑几个文件, 关于这些文件的详细设置, 见 LINK:

  1. ~/.klei/DoNotStarveTogether/Cluster_1/<Master/Caves>/<worldgenoverride.lua/leveldataoverride.lua

    存放世界生成选项的文件, 就是通过 windows 生成世界时候的一堆选项. 已经被生成.

  2. ~/.klei/DoNotStarveTogether/Cluster_1/cluster.ini

    包含 overworld 和 caves 两个服务器的设置.

  3. ~/.klei/DoNotStarveTogether/Cluster_1/<Master/Caves>/server.ini

    每个服务器独立的设置.

2. 获取 tokens

访问 accounts.klei.com 获取 tokens, 同时, 配置服务器也是在这.

登陆后选择 主页 -> 游戏 -> 饥荒 -> 添加新服务器. 得到 pds 开头的一串.

在服务器的 Cluster_1 文件夹下创建文件 cluster_token.txt, 将服务器 token 保存到文件中

bash 复制代码
echo 你的得到的 token > ~/.klei/DoNotStarveTogether/Cluster_1/cluster_token.txt

#cat ~/.klei/DoNotStarveTogether/Cluster_1/cluster_token.txt
#进行检查

3. 添加管理员权限

accounts.klei.com 找到自己的 klei ID, 添加到 ~/.klei/DoNotStarveTogether/Cluster_1/adminlist.txt. 添加多个直接换行就行.

4.订阅 mod

  • .klei/DoNotStarveTogether/Cluster_1/<Master/Caves>/modoverrides.lua

    这是存档内 mod 的设置文件, 在 windows 中生成世界时已经设置, 想要调整, 可以到 ~/server_dst/mods/workshop-modID/modinfo.lua 或者 ~/server_dst/ugc_mods/Cluster_1/Caves/content/322330 中查看信息.

  • ~/server_dst/mods/dedicated_server_mods_setup.lua这个告诉服务器要下载哪些 mod, 可以后续再选择是否要在 modoverrides.lua 中启用并设置. 因为 Cluster_1 是从 windows 中复制来的, 现在其为空, 我们要把 modoverrides.lua 中对应的 mod 写入.

    bash 复制代码
    ServerModSetup("ID") # ID 就是 modoverrides.lua 中的 workshop-ID
    #每行一个, 行尾无任何符号
    
    ServerModCollectionSetup("ID") # 下载创意工坊中的 mod 集合. 一般用不到
    
    # 注意到, mod ID 就是 steam mod 的网址中最后的一串数字

后续要添加 mod, 先关闭服务器, 直接在 ~/server_dst/mods/dedicated_server_mods_setup.lua 中添加 ID, 再在.klei/DoNotStarveTogether/Cluster_1/<Master/Caves>/modoverrides.lua 中添加启用, 具体设置就自己后来再加了:

json 复制代码
-- mod name
["workshop-modid"]={
    configuration_options={
    },
    enabled=true 
} 

设置完重启服务器就行.

5.开放服务器端口

txt 复制代码
# 饥荒端口,UDP协议
~/.klei/DoNotStarveTogether/Cluster_1/cluster.ini 中的 master_port。
~/.klei/DoNotStarveTogether/Cluster_1/Master/server.ini 中的 server_port。
~/.klei/DoNotStarveTogether/Cluster_1/Caves/server.ini 中的 server_port
# steam端口,TCP+UDP协议
~/.klei/DoNotStarveTogether/Cluster_1/Caves/server.ini 中的 master_server_port、authentication_port

在云服务器的控制台开放. 我是懒人就直接 udp + tcp 的 ipv4 全开了, 谁没事攻击你一个私人游戏服务器.

3. 服务器启动脚本

  • ~下新建启动脚本:

    bash 复制代码
    #!/bin/bash
    
    steamcmd_dir="$HOME/steamcmd"
    install_dir="$HOME/server_dst"
    cluster_name="Cluster_1" #存档名
    dontstarve_dir="$HOME/.klei/DoNotStarveTogether" #这两个是 -persistent_storage_root 和 -conf_dir 的默认值
    
    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/bin" || fail
    run_shared=(./dontstarve_dedicated_server_nullrenderer)
    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: /'

    并给权限:

    bash 复制代码
    chmod a+x start.sh

    这里走的是 32 位, 要走64位, 改为如下, 可能要新依赖.

    bash 复制代码
    cd "$install_dir/bin64" || fail
    run_shared=(./dontstarve_dedicated_server_nullrenderer_x64)

    ~下运行启动:

    bash 复制代码
    nohup ~/start.sh>server_dst.log 2>&1 &

    日志在 ~/server_dst.log, 通过 tail -f server_dst.log 查看

    要停止的话, 查找进程号, 再 kill

    bash 复制代码
    ps -ef | grep don
    kill 找到的进程号

    也可以 htop 选择要杀死的进程, 更直观.

4. 可能的问题

在维护我自己的服务器的过程中不断更新...

1. 饥荒更新后搜索不到原来的服务器

游戏客户端更新了,服务器没更新就会出现版本不一致,从而导致搜索不到服务器,这个时候我们需要去把服务器也更新一遍.

进入 steamcmd, 再跑一边 dst 的安装流程.

bash 复制代码
~/steamcmd/steamcmd.sh +login anonymous +force_install_dir /home/username/server_dst +app_update 343050 validate +quit
## 务必用绝对路径

注意 ! ! !

这个操作可能会清空模组设置. 请备份文件:

~/server_dst/mods/dedicated_server_mods_setup.lua

~/.klei/DoNotStarveTogether/Cluster_1/Master/modoverrides.lua

~/.klei/DoNotStarveTogether/Cluster_1/Caves/modoverrides.lua

2. 提示服务器模组版本低

可能是服务器 mod 版本低, 升级一下就行.

也有可能是你本地 mod 版本低, 检查网络环境, 是不是启动时本地 mod 没更新成功. 到自己的模组管理那里看看, 模组如果不正常显示(不显示名字, 显示 workshop - ID), 那就是你本地的问题了.

参考链接:

  1. https://developer.valvesoftware.com/wiki/SteamCMD
  2. https://steamcommunity.com/sharedfiles/filedetails/?id=590565473
  3. https://steamcommunity.com/sharedfiles/filedetails/?id=591543858
  4. https://zhuanlan.zhihu.com/p/625645476
  5. https://blog.ttionya.com/article-1233.html
  6. https://blog.ttionya.com/article-1235.html
  7. https://zhuanlan.zhihu.com/p/146379848
  8. https://blog.csdn.net/2201_75556881/article/details/145100458
相关推荐
HELLOMILI2 小时前
[UnrealEngine] 虚幻引擎UE5地形入门指南 | UE5地形教程(UE5 Terrain)
游戏·ue5·游戏引擎·虚幻·虚幻引擎·unreal engine
欢鸽儿3 小时前
Vivado综合通关指南:从IP打包失败到工具崩溃的四重考验
linux·ubuntu·fpga
青草地溪水旁9 小时前
EPOLLONESHOT事件类型和ET模式有什么区别?
服务器·网络·c++·epoll
林开落L9 小时前
Linux 进程信号:从进阶特性到实战应用(下)
linux·运维·服务器·进程信号
初听于你10 小时前
缓存技术揭秘
java·运维·服务器·开发语言·spring·缓存
云手机掌柜11 小时前
技术深度解析:指纹云手机如何通过设备指纹隔离技术重塑多账号安全管理
大数据·服务器·安全·智能手机·矩阵·云计算
恒悦sunsite12 小时前
Ubuntu之apt安装ClickHouse数据库
数据库·clickhouse·ubuntu·列式存储·8123
口嗨农民工13 小时前
win10默认搜索APP和window设置控制命板
linux·服务器·c语言
河南博为智能科技有限公司13 小时前
动力环境监控主机-全方位一体化监控解决方案
运维·服务器·人工智能·物联网·边缘计算