在 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 出站通畅即可。
进游戏后,主机这边就是一直挂着,好友用邀请码连进来就能一起玩。
九、踩坑小结
- 启动即崩:多半是缺 OpenGL,务必配好 Xvfb + llvmpipe。
- CPU 100% 居高不下:llvmpipe 线程数没限制,加
LP_NUM_THREADS=1+cpulimit。 - steamcmd 下载失败:付费游戏要登录正版账号,匿名下载不了。
- 重启后不自动进档:装 AutoLoadGame,配合 systemd 自启。
- 存档丢了:上 SaveBackup,别裸奔。
十、总结
把星露谷「主机」搬到 VPS 上,本质是解决三件事:无头渲染(Xvfb + 软件渲染)、资源控制(限线程 + cpulimit)、无人值守(自动开档 + 自启 + 备份)。搞定这三样,一台稳定在线的星露谷联机主机就有了,朋友们想玩随时进。
如果你也在搭自建游戏服务,欢迎交流踩坑经验。