Files
2026-07-16 19:56:22 -04:00

77 lines
4.5 KiB
Markdown

# RomM
Deploy RomM (Rom Manager) using Docker Compose.
## Description
RomM is a self-hosted ROM manager and player for retro game libraries, with metadata scraping from ScreenScraper, RetroAchievements, SteamGridDB, and Hasheous.
## Variables
### Required
| Variable | Default | Description |
|----------|---------|-------------|
| `romm_db_password` | `""` | MariaDB password for the RomM user |
| `romm_db_root_password` | `""` | MariaDB root password |
| `romm_auth_secret_key` | `""` | Auth secret; generate with `openssl rand -hex 32` |
| `romm_library_path` | `{{ app_dir }}/library` | Host path holding the ROM library |
### Optional — Deployment
| Variable | Default | Description |
|----------|---------|-------------|
| `romm_http_port` | `8080` | Web interface port |
| `romm_container_version` | `latest` | RomM image tag |
| `romm_db_container_version` | `latest` | MariaDB image tag |
| `romm_assets_path` | `{{ app_dir }}/assets` | Uploaded saves, states, screenshots |
| `romm_config_path` | `{{ app_dir }}/config` | Location of `config.yml` |
| `romm_resources_path` | `{{ app_dir }}/resources` | Fetched metadata (covers, screenshots) |
| `romm_mysql_data_path` | `{{ app_dir }}/mysql-data` | MariaDB data directory |
| `romm_redis_data_path` | `""` | Optional host path to persist RomM's in-container Redis cache. Leave empty to use the ephemeral default. |
| `romm_db_name` | `romm` | MariaDB database name |
| `romm_db_user` | `romm-user` | MariaDB username |
### Optional — Metadata providers
All metadata providers are optional. See the [RomM metadata providers docs](https://docs.romm.app/latest/getting-started/metadata-providers) for how to obtain credentials. Empty credentials and disabled toggles are omitted from the rendered `.env` — no need to null out unused providers.
| Variable | Default | Description |
|----------|---------|-------------|
| `romm_igdb_client_id` | `""` | IGDB client ID |
| `romm_igdb_client_secret` | `""` | IGDB client secret |
| `romm_screenscraper_user` | `""` | ScreenScraper username |
| `romm_screenscraper_password` | `""` | ScreenScraper password |
| `romm_mobygames_api_key` | `""` | MobyGames API key (paid subscription) |
| `romm_launchbox_api_enabled` | `false` | Enable the LaunchBox provider |
| `romm_launchbox_scheduled_update_enabled` | `false` | Enable scheduled LaunchBox metadata refresh |
| `romm_launchbox_scheduled_update_cron` | `""` | Cron expression for the LaunchBox refresh (defaults to RomM's built-in schedule when unset) |
| `romm_hasheous_api_enabled` | `true` | Enable the Hasheous provider |
| `romm_playmatch_api_enabled` | `false` | Enable the Playmatch provider |
| `romm_steamgriddb_api_key` | `""` | SteamGridDB API key |
| `romm_retroachievements_api_key` | `""` | RetroAchievements API key |
| `romm_flashpoint_api_enabled` | `false` | Enable the Flashpoint provider |
| `romm_hltb_api_enabled` | `false` | Enable the HowLongToBeat provider |
By default, backups include `assets`, `config`, `resources`, and `mysql-data`. The `library` directory is excluded (typically large and often on separate storage), and the Redis cache is not mounted at all by default (RomM's built-in Redis is ephemeral). Override `app_backup_subdirectories` to change this.
Runtime environment variables for the `romm` service are rendered to `{{ app_dir }}/.env` (loaded via `env_file:` in the compose file), so the compose file itself stays short. The `romm-db` service reads the three shared DB values (`DB_NAME`, `DB_USER`, `DB_PASSWD`) from the same `.env` via compose's `${VAR}` interpolation, so there's a single source of truth for the DB credentials. `MARIADB_ROOT_PASSWORD` stays inline in the compose file — it's DB-only and shouldn't be injected into the RomM container. `app_compose_validate` is disabled because compose validation runs against a temp path where the `.env` isn't co-located.
## Example
```yaml
- role: patrickj.docker_apps.romm
vars:
romm_http_port: 8080
romm_library_path: /mnt/storage/roms
romm_db_password: "{{ vault_romm_db_password }}"
romm_db_root_password: "{{ vault_romm_db_root_password }}"
romm_auth_secret_key: "{{ vault_romm_auth_secret_key }}"
romm_igdb_client_id: "{{ vault_romm_igdb_client_id }}"
romm_igdb_client_secret: "{{ vault_romm_igdb_client_secret }}"
romm_screenscraper_user: "{{ vault_romm_screenscraper_user }}"
romm_screenscraper_password: "{{ vault_romm_screenscraper_password }}"
romm_retroachievements_api_key: "{{ vault_romm_retroachievements_api_key }}"
romm_steamgriddb_api_key: "{{ vault_romm_steamgriddb_api_key }}"
```