RomM: Gestiona y Disfruta tu Colección de Roms vía web
En el universo de la emulación y los videojuegos retro, mantener una colección de ROMs organizada, accesible y bien presentada puede ser un desafío tan grande como superar el último nivel de Contra. Afortunadamente, existen herramientas que nos facilitan esta tarea enormemente. Hoy vamos a hablar de una de mis favoritas: RomM, un gestor de ROMs moderno, visual y potente que puedes desplegar en tu propio servidor de una manera increíblemente sencilla gracias a Docker.
Si eres un entusiasta de GNU/Linux, la autogestión de servicios (self-hosting) y te apasiona el mundo de los videojuegos clásicos, este artículo es para ti. Te guiaré paso a paso para que puedas tener tu propia instancia de RomM funcionando en minutos con Docker Compose.
¿Qué es RomM?
RomM es una aplicación web de código abierto diseñada para ser el centro de tu colección de videojuegos retro. Pensá en él como una especie de Plex o Jellyfin, pero específicamente creado para tus ROMs. Su objetivo es escanear tus directorios de juegos, identificar cada ROM y enriquecerla con metadatos como carátulas, descripciones, fechas de lanzamiento y más.
Sus características principales incluyen:
- Interfaz Gráfica Atractiva: RomM presentá tu colección de una forma visual y ordenada, lejos de las aburridas listas de archivos.
- Scraping Automático: Se conecta a bases de datos online como ScreenScraper para descargar automáticamente toda la información y el arte de tus juegos.
- Soporte Multiplataforma: Organizá juegos de decenas de consolas y sistemas, desde la Atari 2600 hasta la PlayStation 2.
- Acceso Remoto: Al ser una aplicación web, puedes acceder a tu colección desde cualquier dispositivo con un navegador, ya sea tu PC, tablet o teléfono.
- Ligero y Eficiente: Está diseñado para funcionar de manera óptima sin consumir una cantidad excesiva de recursos de tu sistema.
La combinación de estas características lo convierte en la solución ideal para centralizar y gestionar una colección creciente de ROMs, especialmente si tienes un NAS o un servidor casero donde almacenas tus tesoros digitales.
La Magia de Docker Compose: ¿Por Qué Usarlo?
Antes de sumergirnos en el código, hablemos brevemente de por qué Docker Compose es la herramienta perfecta para esta tarea. Docker nos permite "empaquetar" una aplicación con todas sus dependencias en un contenedor aislado. Esto significa que no tenemos que preocuparnos por instalar versiones específicas de Node.js, gestionar librerías del sistema o lidiar con conflictos de software. El contenedor tiene todo lo que RomM necesita para funcionar.
Docker Compose lleva esto un paso más allá al permitirnos definir y gestionar aplicaciones multi-contenedor con un único archivo de configuración llamado docker-compose.yml
. Para RomM, esto simplifica el proceso a un solo comando. Es limpio, reproducible e increíblemente eficiente.
Manos a la Obra: Desplegando RomM con Docker Compose
Vamos a lo que nos interesa. Asumiré que ya tenés Docker y Docker Compose instalados en tu sistema GNU/Linux. Si no es así, puedes seguir la guía oficial de Docker para tu distribución.
1. Estructura de Directorios
Primero, vamos a crear una estructura de directorios organizada para nuestro proyecto. Abre tu terminal y ejecuta:
mkdir ~/romm
cd ~/romm
mkdir -p ./config/romm ./roms ./games
~/romm
: Será el directorio principal de nuestro proyecto../config/romm
: Acá se guardarán los archivos de configuración y la base de datos de RomM. Es crucial mapear este volumen para que tus datos persistan si el contenedor se reinicia o actualiza../roms
: En este directorio montarás la carpeta donde guardas tus colecciones de ROMs../games
: Dentro del contenedor, esta será la ruta donde RomM buscará los juegos.
2. Creando el Archivo docker-compose.yml
Ahora, dentro del directorio ~/romm
, crea un archivo llamado docker-compose.yml
con tu editor de texto preferido (como nano
o vim
) y pega el siguiente contenido:
version: '3.8'
services:
romm:
image: rommapp/romm:latest
container_name: romm
restart: unless-stopped
ports:
- "8080:8080" # Puedes cambiar el puerto 8080 de la izquierda si está ocupado
volumes:
- ./config/romm:/config # Mapea la configuración persistente
- /ruta/a/tu/coleccion/de/roms:/games:ro # Mapea tu colección de ROMs (solo lectura)
environment:
- PUID=1000
- PGID=1000
- TZ=America/Argentina/Buenos_Aires # Ajusta a tu zona horaria
Analicemos este archivo línea por línea:
version: '3.8'
: Define la versión de la sintaxis de Docker Compose que estamos utilizando.services:
: Aquí comenzamos a definir los servicios (contenedores) de nuestra aplicación.romm:
: El nombre que le damos a nuestro servicio.image: rommapp/romm:latest
: Especifica la imagen de Docker que se utilizará. Estamos usando la imagen oficial de RomM alojada en el registro de contenedores de GitHub.:latest
indica que siempre usará la última versión estable.container_name: romm
: Un nombre amigable para nuestro contenedor, facilitando su gestión.restart: unless-stopped
: Política de reinicio. El contenedor se reiniciará automáticamente si se detiene por un error, pero no si lo detenemos manualmente.ports:
: Mapea los puertos entre el host (tu máquina) y el contenedor. La sintaxis esHOST:CONTAINER
. En este caso, el puerto 8080 de tu máquina se redirige al puerto 8080 dentro del contenedor, que es donde escucha RomM.volumes:
: Esta es una de las partes más importantes../config/romm:/config
: Mapea el directorio de configuración que creamos en nuestro host al directorio/config
dentro del contenedor. Así, toda la configuración de RomM se guarda fuera del contenedor./ruta/a/tu/coleccion/de/roms:/games:ro
: ¡Ojo acá! Debes reemplazar/ruta/a/tu/coleccion/de/roms
con la ruta real donde almacenás tus ROMs en tu sistema. El:ro
al final significa read-only (solo lectura). Es una buena práctica para evitar que la aplicación modifique o elimine accidentalmente tus preciados archivos de juego. Te doy ese tip pero yo no lo uso, jejejej.
environment:
: Permite definir variables de entorno para el contenedor.PUID
yPGID
: Definen el ID de usuario y de grupo con el que se ejecutará el proceso dentro del contenedor. Es muy importante que los ajustes a los de tu propio usuario para evitar problemas de permisos con los volúmenes. Puedes obtener los tuyos ejecutando el comandoid
en tu terminal.TZ
: Establece la zona horaria para que los logs y cualquier otra información sensible al tiempo sean correctos.
3. ¡A Lanzar el Contenedor!
Con el archivo docker-compose.yml
guardado y tu ruta de ROMs correctamente configurada, ejecutar RomM es tan simple como correr el siguiente comando desde el directorio ~/romm
:
docker-compose up -d
El flag -d
significa detached, lo que hace que el contenedor se ejecute en segundo plano. Docker Compose descargará la imagen de RomM (si no la tenés localmente) y arrancará el contenedor con la configuración que especificamos.
Para verificar que todo está funcionando, podés ejecutar:
docker-compose logs -f
Esto te mostrará los logs de la aplicación en tiempo real. Si todo ha ido bien, no deberías ver errores.
Configuración Inicial de RomM
Una vez que el contenedor esté en marcha, abre tu navegador web y navega a http://<IP_de_tu_servidor>:8080
. Serás recibido por el asistente de configuración inicial de RomM.
- Crear un Usuario: Lo primero será crear una cuenta de administrador.
- Configurar el Scraper: Se te pedirá que introduzcas tus credenciales de ScreenScraper.fr. Es un servicio gratuito (aunque con algunas limitaciones en la versión gratuita) que proporciona los metadatos. Si no tenés una cuenta, es el momento de crearla.
- Escanear ROMs: El paso final es indicarle a RomM que comience a escanear. Recordarás que mapeamos nuestras ROMs al directorio
/games
dentro del contenedor. RomM debería detectarlo automáticamente. Inicia+ el escaneo y ten paciencia, dependiendo del tamaño de tu colección, este proceso puede tardar un buen rato.
Una vez finalizado, ¡listo! Podrás navegar por tu colección, ver las carátulas, leer las sinopsis y maravillarte de lo bien organizada que está tu biblioteca de juegos retro.
Para que lo tengas en cuenta
RomM, combinado con la simplicidad y el poder de Docker Compose, ofrece una solución casi perfecta para cualquier aficionado a la emulación que quiera llevar su colección al siguiente nivel. En pocos minutos y con un solo archivo de configuración, hemos desplegado un servicio robusto, aislado y fácil de mantener.
Esta es la belleza del ecosistema de GNU/Linux y el software de código abierto: herramientas poderosas que nos dan el control total sobre nuestra infraestructura y nuestros datos, permitiéndonos crear soluciones personalizadas para nuestras pasiones. ¡Ahora andá a organizar esa colección y a disfrutar de unas buenas partidas!