Loading...

文章背景图

在 VPS 上搭建星露谷物语服务器:无头运行 + SMAPI + 自动开档

2026-09-13
0
-
- 分钟
|

在 VPS 上搭建星露谷物语服务器:无头运行 + SMAPI + 自动开档

想和几个朋友一起玩星露谷,又不想每次都得有人开着电脑当主机?把「主机」挂到一台 24 小时在线的 VPS 上,谁想玩都能随时进,主机再也不用傻等好友上线。

先说明一个关键概念:星露谷物语没有独立的专用服务器端。它的联机是「主机(Host)开档 + 好友通过 Steam 邀请码加入」,所以所谓「服务器」,本质上就是一台一直开着、自动加载存档、挂着不关的联机主机。本文记录我在 Debian 12 VPS 上的完整搭建过程,包括无头渲染、SMAPI 模组加载和开机自启。

一、环境与前置条件

  • 一台 Linux VPS(我用的 Debian 12,4 核 8G,实际星露谷很轻,2 核 4G 也够)
  • 一个购买了星露谷物语的正版 Steam 账号(下载游戏需要登录)
  • 能 SSH 登录服务器

二、安装 steamcmd 并下载游戏

星露谷是付费游戏,steamcmd 匿名下载不了,必须用正版账号登录。先装 steamcmd:

# Debian/Ubuntu
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install steamcmd

用你的 Steam 账号登录并下载(游戏 AppID 是 413150):

steamcmd +@sSteamCmdForcePlatformType linux +login 你的账号 +force_install_dir /home/steam/StardewValley +app_update 413150 validate +quit

登录时可能要输 Steam 令牌验证码,照着提示填即可。下载完成后游戏文件会落在 /home/steam/StardewValley

三、安装 SMAPI(模组加载器)

星露谷是 .NET 写的游戏,玩 Mod 必须先装 SMAPI。从官网下载 Linux 版,解压后执行安装脚本:

unzip SMAPI-x.x.x-installer.zip -d smapi-installer
cd smapi-installer
./install on Steam  # 或按提示选 Linux 安装路径

装完后,启动游戏入口从 Stardew Valley 变成 StardewModdingAPI,Mods 目录也创建好了。

四、无头运行(核心难点)

星露谷是个图形游戏,即使只是当联机主机,启动时也需要一个 OpenGL 上下文。VPS 没有显卡、没有显示器,直接跑会崩溃。解决办法是虚拟显示 + 软件渲染

安装依赖:

sudo apt install xvfb x11vnc cpulimit

三个组件各司其职:

  • Xvfb:虚拟出一个无头显示(X 服务器)
  • llvmpipe:Mesa 的软件渲染驱动,用 CPU 模拟 OpenGL
  • x11vnc:可选,方便偶尔连进去看看画面

这是我实际的启动脚本核心(fish 语法,稍作解释):

# 启动最小化无头显示
Xvfb :1 -screen 0 1x1x24 +extension GLX &
sleep 2

set -x DISPLAY :1.0
set -x LIBGL_ALWAYS_SOFTWARE 1
set -x GALLIUM_DRIVER llvmpipe
set -x LP_NUM_THREADS 1

x11vnc -display :1 -nopw &

两个关键点:

  • LIBGL_ALWAYS_SOFTWARE=1 + GALLIUM_DRIVER=llvmpipe 强制走 CPU 软件渲染,否则没显卡会报错。
  • LP_NUM_THREADS=1 限制 llvmpipe 只用一个渲染线程——否则它会默认按 CPU 核数开线程,无头画面会把所有核心吃满。

五、限制 CPU 占用

Xvfb 没有垂直同步,游戏会疯狂渲染消耗 CPU。用 cpulimit 把整个主机限制在 1.25 个逻辑核心,给游戏更新留足资源,同时压住无头渲染的开销:

exec /usr/bin/cpulimit -f -l 125 -- \
  /home/steam/StardewValley/StardewModdingAPI \
  "/home/steam/StardewValley/Stardew Valley"

六、systemd 开机自启

写一个 service,让服务器重启后自动拉起游戏:

[Unit]
Description=Run A Game Server
After=network.target network-online.target
Wants=network-online.target

[Service]
Type=simple
User=steam
Group=steam
WorkingDirectory=/home/steam
ExecStart=/usr/bin/fish /home/steam/rungame.fish
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now rungame

七、自动开档 + 常用 Mod

想让「服务器」真正无人值守,需要主机自动加载存档,我用的是 AutoLoadGame 这个 Mod——游戏启动后自动载入指定存档,直接进入联机状态。

我实际在用的 Mod 列表(供参考):

  • AutoLoadGame:自动开档,无人值守的关键
  • SaveBackup:定时自动备份存档(存档安全最重要)
  • ConsoleCommands:命令行控制,方便运维
  • LookupAnything / UIInfoSuite2:UI 增强
  • 其它若干功能型 Mod

存档备份这块强烈建议配上——星露谷一坏档几十小时的进度就没了,自动备份是零成本的保险。

八、联机与端口

星露谷 1.6 的联机走 Steam 网络,好友通过邀请码加入。游戏进程会监听 Steam 的 P2P 端口(默认 UDP 24642),一般无需额外开放端口。如果你有防火墙,确保 UDP 出站通畅即可。

进游戏后,主机这边就是一直挂着,好友用邀请码连进来就能一起玩。

九、踩坑小结

  1. 启动即崩:多半是缺 OpenGL,务必配好 Xvfb + llvmpipe。
  2. CPU 100% 居高不下:llvmpipe 线程数没限制,加 LP_NUM_THREADS=1 + cpulimit
  3. steamcmd 下载失败:付费游戏要登录正版账号,匿名下载不了。
  4. 重启后不自动进档:装 AutoLoadGame,配合 systemd 自启。
  5. 存档丢了:上 SaveBackup,别裸奔。

十、总结

把星露谷「主机」搬到 VPS 上,本质是解决三件事:无头渲染(Xvfb + 软件渲染)、资源控制(限线程 + cpulimit)、无人值守(自动开档 + 自启 + 备份)。搞定这三样,一台稳定在线的星露谷联机主机就有了,朋友们想玩随时进。

如果你也在搭自建游戏服务,欢迎交流踩坑经验。

原创

在 VPS 上搭建星露谷物语服务器:无头运行 + SMAPI + 自动开档

本文链接: 在 VPS 上搭建星露谷物语服务器:无头运行 + SMAPI + 自动开档

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录