====== ROMM ======
[[https://github.com/rommapp/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 [[https://github.com/rommapp/romm?tab=readme-ov-file#-folder-structure|here]]. Please note that what is called __library__ path is the **/data/ROMs** folder!
Now, create the required IGDB/MobyGames APIs according to the[[https://github.com/rommapp/romm/wiki/Generate-API-Keys|instructions 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 [[selfhost:nginx|The Reverse Proxy concept]] and use a similar config file **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 [[gentoo:containers|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:
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