Table of Contents

ROMM

RomM is a ROM manager for your console ROM collection. Moreover, it also allow you to play your games directly in the browser. Pretty neat, eh.

Installation

Create the usual dedicated user called romm belonging to the media group, so it can access your collection, since we are here, also create the podman network you will use later on:

useradd -d /data/daemons/romm -m -g media romm
podman network create romm-net

Create the required folder structure:

cd /data
mkdir ROMs
mkdir ROMs/roms
mkdir ROMs/assets
mkdir ROMs/config

The ROMs should be moved under the roms folder following the specific structure defined here. Please note that what is called library path is the /data/ROMs folder!

Now, create the required IGDB/MobyGames APIs according to theinstructions here. this is a bit complex and long process, but it's needed to properly organize your ROMs.

Download the docker-compose.yml:

su - romm
wget -O docker-compose.yml https://github.com/rommapp/romm/raw/release/examples/docker-compose.example.yml

and edit it at lest for:

These needs to be filled up properly:
      - DB_PASSWD=blahblahmysecret
      - IGDB_CLIENT_ID= <<< see above >>>
      - IGDB_CLIENT_SECRET= <<< see above >>>
      - MOBYGAMES_API_KEY= << see above >>>
      - ROMM_AUTH_SECRET_KEY= # Generate a key with `openssl rand -hex 32`

These need to be adapted to your setup:
      - /data/ROMs:/romm/library # Your game library
      - /data/ROMs/assets:/romm/assets # Uploaded saves, states, etc.
      - /data/ROMs/config:/romm/config # Path where config.yml is stored

Choose an available port (es: 22800):
    ports:
      - 2280:8080

These needs to be set:
     - MYSQL_ROOT_PASSWORD= blahblahmysecret
      - MYSQL_PASSWORD= oiwejfoiwjoifwfoij

This needs to be added to both services:
    networks:
      - romm-net

This goes at the bottom of the file:
networks:
  romm-net: {}

Now pull the images:

podman compose pull

Reserse Proxy

RomM needs to run on it's own subdomain. So check The Reverse Proxy concept and use a similar config file romm.conf:

romm.conf
server {
        server_name romm.mydomain.com;
        listen 8443 ssl; # managed by Certbot
        listen 443 ssl; # managed by Certbot
        client_max_body_size 50000M;
        large_client_header_buffers 4 32k;

        access_log /var/log/nginx/romm.mydomain.com_access_log main;
        error_log /var/log/nginx/romm.mydomain.com_error_log info;
       
       include "com.mydomain/authelia_location-basic.conf";

        location / {
                proxy_pass http://127.0.0.1:2280/;
                include "com.mydomain/authelia_proxy.conf";
                include "com.mydomain/authelia_authrequest-basic.conf";          
                proxy_set_header Connection $http_connection;
                proxy_set_header Upgrade $http_upgrade;
        }
        include com.mydomain/certbot.conf;
}

RomM also support Basic Authantication, and the above configuration file will enable it using Authelia.

Adapt to your needs and restart your NGINX.

Autostart

To start it, and set it up on boot, as usual follow my indications Using Containers on Gentoo, so link the user-containers init script:

ln -s /etc/init.d/user-containers /etc/init.d/user-containers.romm

and create the following config file:

/etc/conf.d/user-containers.romm
USER=romm
DESCRIPTION="The rom server"

Add the service to the default runlevel and start it now:

rc-update add user-containers.romm default
rc-service user-containers.romm start