A Helm chart for RomM - Beautiful, powerful, self-hosted ROM manager.
# Add the Helm repository
helm repo add romm https://henriqzimer.github.io/helm-applications
helm repo update
# Install RomM
helm install romm romm/romm- 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)
# Add the repository
helm repo add romm https://henriqzimer.github.io/helm-applications
helm repo update
# Install RomM
helm install romm romm/romm# 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.tgzBefore deploying, you need to configure several required values:
- Database Configuration: Set up MariaDB connection details
- Secrets: Configure authentication secrets and API keys
- Storage: Configure persistent volumes for ROMs and data
- Ingress: Configure domain and TLS settings
# 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"For production deployments, it's recommended to use ExternalSecrets Operator:
secrets:
enabled: false
romm:
envFrom:
- secretRef:
name: romm-external-secretsDeploy 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"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_NAMEmust already exist on your external database server - The user specified in
DB_USERmust have full permissions on that database - Configure
DB_PORTin your secrets (defaults to 3306) - You don't need to configure
MYSQL_ROOT_PASSWORDwhen using an external database - Ensure network connectivity between your Kubernetes cluster and the external database server
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"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.comromm:
ingress:
tls:
- secretName: your-existing-tls-secret
hosts:
- romm.yourdomain.comRomM integrates with several external services. Get API keys from:
- IGDB: https://api.igdb.com/ (for game metadata)
- SteamGridDB: https://www.steamgriddb.com/profile/preferences/api (for game artwork)
- MobyGames: https://www.mobygames.com/info/api/ (for additional metadata)
| 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 | "" |
| 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 |
| 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 |
| 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 |
-
Database Connection Issues
- Ensure MariaDB is running and accessible
- Check DB_HOST, DB_PORT, DB_USER, DB_PASSWD values
- Verify network policies allow communication
-
Permission Issues
- Ensure PVCs have correct permissions (RomM runs as non-root)
- Check storage class supports the required access modes
-
Ingress Issues
- Verify ingress controller is installed and running
- Check DNS resolution for your domain
- Ensure TLS secret exists and is valid
-
API Key Issues
- Verify API keys are correctly set in secrets
- Check API service status and rate limits
# 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# 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# 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# 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- Fork the repository
- Create a feature branch
- Make your changes
- Test your changes
- Submit a pull request
This chart is licensed under the MIT License.