ใครจะไปคิด ว่าเดี๋ยวนี้ Emulator เต็มตัวจะสามารถรันบน Web Browser ได้ พลังประมวลผลอุปกรณ์สมัยนี้มันเหลือ ๆ จริง ๆ

เรื่องของเรื่องคือไปเจอ RomM ใน Github แล้วน่าสนใจ เป็นตัวจัดการ Emulator ซึ่งรองรับหลาย Platform มาก โดยตัว Emulator เป็น EmulatorJS ซึ่งจะทำให้สามารถเล่นเกมผ่าน Web Browser ได้ทันทีเลยโดยไม่ต้องโหลดโปรแกรมอะไรมาลงในเครื่องให้วุ่นวาย เห็นว่าน่าสนใจ เลยลองเอามาลงใน NAS ที่มีอยู่ผ่าน Docker แล้วใช้งานได้ดี เลยมาลงวิธีเอาไว้สักหน่อยเผื่อว่าใครสนใจ

ขั้นตอนที่ 1: สร้างโฟลเดอร์สำหรับ RomM

  1. เปิด File Station บน Synology
  2. ไปที่โฟลเดอร์ docker (ถ้าไม่มีให้สร้างใหม่)
  3. สร้างโฟลเดอร์ใหม่ชื่อ romm (ใช้ตัวพิมพ์เล็กทั้งหมด)
  4. เข้าไปในโฟลเดอร์ romm และสร้างโฟลเดอร์ย่อยต่อไปนี้:
    • db (สำหรับฐานข้อมูล PostgreSQL)
    • games (สำหรับไฟล์เกม)
    • redis (สำหรับ Redis cache)
    • resources (สำหรับทรัพยากรต่างๆ)
  5. เข้าไปในโฟลเดอร์ games และสร้างโฟลเดอร์ย่อยอีก 3 โฟลเดอร์:
    • assets (ภาพประกอบและสื่อต่างๆ)
    • config (ไฟล์การตั้งค่า)
    • library (ไฟล์เกมจริง)

โครงสร้างโฟลเดอร์สุดท้ายจะได้แบบนี้:

/docker/romm/
├── db/
├── games/
│   ├── assets/
│   ├── config/
│   └── library/
├── redis/
└── resources/

ขั้นตอนที่ 2: สร้าง Secret Key

  1. เปิด Terminal หรือ Command Prompt บนคอมพิวเตอร์
  2. พิมพ์คำสั่ง: openssl rand -hex 32
  3. จดคีย์ที่ได้ไว้ เช่น: c244ac32bb2c9f408ba3351c6ab9808195485e7be94695941b2b65a895183390

หรือสามารถใช้เครื่องมือสร้าง Secret Key ออนไลน์ก็ได้

ขั้นตอนที่ 3: เปิด Container Manager และสร้าง Project

  1. เปิด Package Center และค้นหา Container Manager
  2. ติดตั้งถ้ายังไม่มี แล้วเปิดโปรแกรม
  3. ไปที่แท็บ Project ด้านซ้าย
  4. คลิก Create เพื่อสร้าง Project ใหม่
  5. ตั้งชื่อ Project เป็น romm

ขั้นตอนที่ 4: ใส่ Docker Compose Configuration

ในหน้า Docker Compose, วางโค้ดต่อไปนี้:

services:
  db:
    image: postgres:17
    container_name: RomM-DB
    hostname: romm-db
    security_opt:
      - no-new-privileges:true
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "romm", "-U", "rommuser"]
      timeout: 45s
      interval: 10s
      retries: 10
    volumes:
      - /volume1/docker/romm/db:/var/lib/postgresql/data:rw
    environment:
      POSTGRES_DB: romm
      POSTGRES_USER: rommuser
      POSTGRES_PASSWORD: rommpass
    restart: on-failure:5

  romm:
    image: rommapp/romm:latest
    container_name: RomM
    healthcheck:
      test: timeout 10s bash -c ':> /dev/tcp/127.0.0.1/8080' || exit 1
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 90s
    environment:
      ROMM_DB_DRIVER: postgresql
      DB_HOST: romm-db
      DB_NAME: romm
      DB_USER: rommuser
      DB_PASSWD: rommpass
      DB_PORT: 5432
      ROMM_AUTH_SECRET_KEY: ใส่ Secret Key ที่สร้างในขั้นตอนที่ 2
      #SCREENSCRAPER_USER: username_screenscraper
      #SCREENSCRAPER_PASSWORD: password_screenscraper
      #IGDB_CLIENT_ID: igdb_client_id
      #IGDB_CLIENT_SECRET: igdb_client_secret
      #MOBYGAMES_API_KEY: mobygames_api_key
      #STEAMGRIDDB_API_KEY: steamgriddb_api_key
      #RETROACHIEVEMENTS_API_KEY: retroachievements_api_key
      #HASHEOUS_API_ENABLED: true
    volumes:
      - /volume1/docker/romm/resources:/romm/resources:rw
      - /volume1/docker/romm/redis:/redis-data:rw
      - /volume1/docker/romm/games/library:/romm/library:rw
      - /volume1/docker/romm/games/assets:/romm/assets:rw
      - /volume1/docker/romm/games/config:/romm/config:rw
    ports:
      - 7676:8080
    depends_on:
      db:
        condition: service_healthy
    restart: on-failure:10

อย่าลืมเปลี่ยน ROMM_AUTH_SECRET_KEY เป็นคีย์ที่สร้างในขั้นตอนที่ 2

ขั้นตอนที่ 5: Deploy Project

  1. ตรวจสอบการตั้งค่าให้ถูกต้อง
  2. คลิก Create เพื่อ Deploy Project
  3. รอสักครู่ให้ระบบดาวน์โหลด Docker Image และสร้าง Container
  4. เมื่อเสร็จแล้วจะเห็นสถานะ “Success Stack successfully deployed”

ขั้นตอนที่ 6: เข้าใช้งาน RomM

  1. เปิดเว็บเบราว์เซอร์
  2. พิมพ์ http://IP-Address-ของ-NAS:7676 เช่นhttp://192.168.1.100:7676
  3. ระบบจะขอให้สร้างบัญชี Admin ครั้งแรก
  4. กรอก Username และ Password ที่ต้องการ
  5. คลิก NEXT และ FINISH

ขั้นตอนที่ 7: อัปโหลดเกมและใช้งาน

  1. อัปโหลดเกม: คัดลอกไฟล์ ROM ไปใส่ในโฟลเดอร์ /docker/romm/games/library/ หรืออัปโหลดผ่านเว็บ interface
  2. จัดระเบียบตามแพลตฟอร์ม: สร้างโฟลเดอร์ย่อยสำหรับแต่ละแพลตฟอร์ม เช่น Nintendo - Game BoySony - PlayStation
  3. สแกนเกม: RomM จะสแกนและดึงข้อมูลอัตโนมัติถ้าชื่อไฟล์ถูกต้อง
  4. เล่นเกม: คลิกที่เกมที่ต้องการและเลือก Play เพื่อเล่นผ่านเบราว์เซอร์

การปรับแต่งเพิ่มเติม (ทำทีหลังได้)

เพิ่ม Metadata Providers

ถ้าต้องการข้อมูลเกมที่สมบูรณ์ขึ้น สามารถลงทะเบียนกับบริการเหล่านี้และเอา API Key มาใส่ในการตั้งค่า:

  • Screenscraper: ภาพหน้าจอและข้อมูลเกม
  • IGDB: ข้อมูลเกมจาก Internet Game Database
  • MobyGames: ข้อมูลเกมโบราณ
  • SteamGridDB: ภาพประกอบสวยๆ
  • RetroAchievements: ระบบความสำเร็จในเกม

เพียงแค่เอาเครื่องหมาย # ออกหน้าบรรทัดที่ต้องการและใส่ API Key ที่ได้รับ

การใช้งาน HTTPS

หากต้องการความปลอดภัยเพิ่มขึ้น สามารถตั้งค่า HTTPS ผ่าน Reverse Proxy หรือใช้ Cloudflare Tunnel

การแก้ไขปัญหาเบื้องต้น

Container ไม่เริ่มทำงาน

  1. ตรวจสอบ Log ใน Container Manager > Container > เลือก Container > Details > Log
  2. ตรวจสอบว่าโฟลเดอร์ทั้งหมดถูกสร้างอย่างถูกต้อง
  3. ตรวจสอบ Secret Key ว่าใส่ถูกต้อง

เข้า RomM ไม่ได้

  1. ตรวจสอบ Port 7676 ว่าเปิดอยู่หรือไม่
  2. ลอง restart Project ใน Container Manager
  3. ตรวจสอบ IP Address ของ NAS ว่าถูกต้อง

เกมไม่แสดงข้อมูล

  1. ตรวจสอบชื่อไฟล์ให้ตรงกับรูปแบบมาตรฐาน
  2. เพิ่ม API Key ของ Metadata Providers
  3. สแกนใหม่ผ่านหน้าเว็บ