🐳 romm

A beautiful, powerful, self-hosted rom manager and player.

Docker Ready 6 Services Ports: 3000, 5173, 8443, 5678, 3306, 5432, 9001, 9444 11,912 stars
1. Pull Image docker pull library/mariadb
2. 1-Click Launch Command docker run -d -p 3000:3000 --name romm mariadb:11.3.2
3. Compose Deployment docker compose up -d
docker-compose.yml
Download .yml
# Please see the full example under examples/docker-compose.example.yml

services:
  romm-dev:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: romm-dev
    env_file: .env
    environment:
      - REDIS_HOST=romm-valkey-dev
      - DB_HOST=${DB_HOST:-romm-db-dev}
      - ROMM_BASE_PATH=/app/romm
    ports:
      - "3000:3000" # Vite dev server (custom)
      - "5173:5173" # Vite dev server (default)
      - "8443:8443" # HTTPS dev server
      - "5678:5678" # debugpy
      - "${DEV_PORT:-5000}:5000" # Backend API
    volumes:
      - ./backend:/app/backend
      - /app/backend/romm_mock # Empty directory
      - ./frontend:/app/frontend
      - /app/frontend/node_modules # Empty directory
      - /app/frontend/dist # Empty directory
      - ./romm_mock:/app/romm
      - ~/.vite-plugin-mkcert:/app/.vite-plugin-mkcert
    depends_on:
      - romm-db-dev
      - romm-valkey-dev
      - romm-postgres-dev
    command: /bin/bash -c "cd /app && bash"
    stdin_open: true
    tty: true

  romm-db-dev:
    image: mariadb:11.3.2
    container_name: romm-db-dev
    restart: unless-stopped
    env_file: .env
    environment:
      - MARIADB_ROOT_PASSWORD=${DB_ROOT_PASSWD:-rootpassword}
      - MARIADB_DATABASE=${DB_NAME:-romm}
      - MARIADB_USER=${DB_USER:-romm}
      - MARIADB_PASSWORD=${DB_PASSWD:-romm}
    volumes:
      - romm-db-dev:/var/lib/mysql
    ports:
      - "3306:3306"

  romm-valkey-dev:
    image: valkey/valkey:8
    container_name: romm-valkey-dev
    restart: unless-stopped
    env_file: .env
    ports:
      - "${REDIS_PORT:-6379}:6379"

  romm-postgres-dev:
    image: postgres:16-alpine
    container_name: romm-postgresql-dev
    restart: unless-stopped
    env_file: .env
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-authentik}
      POSTGRES_USER: ${POSTGRES_USER:-romm}
      POSTGRES_DB: ${POSTGRES_DB:-authentik}
    volumes:
      - postgres-db:/var/lib/postgresql/data
    ports:
      - "5432:5432"

  romm-authentik-server:
    image: ghcr.io/goauthentik/server:2024.10.4
    container_name: romm-authentik-server
    restart: unless-stopped
    command: server
    env_file: .env
    environment:
      AUTHENTIK_REDIS__HOST: romm-valkey-dev
      AUTHENTIK_POSTGRESQL__HOST: romm-postgres-dev
      AUTHENTIK_POSTGRESQL__USER: ${POSTGRES_USER:-romm}
      AUTHENTIK_POSTGRESQL__NAME: ${POSTGRES_DB:-authentik}
      AUTHENTIK_POSTGRESQL__PASSWORD: ${POSTGRES_PASSWORD:-authentik}
      AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:-secret-key-default}
      AUTHENTIK_BOOTSTRAP_PASSWORD: ${AUTHENTIK_BOOTSTRAP_PASSWORD:-password}
    volumes:
      - authentik-media:/media
      - authentik-templates:/templates
    ports:
      - "9001:9000"
      - "9444:9443"
    depends_on:
      - romm-postgres-dev
      - romm-valkey-dev

  romm-authentik-worker:
    image: ghcr.io/goauthentik/server:2024.10.4
    container_name: romm-authentik-worker
    restart: unless-stopped
    command: worker
    env_file: .env
    environment:
      AUTHENTIK_REDIS__HOST: romm-valkey-dev
      AUTHENTIK_POSTGRESQL__HOST: romm-postgres-dev
      AUTHENTIK_POSTGRESQL__USER: ${POSTGRES_USER:-romm}
      AUTHENTIK_POSTGRESQL__NAME: ${POSTGRES_DB:-authentik}
      AUTHENTIK_POSTGRESQL__PASSWORD: ${POSTGRES_PASSWORD:-authentik}
      AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:-secret-key-default}
      AUTHENTIK_BOOTSTRAP_PASSWORD: ${AUTHENTIK_BOOTSTRAP_PASSWORD:-password}
    volumes:
      - authentik-media:/media
      - authentik-templates:/templates
    depends_on:
      - romm-postgres-dev
      - romm-valkey-dev

volumes:
  romm-db-dev:
  postgres-db:
  authentik-media:
  authentik-templates: