欢迎光临
我们一直在努力

我用 Docker + JunimoServer 搭了一个星露谷物语无头服,还顺手做了个本地管理面板

先说一下这个项目是干什么的

我这次做的是一个星露谷物语无头服务器搭建包,仓库叫:

StardewValleyServerKit

项目地址:

https://github.com/wuxianggujun/StardewValleyServerKit

它的目标很简单:尽量让开服这件事不要每次都靠手工折腾。

大概流程是:

  • 用 Docker 启动服务端容器。
  • 用自己的 Steam 账号下载正版 Stardew Valley 文件。
  • 通过 JunimoServer / SMAPI 让游戏以无头房主的方式跑起来。
  • 玩家通过局域网 IP 或邀请码加入。
  • 用 noVNC 或本地 Web 面板查看状态、日志和配置。
  • 这里要先说清楚:这个项目不分发游戏文件,也不是破解服。你还是需要自己拥有正版星露谷物语,Steam 授权和游戏下载都走你自己的账号。

    为什么要折腾这个

    星露谷物语多人联机有一个很现实的问题:房主不在线,其他人就玩不了。

    如果只是几个人偶尔玩,那问题不大。但如果想让农场像一个小服务器一样常驻,房主就要一直开着游戏,电脑也要一直挂着。这样挺麻烦,而且窗口、输入、保存、掉线都容易出问题。

    所以我最后选了“无头房主”方案。

    简单说,就是让一个容器里的游戏客户端一直作为房主运行。它不一定需要你真的坐在屏幕前操作,但它本质上还是一个房主,只是被自动托管起来了。

    快速启动

    Windows 下可以直接执行:

    cd <repo-root>
    .\\setup.ps1 setup

    Linux / macOS 下是:

    cd StardewValleyServerKit
    chmod +x ./scripts/sdv-server.sh
    ./scripts/sdv-server.sh setup

    脚本会做几件事:

  • 生成本地 .env。
  • 生成 VNC 密码和 API Key。
  • 拉 Docker 镜像。
  • 处理 Steam 登录和游戏文件下载。
  • 启动无头服务端。
  • 打印 noVNC、HTTP API、管理面板和游戏直连地址。
  • 启动后常用入口是这几个:

    noVNC: http://localhost:5800
    HTTP API: http://localhost:8080
    本地管理面板: http://localhost:8088
    游戏 UDP 端口: 24642
    查询 UDP 端口: 27015

    如果不确定游戏里应该填哪个 IP,可以执行:

    .\\setup.ps1 join-info

    这个命令会把当前可以尝试的局域网地址和端口打印出来。

    我踩的第一个坑:Steam 下载不一定一次成功

    刚开始我以为只要 Steam 登录成功,游戏下载就肯定没问题。实际不是。

    有时候授权是成功的,账号也确实拥有游戏,但下载 manifest 的时候会遇到 403 (Forbidden),或者 SteamCMD 出现类似 state is 0x402 after update job 的错误。

    这个时候不要一直重复普通下载命令,直接换备用流程更省时间:

    .\\setup.ps1 steamcmd-download Retries 5

    这个流程会通过 SteamCMD 下载 Stardew Valley 本体和 Steamworks SDK。后者很关键,如果 SDK 缺了,JunimoServer 的 Steam GameServer / SDR 相关功能可能会不完整,邀请码也容易出问题。

    第二个坑:VNC 能看到画面,但点不动

    这个问题我卡了挺久。

    一开始我看到 noVNC 有画面,但鼠标点游戏按钮没反应,键盘也没反应。我以为是 VNC 输入链路坏了,后来反复查才发现有几类情况要分开看。

    如果只是 RealVNC 点不动,但浏览器 noVNC 可以点,那大概率是 RealVNC 客户端设置问题,比如开了 View-only。

    如果 noVNC 和原生 VNC 都点不动,再去检查容器里的 Xvnc 输入参数。项目里已经把默认参数补上了:

    -AcceptPointerEvents=1
    -AcceptKeyEvents=1
    -AcceptSetDesktopSize=1
    -AlwaysShared=1
    -DisconnectClients=0

    也可以直接执行:

    .\\setup.ps1 vnc-fix
    .\\setup.ps1 vnc-check

    还有一个很容易误判的点:如果画面里显示 Paused、Auto Mode On,按 Esc 没反应不一定是 VNC 坏了,可能是 JunimoServer 自动托管模式在接管。

    这个时候要按 F9,或者执行:

    .\\setup.ps1 host-auto

    F10 对应的是可见性切换,也可以用命令:

    .\\setup.ps1 host-visibility

    这个坑非常容易让人怀疑人生,因为你看得到画面,也能连上 VNC,但游戏就是不像普通窗口那样响应。

    第三个坑:VNC 窗口放大,不代表游戏窗口会跟着变大

    我之前也以为 VNC 客户端窗口拖大以后,游戏窗口就会自动跟着变大。

    实际不是这么回事。

    resize=scale 只是浏览器本地缩放,远程桌面大小不变。你把浏览器窗口放大,只是把画面拉大了,游戏本身的分辨率没有变。

    如果远程桌面尺寸已经乱了,比如出现黑边、大块空白,或者 Stardew 窗口没有铺满,可以执行:

    .\\setup.ps1 vnc-resize

    这个命令会按 .env 里的:

    DISPLAY_WIDTH=1280
    DISPLAY_HEIGHT=800

    重新调整 X11 / VNC 桌面和 Stardew 窗口。

    如果临时希望浏览器窗口变化时同步改远程桌面,可以把 noVNC 地址里的参数改成:

    resize=remote

    但我自己更倾向于日常用 resize=scale,远程尺寸固定,画面更稳定。

    第四个坑:邀请码不稳定时,优先用 IP 直连

    很多人习惯看 Steam 邀请码,但这个东西依赖 Steam / Galaxy P2P 链路。只要那边状态不稳定,就可能出现“有邀请码,但加入失败”的情况。

    所以项目默认开启了 IP 直连:

    "AllowIpConnections": true

    本机测试时,在游戏里输入:

    127.0.0.1

    同一个局域网里的其他电脑,则输入服务器主机的 WLAN / Ethernet IPv4 地址。

    不要填 Docker、WSL、VMware、VirtualBox 那些虚拟网卡地址。

    如果你改过端口,就看 .env 里的 GAME_PORT。默认是:

    GAME_PORT=24642

    公网部署的话,还要放行 UDP 端口和云服务器安全组,这个不能只看 Docker 是否启动。

    本地 Web 管理面板

    后面我又加了一个本地 Web 管理面板,主要是因为每次手改 .env 和 server-settings.json 太麻烦。

    启动方式:

    .\\setup.ps1 admin

    默认地址:

    http://127.0.0.1:8088

    面板里可以看:

  • 容器健康状态。
  • 加入地址和端口。
  • 最近玩家活动。
  • 最近服务端日志。
  • 常用开服配置。
  • 也可以保存一些配置,比如:

  • 农场地图。
  • 最大人数。
  • 初始小屋数量。
  • 进服密码。
  • 游戏端口。
  • 管理员 Steam64 ID。
  • 这里也有一个注意点:保存配置不是热更新。

    端口、人数、IP 直连这类配置一般要重启服务端才生效。农场地图、农场名、初始小屋数量、利润比例这些,通常只对新建农场更可靠,已经存在的存档不一定会被改掉。

    当前默认装了哪些 Mod

    我当前只保留了两个工具类 Mod:

    ConsoleCommands
    SaveBackup

    ConsoleCommands 主要是为了执行一些 SMAPI 控制命令。

    SaveBackup 负责每日备份,至少在测试和折腾 Mod 的时候会安心很多。

    暂时没有一上来就塞一堆玩法 Mod。无头服最怕的是“能启动,但过几天存档或者事件坏了”。所以我的建议是先跑稳,再一个一个加 Mod。

    挂机测试应该怎么测

    这个地方也不能只看“容器有没有运行”。

    容器运行只能说明进程还活着,不代表农场里的日程推进、事件、保存、玩家重连都没问题。

    我觉得至少要测这些:

  • 第一天能不能正常过夜保存。
  • 多人加入后能不能一起睡觉。
  • 玩家断线重连是否正常。
  • 第 5 天矿洞是否开启。
  • 第 3 天地震、铁路开启这类自然事件是否正常。
  • 雷雨、节日、特殊天气是否能正常进入和离开地图。
  • 长时间没人操作时,房主是否仍然保持在可用状态。
  • 重启 Docker 后,存档能否正常加载。
  • 我之前遇到过日志里出现类似:

    Kicking xxx because they aren't ready

    这种不一定代表服务端崩了,更像是玩家加入流程里没有完成就绪状态,被 JunimoServer 踢掉。真正要看的是容器状态、SMAPI 红字、保存日志、玩家加入和退出记录。

    常用命令

    日常维护我主要用这几个:

    .\\setup.ps1 status
    .\\setup.ps1 logs
    .\\setup.ps1 restart
    .\\setup.ps1 backup
    .\\setup.ps1 join-info
    .\\setup.ps1 admin
    .\\setup.ps1 vnc-resize
    .\\setup.ps1 host-auto
    .\\setup.ps1 host-visibility

    更新前建议先备份:

    .\\setup.ps1 backup

    再更新:

    .\\setup.ps1 update

    如果要加 Mod,我建议一次只加一个。加完之后先跑过夜、节日、重启、重连这些测试,不要一次性堆很多,不然后面出问题很难定位。

    最后总结

    这次折腾下来,我最大的感受是:星露谷物语所谓“无头服”,本质上并不是传统意义上的 dedicated server。

    它更像是把一个房主自动托管起来。

    所以很多问题不能按普通服务器思路理解,比如:

  • VNC 看得到画面,不代表输入一定能进游戏。
  • VNC 窗口变大,不代表远程游戏窗口变大。
  • 邀请码失败,不代表服务端一定没启动。
  • 容器运行中,不代表游戏内事件一定已经正常推进。
  • Web 面板保存配置,不代表所有字段都能热更新。
  • 目前这个项目已经能完成基本的一键搭建、noVNC 管理、IP 直连、本地管理面板、日志查看和常用配置保存。后面如果继续做,比较值得推进的方向是多实例管理、多存档切换、更多健康检查,以及把测试流程做得更自动化一点。

    仓库地址:

    https://github.com/wuxianggujun/StardewValleyServerKit

    如果你也想搭一个长期在线的星露谷农场,可以先从 README 的快速开始跑一遍。建议第一次不要急着加 Mod,先把原版无头服跑过夜、重启、重连都测稳定,再慢慢扩展。

    赞(0)
    未经允许不得转载:171主机测评 » 我用 Docker + JunimoServer 搭了一个星露谷物语无头服,还顺手做了个本地管理面板
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址