Files
app-catalog-felhom.eu/templates/romm/docker-compose.yml
T
admin 69611cec18 userdata layout: repoint customer-content mounts to ${USERDATA_PATH}
Move every shared-media + ingest mount off ${HDD_PATH}/media onto the new
${USERDATA_PATH}/... convention (controller injects USERDATA_PATH = <namespace>/userdata):
- jellyfin/emby/plex: media:/media:ro ; navidrome: media/music:ro
- audiobookshelf (user 1000:1000): media/{audiobooks,podcasts}
- komga (user 1000:1000): media/comics
- calibre-web (UMASK=002): library->media/books, ingest->import/calibre
- radarr/sonarr (UMASK=002): media/{movies,tv} + downloads (sibling, same FS)
- romm: ROM library -> userdata/roms (browsable); resources stay in appdata
- immich: + external library media/photos:/external/photos:ro (registration is a
  post-deploy admin step — flagged in compose + .felhom.yml)
- paperless: consume -> import/paperless (USERMAP 1000)
- nextcloud: unchanged (fully app-managed)
.felhom.yml first_steps updated for the new browsable drop-zones.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 21:46:23 +02:00

145 lines
4.3 KiB
YAML

# ROMM - ROM Manager for Game Libraries
# Domain: ${SUBDOMAIN}.${DOMAIN}
# Database: MariaDB + Redis
# RAM: ~300MB (mem_limit: 1024M total — romm 512M + mariadb 384M + redis 128M) | Pi-compatible: No (MariaDB + heavy)
#
# Environment variables:
# DOMAIN - Your domain (e.g., demo-felhom.eu)
# HDD_PATH - Drive namespace root (appdata lives here)
# USERDATA_PATH - Ügyfél-tartalom gyökér (<namespace>/userdata)
# DB_PASSWORD - MariaDB user password (auto-generated)
# MYSQL_ROOT_PASSWORD - MariaDB root password (auto-generated)
# ROMM_AUTH_SECRET_KEY - Auth secret (auto-generated)
#
# Storage layout (felhom userdata convention):
# ROM library → ${USERDATA_PATH}/roms (browsable — drop ROMs here via FileBrowser)
# Cover art etc → ${HDD_PATH}/appdata/romm/resources (app-internal, NOT browsable)
# App config → romm_config (named volume, NVMe)
# MariaDB data → romm_db_data (named volume, NVMe)
# Redis data → romm_redis_data (named volume, NVMe)
#
# First-time setup:
# Default login: admin / admin — change immediately!
services:
romm:
image: rommapp/romm:4.5.0
container_name: romm
restart: unless-stopped
depends_on:
romm-db:
condition: service_healthy
romm-redis:
condition: service_healthy
entrypoint: ["/bin/sh", "-c"]
command:
- |
if [ ! -f /romm/config/config.yml ]; then
echo "Creating default config.yml..."
cat > /romm/config/config.yml << 'CONF'
exclude:
platforms: []
roms: []
system:
log_level: INFO
CONF
fi
exec /docker-entrypoint.sh /init
environment:
- ROMM_AUTH_SECRET_KEY=${ROMM_AUTH_SECRET_KEY}
- DB_PASSWD=${DB_PASSWORD}
- DB_HOST=romm-db
- DB_PORT=3306
- DB_NAME=romm
- DB_USER=romm
- REDIS_HOST=romm-redis
- REDIS_PORT=6379
- ROMM_PORT=8080
- IGDB_CLIENT_ID=${IGDB_CLIENT_ID:-}
- IGDB_CLIENT_SECRET=${IGDB_CLIENT_SECRET:-}
- STEAMGRIDDB_API_KEY=${STEAMGRIDDB_API_KEY:-}
- SCREENSCRAPER_USER=${SCREENSCRAPER_USER:-}
- SCREENSCRAPER_PASSWORD=${SCREENSCRAPER_PASSWORD:-}
- MOBYGAMES_API_KEY=${MOBYGAMES_API_KEY:-}
- TZ=Europe/Budapest
volumes:
- ${USERDATA_PATH}/roms:/romm/library
- ${HDD_PATH}/appdata/romm/resources:/romm/resources
- romm_config:/romm/config
networks:
- traefik-public
- romm-internal
deploy:
resources:
limits:
memory: 512M
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
labels:
- "traefik.enable=true"
- "traefik.http.routers.romm.rule=Host(`${SUBDOMAIN}.${DOMAIN}`)"
- "traefik.http.routers.romm.entrypoints=websecure"
- "traefik.http.routers.romm.tls=true"
- "traefik.http.routers.romm.tls.certresolver=letsencrypt"
- "traefik.http.services.romm.loadbalancer.server.port=8080"
romm-db:
image: mariadb:11.4
container_name: romm-db
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=romm
- MYSQL_USER=romm
- MYSQL_PASSWORD=${DB_PASSWORD}
- TZ=Europe/Budapest
volumes:
- romm_db_data:/var/lib/mysql
networks:
- romm-internal
deploy:
resources:
limits:
memory: 384M
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
romm-redis:
image: redis:7-alpine
container_name: romm-redis
restart: unless-stopped
command: redis-server --appendonly yes
environment:
- TZ=Europe/Budapest
volumes:
- romm_redis_data:/data
networks:
- romm-internal
deploy:
resources:
limits:
memory: 128M
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 3
volumes:
romm_config:
romm_db_data:
romm_redis_data:
networks:
traefik-public:
external: true
romm-internal: