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.


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

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):
      - 2280:8080

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

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

This goes at the bottom of the file:
  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:

server {
        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;

        location / {
                proxy_set_header Connection $http_connection;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Host $host;
        include com.mydomain/certbot.conf;

Adapt to your needs and restart your NGINX.


Assuming you are following my Custom User Services, all you need to do is creating the following links:

cd /etc/local.d
ln -s 61-romm--podman.start
ln -s 61-romm--podman.stop

And done.