从 Firebase 到家用 PC:AI 辅助 RPG《EverPulse》服务器迁移与优化实录
無料の Firebase をやめて、自宅でゲームサーバを動かしている話 ― NAS で限界を知り、小さな PC に落ち着くまで
通知:测试者招募将延长至11月8日(周日)21:00。 测试按原计划从10月31日(周六)开始,中途加入也可以。详情请见文章末尾。
前言
上次讲的是在本地PC上制作音乐、音效和语音。
这次讲的是这个游戏运行在哪里。
这款游戏可以让多人进入同一个世界。可以看到其他玩家走动,还能一起击败相同的魔物。
为此,需要一个“服务器”来汇总所有人的位置以及魔物的剩余血量。
目前,该服务器运行在我家里的一台小型PC中。在它稳定运行之前,经历了两次迁移:从免费服务迁到旧NAS(存放文件的盒式小服务器),再从NAS迁到PC。

最初是 Firebase
2026 年 2 月的首个原型是在 Google 的免费服务 Firebase 上构建的。
登录、位置交换和页面分发等功能都已就绪,使用非常便捷。
9 月 20 日恢复工作时,我决定放弃该方案,转而使用自有服务器(v0.3.0)。原因有三:
希望让镇上的人与 AI 对话。 如果将调用 AI 的密钥放在浏览器中,存在被盗风险。因此必须从服务器内部进行调用。
未来的费用问题。 超出免费范围后,将按实际使用量付费。
希望减少对 Google 的依赖。
家里的NAS上,已经通过Docker(在一台机器中将多个服务器以容器形式运行的机制)运行着其他工具制作相关的服务器。我决定以同样的方式运行游戏服务器。
目前的NAS已经使用了6年,性能规格严重过时。虽然想更换,但资金不足,只能将就使用至今。
ARMv7、内存1GB的限制
这台NAS使用的是与智能手机类似的CPU架构(ARMv7),且内存仅有1GB,无法扩容。
10月10日测量时,已用内存为900MB,剩余可用内存仅100MB。除了游戏之外,还有12个服务器共存运行。
因此,我首先决定“不再增加任何内容”。程序组件仅限3个。由于该CPU存在大量无法执行的指令,新增组件时必须逐一验证。数据存储采用单一文件的小型数据库。
这些规则也写入了给AI的约束条件中,以便在每次开发新功能时,AI能够自行进行验证。
将繁重的处理移至浏览器或本地PC
1GB 的机器无法承载所有功能。因此,我们将繁重的任务卸载到了外部。这种分工方式至今未变。
地牢地图 由每位玩家的浏览器生成。由于同一楼层必定生成相同形状,因此大家看到的地图是一致的。
图像、音乐和语音的生成 在本地配备显卡的 PC 上完成。服务器仅负责分发已生成的内容。
在构建城镇冒险者在地图上行走并与怪物战斗的机制时(v0.80.0),我们预先在 NAS 上进行了负载测试。
即使以每 0.5 秒的频率移动 84 名玩家,对其他玩家的响应延迟也仅为约 7 毫秒,处于人类无法感知的范围内。

“使用手机需要等待数十秒”
在手机上打开时,画面出现前花了数十秒(v0.84.0)。
让 AI 检测后,原因是图片。因为每次都在重新生成所有图片,且图片格式过大。
改变图片的传递方式和格式后,在模拟 4G 网络的测试中,画面从之前的 16.4 秒、37.1MB 变为首次加载 6.7 秒、14.0MB,第二次及之后则缩短至 2.7 秒。
此后,从家外访问时仍感觉沉重(v1.18.1)。
虽然图片是以每格 256 像素绘制的,但在屏幕上显示约为 48 像素。改为向游戏提供小尺寸图片后,图片总大小从 239MB 减少到 50MB。

在本地和生产环境两处构建
开发工作是在本地 PC 上进行的。服务器端则是实际游玩的“生产环境”。
让 AI 制作了将本地修改同步至生产环境的工具,并确立了“操作前查看差异”、“完成后进行同步”的规则。
然而,生产环境一侧也发生了改写。我在管理界面中修改了魔物的数值并保存后,生产环境的文件也随之改变。
在 NAS 时期,这里曾发生过两次事故。
第一次(10月2日):自动备份覆盖了生产环境
每小时的自动备份执行的是“将目标设置为与源完全相同”的同步处理,导致我用本地旧版本覆盖了在管理界面中保存的内容,甚至将未完成的程序也推送到了生产环境。
我将自动备份改为仅向不同于生产环境的其他位置进行“追加式”复制。
第二次(10月3日):刚保存的笔记被删除
这次是反向操作。由于 AI 未能识别差异,从 NAS 复制到了本地,导致我刚保存的笔记(待办事项列表)被旧版本覆盖。
当时,我使用的编辑器在内部保留了正在编辑的内容,因此 AI 从中提取并恢复了原状。
此后,我在复制前会确认“生产环境中是否有更新的文件”,如果存在任何一个则停止操作。
实际上,之后也确实发生过这种情况(10月6日)。经调查,发现我之前在管理界面中更改了世界设置并保存。如果继续复制,该更改就会被消除。
这一机制至今搬家后仍以相同形式使用。只要 AI 和我在不同位置操作同一文件,“一旦停止,首先阅读”就是最好的防御措施。
NAS 已无法满足需求
10月11日,我让AI调查了同时能有多少人游玩。答案是NG,“第一道墙是NAS”。
可用内存大约只有384MB,不足的部分用磁盘来补充(交换空间)。由于程序结构的原因,实际上几乎只能使用一个CPU核心。
作为迁移目标,比较了新NAS、迷你PC和租用服务器(VPS)三年的费用,结果都在4.6万至11.6万日元之间。
于是我想起了家里闲置的一台小型PC。CPU是Core i3,内存是8GB,是NAS的8倍。
10月14日,我删除了这台PC上的Windows,安装了用于服务器的Linux,并将生产环境迁移过来(v1.41.0)。没有购买任何新设备。停止了在NAS上玩游戏,现在将其用作备份存储。
安装过程停滞了30分钟
Linux的安装方式是将配置文件放在USB闪存驱动器上,无需回答任何问题即可安装。之后的所有设置都由AI通过远程操作我的本地PC完成。
然而,在安装过程中停滞了30分钟。屏幕上不断滚动着同一行内容。
起初,AI怀疑是LAN断开了。展示屏幕截图后,发现LAN连接正常。查看安装程序的日志,也只显示每40秒出现一次的固定通知。
真正的原因是,“是否自动继续(yes / no)”这个提问被淹没在聊天窗口滚动的行中而看不见了。输入yes后便继续进行了。

腾出空间后能做的事
由于内存有了余量,在 NAS 上无法实现的功能得以补充。
AI 备用方案。镇民的回复由 Google Gemini 生成。为应对 Gemini 拥堵变慢或不可用的情况,我在 PC 中运行了一个小型 AI(Gemma 4 最小版本)。由于没有显卡,每句话需要 9~15 秒。通过在玩家发出第一句问候时预先读取固定说明,将时间缩短至 7.5~9.6 秒。如果 Gemini 的回复未在 6 秒内到达,则同时运行两者并采用先返回答案的一方。
关闭屏幕后继续游玩。将策略(自动战斗设置)交给服务器后关闭屏幕,服务器中的“无头浏览器”会作为该玩家介入并继续游戏(hd0.43.0)。当本人返回时接替其位置。
今天(10 月 30 日)测量显示,7.5GB 内存中使用了约 3GB。游戏服务器占用 289MB,负责关闭屏幕后继续游玩的组件占用 253MB。已连续运行 15 天未停止。
家的外部访问通过 Cloudflare 隧道实现。由于是从 PC 端向外连接,因此无需在家庭路由器上开放入口。
稳定的形态
目前的状态如下。
生产环境: 家中的迷你 PC(Linux・Docker)。用于游戏服务器、备用 AI 以及即使关闭屏幕也能继续运行的服务
工作机: 个人使用的电脑。修复后的内容会先进行差异比对,再同步至生产环境
备份: NAS。每小时仅追加增量数据进行同步
并非完全没有担忧。如果发生停电或家庭线路故障,系统就会停止。尽管如此,在测试期间,我们认为这种形式已经足够。
总结
为了交换位置信息并保护 AI 密钥,从 Firebase 迁移到自有服务器
在 1GB 内存的 NAS 上,不增加硬件,将繁重处理交给浏览器和本地 PC。这种分工方式至今仍然有效
如果不够用,首先查看家中现有设备。利用闲置的 PC,无需花费即可将内存提升 8 倍
如果在两处制作,需要在复制前加入‘确认哪一方更新’的机制
下次将分享用AI制作游戏开场视频的经历。通过让静态图片动起来、拍摄游戏画面,并配合音乐进行剪辑组装。同时也会介绍如何修复崩坏的视频内容。
具体步骤计划整理在付费的步骤篇中。
延长测试员招募
我们将把前两次文章中通知的封闭Beta测试员招募截止日期延长至11月8日(周日)21:00。

测试期间:10月31日(周六)至11月8日(周日)。将按原计划开始。也欢迎中途加入
指南: 在延期期间申请的用户,我们将在您申请后1天内通过邮件发送游戏地点和邀请暗号。
费用: 免费。仅使用浏览器即可游玩(推荐PC,手机也可玩)。
回馈: 游戏内的称号【聆听初始心跳之人】以及片尾字幕中的姓名展示(作为测试玩家参与)
目前名额仍有富余。文中提到的小型电脑将迎接各位的冒险。想与镇上的人交谈的朋友,或者希望把策略交给他人、自己在一旁观望的朋友都可以。请务必来玩。
来源:Nobukz Code · AI辅助RPG开发 · note.com