Skip to content

Latest commit

 

History

History
397 lines (311 loc) · 10.2 KB

File metadata and controls

397 lines (311 loc) · 10.2 KB

RomM Helm Chart

Version: 1.0.4 AppVersion: 4.5.0

A Helm chart for RomM - Beautiful, powerful, self-hosted ROM manager.

TL;DR

# Add the Helm repository
helm repo add romm https://henriqzimer.github.io/helm-applications
helm repo update

# Install RomM
helm install romm romm/romm

Prerequisites

  • Kubernetes 1.19+
  • Helm 3.0+
  • A running MariaDB/MySQL database (or use the included MariaDB chart)
  • Persistent storage for ROMs, config, and assets
  • Ingress controller (nginx-ingress recommended)
  • cert-manager (optional, for automatic TLS certificates)

Installing the Chart

From Helm Repository

# Add the repository
helm repo add romm https://henriqzimer.github.io/helm-applications
helm repo update

# Install RomM
helm install romm romm/romm

From Source

# Clone the repository
git clone https://github.com/henriqzimer/k8s.git
cd k8s/helm-applications

# Package the chart
helm package romm/

# Install from local package
helm install romm ./romm-1.0.0.tgz

Configuration

Required Configuration

Before deploying, you need to configure several required values:

  1. Database Configuration: Set up MariaDB connection details
  2. Secrets: Configure authentication secrets and API keys
  3. Storage: Configure persistent volumes for ROMs and data
  4. Ingress: Configure domain and TLS settings

Example values-production.yaml

# Database configuration
secrets:
  enabled: true
  data:
    DB_HOST: "romm-mariadb"
    DB_PORT: "3306"
    DB_USER: "romm"
    DB_PASSWD: "your_secure_password"
    DB_NAME: "romm"
    MYSQL_ROOT_PASSWORD: "your_root_password"
    MYSQL_DATABASE: "romm"
    MYSQL_USER: "romm"
    MYSQL_PASSWORD: "your_secure_password"
    ROMM_AUTH_SECRET_KEY: "your_32_char_secret_key"
    IGDB_CLIENT_ID: "your_igdb_client_id"
    IGDB_CLIENT_SECRET: "your_igdb_client_secret"
    STEAMGRIDDB_API_KEY: "your_steamgriddb_api_key"

# Ingress configuration
romm:
  ingress:
    enabled: true
    hosts:
      - host: romm.yourdomain.com
        paths:
          - path: /
            pathType: Prefix
    tls:
      - secretName: romm-tls
        hosts:
          - romm.yourdomain.com

  # Storage configuration
  persistence:
    config:
      enabled: true
      existingClaim: "romm-config-pvc"
    library:
      enabled: true
      existingClaim: "romm-library-pvc"
    resources:
      enabled: true
      existingClaim: "romm-resources-pvc"
    assets:
      enabled: true
      existingClaim: "romm-assets-pvc"

Using External Secrets

For production deployments, it's recommended to use ExternalSecrets Operator:

secrets:
  enabled: false

romm:
  envFrom:
    - secretRef:
        name: romm-external-secrets

Database Options

Option 1: Internal MariaDB (Development/All-in-One)

Deploy MariaDB as part of the Helm chart. This is ideal for development or testing.

mariadb:
  enabled: true
  persistence:
    enabled: true
    size: 10Gi
    storageClass: "your-storage-class"

secrets:
  enabled: true
  data:
    # Database credentials
    DB_USER: "romm"
    DB_PASSWD: "your_secure_password"
    DB_NAME: "romm"
    DB_PORT: "3306"
    # MariaDB root password
    MYSQL_ROOT_PASSWORD: "your_root_password"
    # Other RomM settings...
    ROMM_AUTH_SECRET_KEY: "your_32_char_secret_key"

Option 2: External MariaDB/MySQL (Production)

Use an existing external MariaDB or MySQL database. Perfect for production deployments where you want to manage your database separately.

mariadb:
  enabled: false
  externalDatabase:
    host: "mysql.example.com"

secrets:
  enabled: true
  data:
    # Database credentials for external database
    DB_USER: "romm"
    DB_PASSWD: "your_secure_password"
    DB_NAME: "romm"
    DB_PORT: "3306"
    # Note: MYSQL_ROOT_PASSWORD is not needed for external databases
    # Other RomM settings...
    ROMM_AUTH_SECRET_KEY: "your_32_char_secret_key"

Important Notes for External Database:

  • The database specified in DB_NAME must already exist on your external database server
  • The user specified in DB_USER must have full permissions on that database
  • Configure DB_PORT in your secrets (defaults to 3306)
  • You don't need to configure MYSQL_ROOT_PASSWORD when using an external database
  • Ensure network connectivity between your Kubernetes cluster and the external database server

Storage Configuration

RomM requires several persistent volumes:

romm:
  persistence:
    # Configuration data (database connection, API keys, etc)
    config:
      enabled: true
      size: 1Gi
      storageClass: "your-storage-class"
      # OR use existing PVC
      existingClaim: "romm-config-pvc"

    # ROM library storage
    library:
      enabled: true
      size: 100Gi
      storageClass: "your-storage-class"
      existingClaim: "romm-library-pvc"

    # Resources (cover images, screenshots, etc)
    resources:
      enabled: true
      size: 10Gi
      storageClass: "your-storage-class"
      existingClaim: "romm-resources-pvc"

    # Assets (EmulatorJS files, etc)
    assets:
      enabled: true
      size: 5Gi
      storageClass: "your-storage-class"
      existingClaim: "romm-assets-pvc"

TLS Configuration

Using cert-manager (Recommended)

romm:
  ingress:
    annotations:
      cert-manager.io/cluster-issuer: "letsencrypt-prod"
      nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    tls:
      - secretName: romm-tls
        hosts:
          - romm.yourdomain.com

Using Existing Certificate

romm:
  ingress:
    tls:
      - secretName: your-existing-tls-secret
        hosts:
          - romm.yourdomain.com

API Keys Configuration

RomM integrates with several external services. Get API keys from:

Parameters

Global Parameters

Name Description Value
replicaCount Number of RomM replicas 1
revisionHistoryLimit Number of old ReplicaSets to retain 3
imagePullSecrets Image pull secrets []
nameOverride Override the default name ""
fullnameOverride Override the default full name ""

RomM Application Parameters

Name Description Value
romm.image.repository RomM image repository docker.io/rommapp/romm
romm.image.tag RomM image tag 4.5.0
romm.image.pullPolicy Image pull policy IfNotPresent
romm.service.type Service type ClusterIP
romm.service.port Service port 8080
romm.ingress.enabled Enable ingress true
romm.ingress.className Ingress class name nginx

Database Parameters

Name Description Value
mariadb.enabled Enable internal MariaDB deployment true
mariadb.externalDatabase.host External database hostname (when mariadb.enabled=false) ""
mariadb.image.repository MariaDB image repository docker.io/mariadb
mariadb.image.tag MariaDB image tag 11
mariadb.service.type MariaDB service type ClusterIP
mariadb.service.port MariaDB service port 3306
mariadb.persistence.enabled Enable MariaDB persistence false
mariadb.persistence.size MariaDB PVC size 10Gi

Persistence Parameters

Name Description Value
romm.persistence.config.enabled Enable config persistence true
romm.persistence.config.size Config PVC size 1Gi
romm.persistence.library.enabled Enable library persistence true
romm.persistence.library.size Library PVC size 100Gi
romm.persistence.resources.enabled Enable resources persistence true
romm.persistence.resources.size Resources PVC size 10Gi
romm.persistence.assets.enabled Enable assets persistence true
romm.persistence.assets.size Assets PVC size 5Gi

Troubleshooting

Common Issues

  1. Database Connection Issues

    • Ensure MariaDB is running and accessible
    • Check DB_HOST, DB_PORT, DB_USER, DB_PASSWD values
    • Verify network policies allow communication
  2. Permission Issues

    • Ensure PVCs have correct permissions (RomM runs as non-root)
    • Check storage class supports the required access modes
  3. Ingress Issues

    • Verify ingress controller is installed and running
    • Check DNS resolution for your domain
    • Ensure TLS secret exists and is valid
  4. API Key Issues

    • Verify API keys are correctly set in secrets
    • Check API service status and rate limits

Logs

# View RomM pod logs
kubectl logs -f deployment/romm -n your-namespace

# View MariaDB logs (if using included MariaDB)
kubectl logs -f statefulset/romm-mariadb -n your-namespace

Debugging

# Check pod status
kubectl get pods -n your-namespace

# Describe pod for detailed information
kubectl describe pod romm-xxxxx -n your-namespace

# Check ingress status
kubectl get ingress -n your-namespace
kubectl describe ingress romm -n your-namespace

Upgrading

# Update the repository
helm repo update

# Upgrade RomM
helm upgrade romm henriqzimer/romm

# Or upgrade with new values
helm upgrade romm henriqzimer/romm -f your-values.yaml

Uninstalling

# Uninstall RomM
helm uninstall romm

# Clean up PVCs (if desired)
kubectl delete pvc romm-config-pvc romm-library-pvc romm-resources-pvc romm-assets-pvc

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test your changes
  5. Submit a pull request

License

This chart is licensed under the MIT License.

Links