ใครจะไปคิด ว่าเดี๋ยวนี้ Emulator เต็มตัวจะสามารถรันบน Web Browser ได้ พลังประมวลผลอุปกรณ์สมัยนี้มันเหลือ ๆ จริง ๆ
เรื่องของเรื่องคือไปเจอ RomM ใน Github แล้วน่าสนใจ เป็นตัวจัดการ Emulator ซึ่งรองรับหลาย Platform มาก โดยตัว Emulator เป็น EmulatorJS ซึ่งจะทำให้สามารถเล่นเกมผ่าน Web Browser ได้ทันทีเลยโดยไม่ต้องโหลดโปรแกรมอะไรมาลงในเครื่องให้วุ่นวาย เห็นว่าน่าสนใจ เลยลองเอามาลงใน NAS ที่มีอยู่ผ่าน Docker แล้วใช้งานได้ดี เลยมาลงวิธีเอาไว้สักหน่อยเผื่อว่าใครสนใจ
ขั้นตอนที่ 1: สร้างโฟลเดอร์สำหรับ RomM
- เปิด File Station บน Synology
- ไปที่โฟลเดอร์
docker
(ถ้าไม่มีให้สร้างใหม่) - สร้างโฟลเดอร์ใหม่ชื่อ
romm
(ใช้ตัวพิมพ์เล็กทั้งหมด) - เข้าไปในโฟลเดอร์
romm
และสร้างโฟลเดอร์ย่อยต่อไปนี้:db
(สำหรับฐานข้อมูล PostgreSQL)games
(สำหรับไฟล์เกม)redis
(สำหรับ Redis cache)resources
(สำหรับทรัพยากรต่างๆ)
- เข้าไปในโฟลเดอร์
games
และสร้างโฟลเดอร์ย่อยอีก 3 โฟลเดอร์:assets
(ภาพประกอบและสื่อต่างๆ)config
(ไฟล์การตั้งค่า)library
(ไฟล์เกมจริง)
โครงสร้างโฟลเดอร์สุดท้ายจะได้แบบนี้:
/docker/romm/
├── db/
├── games/
│ ├── assets/
│ ├── config/
│ └── library/
├── redis/
└── resources/
ขั้นตอนที่ 2: สร้าง Secret Key
- เปิด Terminal หรือ Command Prompt บนคอมพิวเตอร์
- พิมพ์คำสั่ง:
openssl rand -hex 32
- จดคีย์ที่ได้ไว้ เช่น:
c244ac32bb2c9f408ba3351c6ab9808195485e7be94695941b2b65a895183390
หรือสามารถใช้เครื่องมือสร้าง Secret Key ออนไลน์ก็ได้
ขั้นตอนที่ 3: เปิด Container Manager และสร้าง Project
- เปิด Package Center และค้นหา Container Manager
- ติดตั้งถ้ายังไม่มี แล้วเปิดโปรแกรม
- ไปที่แท็บ Project ด้านซ้าย
- คลิก Create เพื่อสร้าง Project ใหม่
- ตั้งชื่อ 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
- ตรวจสอบการตั้งค่าให้ถูกต้อง
- คลิก Create เพื่อ Deploy Project
- รอสักครู่ให้ระบบดาวน์โหลด Docker Image และสร้าง Container
- เมื่อเสร็จแล้วจะเห็นสถานะ “Success Stack successfully deployed”
ขั้นตอนที่ 6: เข้าใช้งาน RomM
- เปิดเว็บเบราว์เซอร์
- พิมพ์
http://IP-Address-ของ-NAS:7676
เช่นhttp://192.168.1.100:7676
- ระบบจะขอให้สร้างบัญชี Admin ครั้งแรก
- กรอก Username และ Password ที่ต้องการ
- คลิก NEXT และ FINISH
ขั้นตอนที่ 7: อัปโหลดเกมและใช้งาน
- อัปโหลดเกม: คัดลอกไฟล์ ROM ไปใส่ในโฟลเดอร์
/docker/romm/games/library/
หรืออัปโหลดผ่านเว็บ interface - จัดระเบียบตามแพลตฟอร์ม: สร้างโฟลเดอร์ย่อยสำหรับแต่ละแพลตฟอร์ม เช่น
Nintendo - Game Boy
,Sony - PlayStation
- สแกนเกม: RomM จะสแกนและดึงข้อมูลอัตโนมัติถ้าชื่อไฟล์ถูกต้อง
- เล่นเกม: คลิกที่เกมที่ต้องการและเลือก Play เพื่อเล่นผ่านเบราว์เซอร์
การปรับแต่งเพิ่มเติม (ทำทีหลังได้)
เพิ่ม Metadata Providers
ถ้าต้องการข้อมูลเกมที่สมบูรณ์ขึ้น สามารถลงทะเบียนกับบริการเหล่านี้และเอา API Key มาใส่ในการตั้งค่า:
- Screenscraper: ภาพหน้าจอและข้อมูลเกม
- IGDB: ข้อมูลเกมจาก Internet Game Database
- MobyGames: ข้อมูลเกมโบราณ
- SteamGridDB: ภาพประกอบสวยๆ
- RetroAchievements: ระบบความสำเร็จในเกม
เพียงแค่เอาเครื่องหมาย #
ออกหน้าบรรทัดที่ต้องการและใส่ API Key ที่ได้รับ
การใช้งาน HTTPS
หากต้องการความปลอดภัยเพิ่มขึ้น สามารถตั้งค่า HTTPS ผ่าน Reverse Proxy หรือใช้ Cloudflare Tunnel
การแก้ไขปัญหาเบื้องต้น
Container ไม่เริ่มทำงาน
- ตรวจสอบ Log ใน Container Manager > Container > เลือก Container > Details > Log
- ตรวจสอบว่าโฟลเดอร์ทั้งหมดถูกสร้างอย่างถูกต้อง
- ตรวจสอบ Secret Key ว่าใส่ถูกต้อง
เข้า RomM ไม่ได้
- ตรวจสอบ Port 7676 ว่าเปิดอยู่หรือไม่
- ลอง restart Project ใน Container Manager
- ตรวจสอบ IP Address ของ NAS ว่าถูกต้อง