Research-Stack/4-Infrastructure/kube/manifests/romm.yaml
Brandon Schneider 1b816fafe7 feat(infra): media stack, Vaultwarden, Cloudflare tunnel, OIDC providers, Caddy TLS
- Media stack deployed: qBittorrent, Sonarr, Radarr, Lidarr, Prowlarr, Bazarr,
  Navidrome, Audiobookshelf, Jellyfin, Homarr, Kavita, MeTube, SuggestArr, BoxArr
- Romm, ebook2audiobook (GPU CUDA), TrailBase, FlareSolverr deployed
- Vaultwarden + Vaultwarden-API deployed
- Caddy reverse proxy on racknerd with Let's Encrypt TLS at *.researchstack.info
- Authentik 7 OIDC providers + 12 proxy providers for SSO
- NVIDIA GPU support enabled on k3s (device plugin + containerd runtime)
- Cloudflare tunnel created (DNS on Porkbun)

Build: 3313 jobs, 0 errors (lake build Compiler)
2026-05-31 11:01:39 -05:00

214 lines
4.4 KiB
YAML

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: romm-mysql
namespace: media
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: local-path
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: romm-resources
namespace: media
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: local-path
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: romm-redis
namespace: media
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: local-path
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: romm-db
namespace: media
spec:
replicas: 1
selector:
matchLabels:
app: romm-db
template:
metadata:
labels:
app: romm-db
spec:
nodeSelector:
kubernetes.io/hostname: qfox-1
containers:
- name: mariadb
image: mariadb:latest
ports:
- containerPort: 3306
env:
- name: MARIADB_ROOT_PASSWORD
value: "romm-root-pw"
- name: MARIADB_DATABASE
value: "romm"
- name: MARIADB_USER
value: "romm"
- name: MARIADB_PASSWORD
value: "romm-db-pw"
volumeMounts:
- name: data
mountPath: /var/lib/mysql
livenessProbe:
exec:
command: [healthcheck.sh, --connect, --innodb_initialized]
initialDelaySeconds: 30
periodSeconds: 10
volumes:
- name: data
persistentVolumeClaim:
claimName: romm-mysql
---
apiVersion: v1
kind: Service
metadata:
name: romm-db
namespace: media
spec:
ports:
- port: 3306
targetPort: 3306
selector:
app: romm-db
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: romm-redis
namespace: media
spec:
replicas: 1
selector:
matchLabels:
app: romm-redis
template:
metadata:
labels:
app: romm-redis
spec:
nodeSelector:
kubernetes.io/hostname: qfox-1
containers:
- name: redis
image: redis:7-alpine
ports:
- containerPort: 6379
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
persistentVolumeClaim:
claimName: romm-redis
---
apiVersion: v1
kind: Service
metadata:
name: romm-redis
namespace: media
spec:
ports:
- port: 6379
targetPort: 6379
selector:
app: romm-redis
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: romm
namespace: media
spec:
replicas: 1
selector:
matchLabels:
app: romm
template:
metadata:
labels:
app: romm
spec:
nodeSelector:
kubernetes.io/hostname: qfox-1
containers:
- name: romm
image: rommapp/romm:latest
ports:
- containerPort: 8080
env:
- name: DB_HOST
value: "romm-db"
- name: DB_NAME
value: "romm"
- name: DB_USER
value: "romm"
- name: DB_PASSWD
value: "romm-db-pw"
- name: ROMM_AUTH_SECRET_KEY
value: "change-me-romm-secret-key-32bytes-hex00000"
- name: REDIS_HOST
value: "romm-redis"
- name: REDIS_PORT
value: "6379"
- name: ROMM_PORT
value: "8080"
- name: HASHEOUS_API_ENABLED
value: "true"
volumeMounts:
- name: library
mountPath: /romm/library
subPath: games
- name: assets
mountPath: /romm/assets
- name: config
mountPath: /romm/config
- name: resources
mountPath: /romm/resources
volumes:
- name: library
persistentVolumeClaim:
claimName: media-store
- name: assets
emptyDir: {}
- name: config
emptyDir: {}
- name: resources
persistentVolumeClaim:
claimName: romm-resources
---
apiVersion: v1
kind: Service
metadata:
name: romm
namespace: media
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 30099
selector:
app: romm