把所有老游戏装进 NAS:RomM打造私人「Steam游戏库」
如果平时会玩一些老游戏,时间长了应该很容易遇到一个问题:ROM 越存越多。
据我所知,也存在相当一部分的模拟器玩家。FC、SFC、GBA、PS1、PS2……文件都在硬盘里,但真正想玩的时候,还得自己找目录、找封面、找对应模拟器。
既然 NAS 本身就是用来集中管理数据的,那么游戏库其实也完全可以放进去统一管理。
本篇文章带一个新项目:RomM。它是一套开源、自托管的 ROM 游戏库管理系统,可以自动扫描游戏、匹配封面和游戏信息、建立收藏,也支持通过浏览器直接运行部分游戏。简单来说就是,把 NAS 里的 ROM 文件,整理成一个类似 Steam 游戏库的网页界面。

RomM 能做什么?
RomM 的核心功能其实不只是显示 ROM 文件。它可以扫描 NAS 中的游戏库,然后通过 IGDB、ScreenScraper、Hasheous、RetroAchievements、SteamGridDB 等数据源补全:
• 游戏名称
• 游戏封面
• 游戏介绍
• 发售日期
• 平台信息
• 截图
• 游戏成就
• 其他元数据
同时支持游戏收藏、标签、多用户,以及 EmulatorJS、Ruffle 等浏览器端游戏运行方式。我们最终所获得的是,这种管理方式舒服很多。一整套带封面、分类和详细信息的游戏资料库。这种管理方式舒服很多。
部署流程
以威联通NAS为例,通过Docker Compose的方式进行部署。
部署代码如下:
services:
romm:
image: rommapp/romm:latest
container_name: romm
restart: unless-stopped
depends_on:
romm-db:
condition: service_healthy
environment:
DB_HOST: romm-db
DB_NAME: romm
DB_USER: romm
DB_PASSWD: romm
ROMM_DB_DRIVER: mariadb
# SSH 执行 openssl rand -hex 32
# 把新生成的密钥填到下面
ROMM_AUTH_SECRET_KEY: "CHANGE_THIS_64_CHAR_SECRET"
TZ: Asia/Shanghai
HASHEOUS_API_ENABLED: "true"
ports:
- "8180:8080"
volumes:
# RomM / Docker 运行数据:系统卷
- /share/Container/romm/resources:/romm/resources
- /share/Container/romm/redis-data:/redis-data
- /share/Container/romm/assets:/romm/assets
- /share/Container/romm/config:/romm/config
# 游戏资源:独立大容量共享文件夹
- /share/Games/roms:/romm/library/roms
- /share/Games/bios:/romm/library/bios
romm-db:
image: mariadb:latest
container_name: romm-db
restart: unless-stopped
environment:
MARIADB_ROOT_PASSWORD: romm
MARIADB_DATABASE: romm
MARIADB_USER: romm
MARIADB_PASSWORD: romm
volumes:
# 注意权限问题,创建失败检查此处访问权限
- /share/Container/romm/database:/var/lib/mysql
healthcheck:
test:
- CMD-SHELL
- 'mariadb -h 127.0.0.1 -uromm -promm -D romm -e "SELECT 1;" >/dev/null 2>&1 || exit 1'
start_period: 30s
interval: 10s
timeout: 5s
retries: 5
打开威联通的Container Station,创建新的应用程序。

使用介绍
部署完毕后,浏览器输入NAS_IP:8180即可访问页面。首先是初始化,可用平台部份,不是特别建议勾选全部。官方文档也明确说明,平台目录必须匹配对应 slug。如果勾选全部,你的 /share/Games/roms 下面可能一下子多出几百个空目录,File Station 看起来会很乱。

这里为了方便测试和展示,以及防止风险,挑选了作者表明免费的几个平台:Game Boy,Game Boy Advance,Nintendo Entertainment System。选择好后,点击「下一步」。

接下来创建管理员账户。继续「下一步」。

元数据源部份都是缺失的,等会后续到面板中配置即可。点击「完成」。另外,其实 RomM 官方把 Hasheous 作为「Quick Starter」方案:不需要 API Key,可以通过 ROM 的 Hash 匹配游戏,并返回 IGDB 的标题、简介和封面。

搞定之后,自动跳转到登录界面,我们输入账户和密码即可。

初次登录界面如下,我暂时还没预置游戏。现在可以手动上传,如果上传可以点击下扫描。

先右上角点击账户,进入「元数据源」,可以看到 Hasheous 已经成功连接。官方推荐的组合(红框圈的3个),大家可以进行配置。
<#&!53#&!>然后就是上传了。可以在页面直接上传。也可以直接拷贝进NAS。*.gba文件复制到/share/Games/roms/gba/,*.nes则复制到/share/Games/roms/nes/。

游戏其实挺好找的,各种大佬提供的免费合法库。

论免费资源的话,Game Boy 数量应当最多,GBDev 社区维护的 Homebrew 档案库,专门收集 GB、GBC、GBA、NES Homebrew;其数据库目前约有 1300 个 GB/GBC 条目、200 个 GBA 条目和约 23 个 NES 条目。

扫描和元数据匹配得花点时间,毕竟我一次上传了几百个~

点击平台进去,可以看到刮削好的游戏。

随便点击一个进去,可以看具体信息。

还可选择存档、打补丁、记录游戏和分享之类。

进入游戏会自动全屏,底部提供了存档、画面设置等操作按钮。

简单玩了玩,体验还阔以。

另外模拟器串流,玩家对战等,大家可以参考下官方wiki。

关于多人联机,其实就是在挂载的/share/Container/romm/config中有个config.yml文件。在里面加入类似的配置(至少一个可连接的 STUN/TURN),并重启服务即可。

之后再打开可多人的游戏,底部工具这里便可出现一个网络图标,点击即可创建房间。

最后
还有不少内容,限于篇幅问题还没介绍到,不过官方wiki中也都能找到答案。感兴趣的朋友就自己部署探索吧!
感谢观看,本文完~

烧天凤凰
校验提示文案
烧天凤凰
校验提示文案