RomM 遊戲管理器

從架設到遊玩完全指南 · 打造私人復古遊戲庫

第一部分:介紹大綱

RomM (Rom Manager) 是一個現代化的復古遊戲庫管理工具。它不只能整理遊戲檔案,還支援透過瀏覽器直接遊玩,就像是你的「私人復古遊戲 Netflix」。

核心特色:
  • 海報牆介面:自動下載封面、簡介,將雜亂的檔案變成精美的遊戲牆。
  • 網頁遊玩:內建模擬器核心,點擊「Play」即可在瀏覽器中運行,無需下載模擬器。
  • 多平台支援:支援 NES, SNES, GBA, PS1, N64 等多種復古主機。
  • NAS 部署:透過 Docker 輕量化運行,適合架設在 fnOS、Synology 等 NAS 系統上。

運作原理:Server 端 (NAS) 負責掃描檔案與資料庫;Client 端 (瀏覽器) 負責顯示介面並利用電腦算力運行模擬器。

第二部分:如何架設 (Docker 部署)

本教學基於 Docker Compose,適用於 fnOS 或 Portainer 環境。

步驟 1:規劃資料夾結構

在 Docker 儲存空間下 (例如 /vol1/docker/) 建立 romm 資料夾,並在其下建立 5 個子資料夾:

  • /romm/library/ (存放遊戲 ROM)
  • /romm/config/ (存放設定檔)
  • /romm/assets/ (存放資源)
  • /romm/resources/ (存放圖片)
  • /romm/database/ (存放資料庫數據)

步驟 2:準備 config.yml

在電腦上建立一個文字檔 config.yml,內容填入 version: 1 即可。將此檔案上傳至 NAS 的 /romm/config/ 資料夾中。
※重要:若無此檔案容器會啟動失敗。

步驟 3:建立 Docker Compose 堆疊

複製以下內容至 Docker Compose 編輯器:

version: "3"
services:
  romm:
    image: rommapp/romm:latest
    container_name: romm
    restart: unless-stopped
    environment:
      - DB_HOST=romm-db
      - DB_NAME=romm
      - DB_USER=romm-user
      - DB_PASSWD=password123  # 請自訂密碼
      - ROMM_AUTH_SECRET_KEY=random_key_here # 請輸入隨意亂碼
    volumes:
      - /vol1/docker/romm/resources:/romm/resources
      - /vol1/docker/romm/assets:/romm/assets
      - /vol1/docker/romm/config:/romm/config
      - /vol1/docker/romm/library:/romm/library
    ports:
      - 8080:8080
    depends_on:
      - romm-db

  romm-db:
    image: mariadb:10
    container_name: romm-db
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=root_pass # 請自訂 Root 密碼
      - MYSQL_DATABASE=romm
      - MYSQL_USER=romm-user
      - MYSQL_PASSWORD=password123 # 需與上方 DB_PASSWD 一致
    volumes:
      - /vol1/docker/romm/database:/var/lib/mysql

步驟 4:初始化設定

  1. 啟動容器。
  2. 瀏覽器訪問 http://NAS_IP:8080
  3. 建立管理員帳號 (Username/Password)。
  4. (可選) IGDB API Key 設定可先跳過,稍後再補。

第三部分:下載與整理遊戲庫

1. 資源與格式

  • 關鍵字:搜尋 "No-Intro" (卡帶類) 或 "Redump" (光碟類)。推薦來源:Internet Archive。
  • 格式:卡帶類 (NES, GBA) 可直接使用 .zip.7z (無需解壓)。若模擬器讀取失敗,才需解壓為原生格式 (如 .nes)。

關鍵規則:資料夾結構

這是最容易出錯的地方!RomM 強制要求在平台資料夾下必須有一個名為 roms 的子資料夾。

/library/
├── nes/
│ ├── 超級瑪利歐.nes (錯誤:掃描不到)
│ └── roms/ (正確:必須有這個資料夾)
│ └── 超級瑪利歐.nes
└── gba/
└── roms/
└── Pokemon.zip

2. 排除雜訊

下載的遊戲包通常包含 0-9, A, B 等分類資料夾。建議將這些資料夾內的遊戲檔案全部移出來,放在 roms 根目錄下,避免 RomM 將「A資料夾」誤判為一個遊戲。

第四部分:搜尋與掃描

1. 綁定路徑 (Manage Library)

由於 Docker 的隔離性,你需要告訴 RomM 哪個資料夾對應哪個主機。

  1. 進入網頁 -> 點擊 MANAGE LIBRARY
  2. 點擊 AddEdit
  3. 左側 (Folder):選擇 nes (你建立的資料夾名)。
  4. 右側 (Platform):選擇 Nintendo Entertainment System
  5. 點擊 Confirm

2. 執行掃描與遊玩

  • 點擊左側選單的 Scan 圖示 -> Scan Library
  • 掃描完成後,點擊封面 -> 點擊 Play 即可開始遊戲。
  • 操作鍵:方向鍵移動,Enter (Start),Shift (Select),Z/X/A/S 為功能鍵。

第五部分:疑難排解 (Troubleshooting)

問題現象 原因分析 解決方案
掃描不到遊戲 資料夾結構錯誤 或 權限不足 1. 確認遊戲是否在 roms 子資料夾內。
2. 在 NAS 開啟資料夾的遞歸讀寫權限。
封面顯示 "Not Identified" 未設定 IGDB API Key 這不影響遊玩。若需封面,需至 Twitch Developer 申請 API 並填入設定。
出現 "0-9", "A" 等奇怪遊戲 RomM 把分類資料夾當成遊戲了 將遊戲移出至 roms 根目錄,刪除空資料夾。
點 Play 後黑屏 瀏覽器無法解壓該 .7z 檔案 將該遊戲解壓縮,上傳原生格式 (.nes, .gba) 即可解決。
無法重複綁定資料夾 一個資料夾對應一個平台 這是正常機制。請為每個平台建立獨立資料夾。

給新手的小撇步

1. 強調 roms 資料夾:請務必檢查路徑是否為 /library/nes/roms/遊戲檔

2. Docker 路徑觀念:NAS 的 /vol1/docker/romm/library 對應到容器內的 /romm/library 是一個「映射」關係。

3. 先求有再求好:建議先不要糾結於封面下載,先確認遊戲能跑起來 (Play),獲得成就感後再處理美化工作。