news 2026/9/18 19:51:15

阿里云Ubuntu部署饥荒联机版专用服务器完整教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
阿里云Ubuntu部署饥荒联机版专用服务器完整教程

1. 为什么选择阿里云Ubuntu部署饥荒联机版服务器

1.1 自建服务器的核心动机

玩过饥荒联机版的朋友都知道,这游戏最舒服的体验就是几个人长期在一个固定世界里慢慢发展,建家、打Boss、过四季。但问题来了——官方服务器延迟高、Mod管理不灵活、世界存档不在自己手里,而且一旦房主下线,其他人就全被踢出去了。我最早是几个人用本地主机开房间玩,结果每次都要等房主上线,后来换过各种第三方平台,要么限制人数,要么Mod装不了,要么存档丢了找不回来。

自己租一台云服务器来跑饥荒联机版专用服务器(Dedicated Server),是目前最稳妥的方案。阿里云的ECS实例在国内访问延迟低,Ubuntu系统对SteamCMD的支持非常成熟,整个部署流程也不算复杂。这篇文章我会把从购买服务器到多人成功联机的完整过程拆开讲,包括踩过的坑和参数选择的理由,你照着做基本能一次跑通。

1.2 适合谁来参考这套方案

这套方案适合三类人:一是想和朋友长期稳定联机、不想受房主在线时间限制的玩家;二是有一定Linux基础、愿意花半小时折腾一次换长期省心的技术爱好者;三是想顺便练手云服务器运维的学生或开发者。如果你完全没碰过Linux命令行,也不用怕,我会把每条命令的作用都解释清楚,你复制粘贴也能跑起来。

需要提前说明的是,饥荒联机版专用服务器的性能需求并不高。我实测下来,4人以内的小型世界,2核4G的实例完全够用,甚至2核2G也能跑,只是洞穴和地面同时开启时内存会紧张一些。后面我会给出具体的配置建议和参数计算。

1.3 整体部署路线概览

整个流程可以拆成六个阶段:购买并初始化阿里云ECS实例、配置Ubuntu基础环境、安装SteamCMD并下载饥荒服务端、生成世界配置和集群令牌、配置Systemd守护进程实现开机自启、最后是Mod管理和日常维护。每个阶段都有一些容易出错的细节,比如安全组端口开放、集群令牌的获取方式、洞穴分片的配置等,我会逐一展开。

2. 阿里云ECS实例选购与Ubuntu系统初始化

2.1 实例规格与镜像选择

先说配置。饥荒联机版服务端本质上是单线程为主的程序,地面和洞穴各占一个进程,所以CPU核心数比单核频率更重要。我的建议是:

玩家规模推荐规格内存带宽系统盘
2-4人2核2G2GB3Mbps40G ESSD
4-6人2核4G4GB5Mbps40G ESSD
6人以上+多Mod4核8G8GB5Mbps60G ESSD

带宽这块要重点说一下。饥荒联机版的网络同步数据量不大,但延迟敏感。3Mbps带宽支撑4人联机绰绰有余,但如果Mod很多、世界实体数量爆炸,同步数据会增大,建议留5Mbps余量。地域选择上,选你和朋友们物理距离最近的地域,比如大家都在华东就选杭州或上海。

镜像选择Ubuntu 22.04 LTS 64位。为什么不用20.04?因为22.04的glibc版本更新,SteamCMD的兼容性更好,而且长期支持到2027年。别选CentOS,虽然也能跑,但SteamCMD在Ubuntu上的社区文档和踩坑记录最丰富,出问题好查。

2.2 安全组端口配置

这是新手最容易卡住的地方。饥荒联机版需要开放的端口分两类:

  • UDP 10999:地面世界的游戏通信端口
  • UDP 10998:Steam主查询端口(用于服务器列表展示)
  • UDP 27015:Steam查询端口
  • UDP 10888:如果开启洞穴,洞穴分片的通信端口

如果你还想要Steam创意工坊自动更新Mod,需要额外开放TCP 27016(可选)。

在阿里云控制台的"安全组"里添加入方向规则,协议类型选"自定义UDP",端口范围填10998/10999,授权对象填0.0.0.0/0。洞穴的话再加10888/10888。这里有个坑:很多人只开了10999,结果朋友能连上但服务器不出现在Steam列表里,就是因为10998没开。

注意:安全组规则修改后立即生效,不需要重启实例。但如果你的服务器同时装了ufw防火墙,还需要在系统内放行对应端口,两层都要开。

2.3 系统初始化与基础环境

用SSH连上服务器后,先做几件基础事。第一是更新系统包并安装必要工具:

sudo apt update && sudo apt upgrade -y sudo apt install -y lib32gcc-s1 lib32stdc++6 libcurl4-gnutls-dev wget screen vim

lib32gcc-s1lib32stdc++6是SteamCMD运行必需的32位库,缺了会报"error while loading shared libraries"。screen用于后台保持会话,虽然我们最终会用Systemd管理,但调试阶段screen很方便。

第二是创建一个专用用户来跑服务端,不要用root直接跑,这是安全习惯:

sudo useradd -m -s /bin/bash steam sudo passwd steam

给steam用户设个密码,后面切换过去操作。用专用用户的好处是权限隔离,即使服务端被攻击也不会影响系统关键文件。

第三是调整文件描述符限制。饥荒服务端在实体多的时候会打开大量文件句柄,默认的1024可能不够:

sudo vim /etc/security/limits.conf

在文件末尾加上:

steam soft nofile 65535 steam hard nofile 65535

保存后重新登录steam用户生效。这个细节很多人忽略,结果玩到中后期服务器突然崩溃,日志里报"Too many open files",就是这个原因。

3. SteamCMD安装与饥荒服务端下载

3.1 SteamCMD的正确安装方式

切换到steam用户,创建安装目录:

su - steam mkdir -p ~/steamcmd && cd ~/steamcmd

下载SteamCMD的Linux版本:

wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz tar -xvzf steamcmd_linux.tar.gz

解压后会得到steamcmd.sh脚本和linux32目录。第一次运行会自动下载更新:

./steamcmd.sh

进入SteamCMD的交互界面后,先设置安装目录:

force_install_dir /home/steam/dst_server login anonymous app_update 343050 validate quit

这里解释几个关键点。343050是饥荒联机版专用服务器的Steam AppID,不是游戏本体的322330,别搞混。login anonymous表示匿名登录,饥荒专用服务器不需要购买账号就能下载。validate参数会校验文件完整性,第一次下载建议加上,后续更新可以去掉以加快速度。

实操心得:国内服务器下载SteamCMD内容有时会很慢甚至超时。我试过在阿里云杭州节点,白天速度还行,晚上高峰期偶尔卡住。如果遇到下载卡死,可以尝试在凌晨时段操作,或者多试几次。SteamCMD支持断点续传,中断后重新运行app_update会接着下。

3.2 目录结构与关键文件说明

下载完成后,/home/steam/dst_server目录下会有这些关键内容:

  • bin/:服务端可执行文件,包括dontstarve_dedicated_server_nullrenderer
  • data/:游戏数据,包括databundlesscripts
  • mods/:Mod存放目录
  • steamapps/:Steam相关元数据

服务端的启动命令是bin/dontstarve_dedicated_server_nullrenderer,后面跟一堆参数。但直接跑这个命令很麻烦,我们需要用配置文件来管理。

3.3 依赖库的补充安装

饥荒服务端在Ubuntu 22.04上跑,有时会缺一些库。我遇到过报错libcurl-gnutls.so.4: cannot open shared object file,解决方法是:

sudo apt install -y libcurl4-gnutls-dev

如果还报其他32位库缺失,用ldd命令检查:

ldd ~/dst_server/bin/dontstarve_dedicated_server_nullrenderer

看哪个库显示"not found",然后apt search找对应的32位包安装。Ubuntu上32位库通常带:i386后缀,需要先启用i386架构:

sudo dpkg --add-architecture i386 sudo apt update

这一步不是必须的,但如果你的服务端启动就崩,八成是库的问题,按这个思路排查。

4. 世界配置、集群令牌与洞穴分片

4.1 集群目录结构规划

饥荒服务端的配置全部放在~/.klei/DoNotStarveTogether/目录下。我们手动创建集群目录,比如叫MyCluster

mkdir -p ~/.klei/DoNotStarveTogether/MyCluster cd ~/.klei/DoNotStarveTogether/MyCluster

集群目录下需要这些内容:

  • cluster.ini:集群全局配置
  • cluster_token.txt:集群令牌
  • Master/:地面世界配置目录
  • Caves/:洞穴世界配置目录

MasterCaves目录下各自需要server.iniworldgenoverride.lua(可选)、leveldataoverride.lua(可选)等文件。

4.2 集群令牌的获取方法

集群令牌是服务器上线到Steam的凭证,没有它服务器起不来。获取方式是在游戏内操作:打开饥荒联机版,进入"账户"页面,点击"游戏"标签,找到"服务器"区域,点击"添加新服务器",输入一个名字,然后会生成一串令牌。复制这串令牌,粘贴到cluster_token.txt文件里。

注意:令牌是敏感信息,泄露了别人可以用你的名义开服。不要把它提交到公开的Git仓库。如果令牌泄露,在游戏内删除该服务器重新生成即可。

4.3 cluster.ini核心参数详解

cluster.ini控制集群的全局行为,我给出一个经过实测的配置模板:

[GAMEPLAY] game_mode = survival max_players = 6 pvp = false pause_when_empty = true [NETWORK] cluster_name = 我们的饥荒世界 cluster_description = 长期稳定联机 cluster_password = yourpassword cluster_language = zh [MISC] console_enabled = true max_snapshots = 6 [SHARD] shard_enabled = true bind_ip = 127.0.0.1 master_ip = 127.0.0.1 master_port = 10889 cluster_key = yourclusterkey

逐项解释。max_players设6是因为2核4G的实例跑6人比较稳,人多会卡。pause_when_empty = true表示没人时暂停游戏,节省CPU。cluster_password一定要设,否则任何人都能进。shard_enabled = true开启洞穴分片,bind_ipmaster_ip都填127.0.0.1,因为地面和洞穴在同一台机器上,走本地回环通信。cluster_key是分片间通信的密钥,随便设一串字符,地面和洞穴的配置里要一致。

4.4 地面与洞穴的server.ini配置

Master/server.ini

[NETWORK] server_port = 10999 [SHARD] is_master = true [STEAM] master_server_port = 27018 authentication_port = 8768

Caves/server.ini

[NETWORK] server_port = 10998 [SHARD] is_master = false name = Caves [STEAM] master_server_port = 27019 authentication_port = 8769

关键点是端口不能冲突。地面用10999,洞穴用10998,Steam查询端口也要错开。is_master标记哪个是主分片,地面是true,洞穴是false。

4.5 世界生成参数定制

如果你想要自定义世界,比如资源更多、季节更长,可以在Master目录下创建worldgenoverride.lua。这个文件用Lua表格式描述世界生成参数。举个例子,让资源丰富一些:

return { override_enabled = true, preset = "SURVIVAL_TOGETHER", overrides = { resources = "high", season_start = "autumn", autumn = "long", winter = "short", } }

preset是预设模式,overrides里可以覆盖具体参数。资源选项有neververylowlowdefaulthighveryhigh。季节长度有very shortshortdefaultlongvery long。这个文件不写也行,服务端会用默认参数生成世界。

5. Systemd守护进程与开机自启配置

5.1 为什么用Systemd而不是screen

调试阶段用screen很方便,但生产环境必须用Systemd。原因有三:一是开机自启,服务器重启后服务自动拉起;二是崩溃自动重启,服务端偶尔会因Mod冲突崩溃,Systemd能自动恢复;三是日志管理,Systemd的journal能统一收集输出,方便排查。

5.2 地面服务的unit文件

创建/etc/systemd/system/dst-master.service

[Unit] Description=Don't Starve Together Master Server After=network.target [Service] Type=simple User=steam Group=steam WorkingDirectory=/home/steam/dst_server/bin ExecStart=/home/steam/dst_server/bin/dontstarve_dedicated_server_nullrenderer -console -cluster MyCluster -shard Master Restart=on-failure RestartSec=10 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target

5.3 洞穴服务的unit文件

创建/etc/systemd/system/dst-caves.service

[Unit] Description=Don't Starve Together Caves Server After=network.target dst-master.service [Service] Type=simple User=steam Group=steam WorkingDirectory=/home/steam/dst_server/bin ExecStart=/home/steam/dst_server/bin/dontstarve_dedicated_server_nullrenderer -console -cluster MyCluster -shard Caves Restart=on-failure RestartSec=10 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target

注意After里加了dst-master.service,确保地面先启动,洞穴后启动。因为洞穴需要连接地面的主分片,顺序反了会连接失败。

5.4 启用与验证

sudo systemctl daemon-reload sudo systemctl enable dst-master dst-caves sudo systemctl start dst-master sleep 15 sudo systemctl start dst-caves

等15秒再启动洞穴,给地面服务初始化时间。验证状态:

sudo systemctl status dst-master sudo systemctl status dst-caves

看到active (running)就成功了。查看日志:

sudo journalctl -u dst-master -f

日志里出现Sim paused表示世界已加载,等待玩家加入。

实操心得:第一次启动时,服务端会生成世界,这个过程可能持续1-3分钟,期间日志会刷大量生成信息。别急着以为卡死了,耐心等。如果超过5分钟还没出现Sim paused,检查cluster_token.txt是否正确、端口是否被占用。

6. Mod管理与自动更新机制

6.1 创意工坊Mod的安装方式

饥荒联机版的Mod通过dedicated_server_mods_setup.lua文件管理。这个文件在~/dst_server/mods/目录下。格式是:

ServerModSetup("378160973") ServerModSetup("458587300") ServerModSetup("661253977")

每行一个Mod的创意工坊ID。ID怎么获取?在Steam创意工坊页面,URL末尾的数字就是ID。比如https://steamcommunity.com/sharedfiles/filedetails/?id=378160973,ID就是378160973。

6.2 Mod配置文件的编写

光安装还不够,还要在集群目录下配置哪些Mod启用。创建~/klei/DoNotStarveTogether/MyCluster/Master/modoverrides.lua

return { ["workshop-378160973"] = { enabled = true }, ["workshop-458587300"] = { enabled = true, configuration_options = { } }, ["workshop-661253977"] = { enabled = true }, }

洞穴目录Caves/modoverrides.lua也要同样配置一份,否则洞穴里Mod不生效。这是很多人踩的坑——地面Mod正常,一下洞穴就报错,就是因为洞穴没配。

6.3 Mod自动更新的实现

服务端启动时会自动检查并更新dedicated_server_mods_setup.lua里列出的Mod。但有个前提:服务端进程要有权限写入mods目录。用steam用户跑服务端,目录属主也是steam,一般没问题。

如果Mod更新后导致服务端崩溃,可以临时禁用某个Mod:把modoverrides.lua里对应的enabled改成false,重启服务即可。排查是哪个Mod的问题时,可以用二分法,先禁用一半,看是否恢复,逐步缩小范围。

6.4 Mod冲突的常见表现与处理

Mod冲突的典型表现有三种:一是服务端启动直接崩溃,日志报Lua错误;二是能启动但玩家一进就掉线;三是游戏内某些功能异常,比如物品无法制作。处理思路是看日志定位报错的Mod,然后去创意工坊页面看有没有兼容性说明或更新。

我遇到过两个Mod都修改了同一个游戏机制,导致冲突。解决方法是找功能重叠的替代Mod,或者联系Mod作者。大部分热门Mod都有兼容性维护,保持更新能避免很多问题。

7. 常见问题排查与运维经验

7.1 连接类问题速查

现象可能原因排查方法
服务器不出现在Steam列表10998端口未开放检查安全组和ufw
朋友连接超时10999端口未开放telnet测试UDP端口
能连上但频繁掉线带宽不足或Mod冲突看日志和监控带宽
洞穴无法进入10888端口未开放或cluster_key不一致检查两处配置
提示"服务器需要维护"服务端版本过旧运行SteamCMD更新

7.2 性能问题的排查思路

服务器卡顿通常有三个来源:CPU、内存、磁盘IO。用htop看CPU和内存占用,用iostat看磁盘。饥荒服务端在实体数量多的时候CPU会飙升,这是正常的。如果长期CPU跑满,考虑升级实例规格或减少Mod数量。

内存方面,地面和洞穴各占约1-1.5G,加上系统开销,2G内存的实例跑双分片会很紧张。我建议至少4G。如果内存不足,服务端会被OOM Killer杀掉,日志里能看到Killed字样。

7.3 存档备份与恢复

存档在~/.klei/DoNotStarveTogether/MyCluster/Master/save/Caves/save/目录下。定期备份是好习惯,可以写个cron任务:

0 4 * * * tar -czf /home/steam/backup/dst_$(date +\%Y\%m\%d).tar.gz /home/steam/.klei/DoNotStarveTogether/MyCluster

每天凌晨4点备份一次。恢复时停掉服务,解压覆盖,再启动。注意备份时最好先停服务或用c_save()命令让服务端保存当前状态,否则可能备份到不一致的数据。

7.4 版本更新与维护节奏

饥荒联机版会不定期更新,服务端也要跟着更新。更新流程是:停服务、运行SteamCMD的app_update 343050 validate、启动服务。建议在更新前先备份存档,因为大版本更新有时会改变存档格式。

我个人的维护节奏是每周检查一次更新,每月做一次完整备份归档。Mod更新更频繁,但服务端启动时会自动拉取,不用手动干预。如果某次更新后出问题,回滚的方法是SteamCMD加上-beta参数指定旧版本,但饥荒的旧版本分支不总是可用,所以备份存档才是最后的保险。

7.5 几个容易被忽略的细节

第一,服务器的时区设置。默认UTC时区,游戏内的时间和现实对不上。改成东八区:

sudo timedatectl set-timezone Asia/Shanghai

第二,cluster.ini里的cluster_name如果包含中文,某些客户端可能显示乱码。建议用英文或拼音,游戏内再改显示名。

第三,如果服务器公网IP变了(比如重启后),集群令牌可能需要重新生成。阿里云ECS默认是固定公网IP,一般不会变,但如果你用的是按量付费实例且释放过,就要注意。

第四,max_snapshots控制存档快照数量,设太大会占磁盘。6个快照大约占几百MB,40G系统盘完全够用。

这套方案我从最早的单人测试跑到现在的6人长期服,前后调整了十几次配置,踩过的坑基本都写在上面了。核心思路就是:用Systemd保证稳定性,用配置文件管理世界参数,用定期备份兜底。剩下的就是享受游戏了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 19:50:17

Maestro多Provider架构:可插拔设计如何支撑新AI Agent的即插即用

Maestro多Provider架构:可插拔设计如何支撑新AI Agent的即插即用 【免费下载链接】Maestro Agent Orchestration Command Center 项目地址: https://gitcode.com/GitHub_Trending/maestro41/Maestro Maestro 是一款面向 AI Agent 的开源桌面编排指挥中心&…

作者头像 李华
网站建设 2026/9/18 19:50:01

OpenClaw 跑金融自动化策略,Key 用 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 19:46:37

WPF UI 上手指南:让 WPF 桌面应用获得 Fluent 风格的实用教程

WPF UI 上手指南:让 WPF 桌面应用获得 Fluent 风格的实用教程 【免费下载链接】wpfui WPF UI provides the Fluent experience in your known and loved WPF framework. Intuitive design, themes, navigation and new immersive controls. All natively and effort…

作者头像 李华
网站建设 2026/9/18 19:42:08

2026汽车电子PCBA代工厂选型实战指南:穿透车规工艺与认证链

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华