# ROMM - ROM Manager for Game Libraries # Domain: arcade.${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 - HDD mount path (e.g., /mnt/hdd_1) # 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: # ROM library → ${HDD_PATH}/storage/romm/library (HDD, host path) # Cover art etc → ${HDD_PATH}/storage/romm/resources (HDD, host path) # 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: - ${HDD_PATH}/storage/romm/library:/romm/library - ${HDD_PATH}/storage/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(`arcade.${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: