RomM 部署指南:Docker 搭建自托管 ROM 游戏库的 6 个关键步骤
RomM 部署指南Docker 搭建自托管 ROM 游戏库的 6 个关键步骤【免费下载链接】rommA beautiful, powerful, self-hosted ROM manager and player.项目地址: https://gitcode.com/GitHub_Trending/rom/rommRomM 是一个自托管的 ROM 管理器兼浏览器播放器覆盖 400 平台。当你把 300 个 ROM 文件拖进文件夹、等它扫完、刷新浏览器——封面墙已经整整齐齐排好队而且可以直接在网页里按键开玩。成果预览部署一条docker compose up -d拉起 RomM MariaDB配置把 ROM 文件夹挂进容器用目录名告诉系统平台归属获取填上 API 密钥自动拉取封面、描述、发行年份游玩浏览器里直接运行游戏存档跨设备同步让游戏库跑起来RomM Docker Compose 部署与首次启动这一步解决从零到能用的问题一个容器跑应用一个容器跑数据库互相不需要额外网络配置。先建一个工作目录放两个文件docker-compose.yml和.env。下面这份 compose 文件参考了仓库里的 docker-compose 官方示例# ← 改这里的行需要你动services: romm: image: rommapp/romm:latest restart: unless-stopped env_file: .env volumes: - ./library:/romm/library # ← 改这里你的 ROM 目录 - ./resources:/romm/resources - ./assets:/romm/assets - ./config:/romm/config ports: - 8080:8080 # ← 改这里对外端口 depends_on: [romm-db] romm-db: image: mariadb:latest restart: unless-stopped environment: - MARIADB_ROOT_PASSWORDyour_root_password - MARIADB_DATABASEromm - MARIADB_USERromm-user - MARIADB_PASSWORDyour_db_password volumes: - mysql_data:/var/lib/mysql volumes: mysql_data:.env负责数据库凭据和密钥完整字段说明见 env.template 模板。最小可用版本# 数据库与 compose 里 MARIADB_* 保持一致 DB_HOSTromm-db DB_NAMEromm DB_USERromm-user DB_PASSWDyour_db_password # 应用密钥用 openssl rand -hex 32 生成 ROMM_AUTH_SECRET_KEY0a1b2c... # 元数据 API 密钥申请步骤见下文 IGDB_CLIENT_ID IGDB_CLIENT_SECRET MOBYGAMES_API_KEY STEAMGRIDDB_API_KEY然后启动并盯一眼日志确认 RomM 起来了docker compose up -d docker compose logs -f romm浏览器打开http://服务器IP:8080首次启动会进入设置向导在里面创建管理员账号——这是你后面所有操作的入口。⚠️ 数据库健康检查通过需要半分钟左右别急着判定它挂了。告诉系统你的 ROM 在哪里目录结构与平台映射这一步解决扫描器怎么知道snes文件夹里是 SFC 卡带的问题。RomM 靠文件夹名识别平台名字对不上就扫不出来。两种常见结构对比结构 A推荐结构 BROM 位置library/roms/{平台}/library/{平台}/BIOS 位置独立的library/bios/{平台}/与 ROM 混放适合谁平台多、日后想接模拟前端只有两三个平台、图省事推荐结构 A理由很实际BIOS 单独一层扫描时少一层解析也和常见模拟前端的目录约定一致。长这样library/ ├─ roms/ │ ├─ snes/ │ │ ├─ 超级马里奥世界.sfc │ │ └─ 最终幻想6/ │ │ ├─ disc1.smc │ │ └─ disc2.smc │ └─ gba/ └─ bios/ └─ gba/ └─ gba_bios.bin注意两点多光盘游戏放子文件夹RomM 会把disc1.smc、disc2.smc自动组合成一条记录平台文件夹名必须能被识别完整支持列表由 generate_supported_platforms.py 生成维护你的ps1它可能叫psx。如果文件夹名对不上不用改名在config.yml里做映射示例见 config.example.ymlsystem: platforms: ps1: psx # ← 你的文件夹名: RomM 平台名 super_nintendo: snes改完把./config挂进容器compose 里已经挂了触发一次扫描即可。让游戏有脸有名字API 密钥与元数据获取这一步解决扫出来一堆没封面没描述的裸条目的问题。RomM 内置十来个元数据源日常你只需要其中几个。IGDB主力数据源。去 IGDB 的 API 文档页igdb.com 官网底部可找到入口用 Twitch 开发者账号注册应用拿到 Client ID 和 Secret填进.env的IGDB_CLIENT_ID/IGDB_CLIENT_SECRETMobyGames怀旧游戏的补充源。在其 API 页面申请密钥需要等审核通过后填MOBYGAMES_API_KEYSteamGridDB换更好看的自定义封面注册后在个人设置里拿 key填STEAMGRIDDB_API_KEYScreenscraper、RetroAchievements 等属于可选项见 env.template 模板 中 Metadata Providers 一节的注释 这里 IGDB 一个就够日常用了MobyGames 是怀旧收藏者的加分项重度玩家再上 SteamGridDB多填的每个密钥都会带来限流和维护成本。填完重启容器在任务页面手动触发一次扫描扫描任务实现见 scan_library.py。几分钟后回来看效果文件名里的(USA)、(J)、(Rev 1)这类标签也会被解析成地区/版本信息所以规范命名收益很大。在浏览器里按下开始键EmulatorJS 与 BIOS 摆放这一步解决不开模拟器、网页里就能玩的问题。浏览器游玩由 EmulatorJS 驱动默认开启不需要任何配置——游戏详情页出现 Play 按钮就说明该平台支持。BIOS 是唯一要动手的地方。约定位置是游戏库下的bios/{平台}/如bios/gba/gba_bios.bin存放路径可以在config.yml的firmware项调整config.example.yml 里的默认写法是bios/{platform}# firmware: bios/{platform}哪些平台能在浏览器里跑取决于 EmulatorJS 对核心文件的支持视版本而定。跑不了的条目也不用慌RomM 本身定位是管理同步外部模拟机照样能配合使用存档和内存卡可以通过 RomM 在设备间同步。让它自己干活定时扫描与文件监控这一步解决以后每次入库都要手动点扫描的问题。两个开关都放在.env里改完重启容器生效# 定时重扫每天凌晨 3 点 ENABLE_SCHEDULED_RESCANtrue SCHEDULED_RESCAN_CRON0 3 * * * # 文件监控游戏库变动后 5 分钟自动重扫 ENABLE_RESCAN_ON_FILESYSTEM_CHANGEtrue RESCAN_ON_FILESYSTEM_CHANGE_DELAY5 两个都开没问题监控开关负责刚拷完就入库定时扫描负责兜底。低性能设备树莓派之类把SCAN_WORKERS从默认 4 调小扫描会慢但不会把机器卡死。出问题时先看这里高频故障快问快答扫描完成但游戏没出现九成是平台文件夹名对不上。对照支持列表改名或在config.yml的platforms里做映射。封面、描述一直空着检查.env里密钥是否填错、是否真的重启了容器服务器出不了外网时元数据请求会全部失败必要时配置代理变量。页面打不开docker compose logs romm看应用是否在等数据库健康检查没通过前它会一直重试先确认romm-db容器状态。浏览器里黑屏、无法运行BIOS 缺失或该平台的浏览器核心支持有限该游戏可尝试换外部模拟机存档同步不受影响。延伸阅读RomM 的核心价值在于把扫描、美化、同步、游玩装进一个自托管闭环你只管往文件夹里丢 ROM。想继续深入可以从 config.example.yml 完整配置示例 开始把排除规则、平台映射逐条读懂再往前一步看看 docker-compose 官方示例 里推荐的元数据源组合。【免费下载链接】rommA beautiful, powerful, self-hosted ROM manager and player.项目地址: https://gitcode.com/GitHub_Trending/rom/romm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考