add media-manager
Some checks failed
lint-test-docker / docker-lint (push) Failing after 4s
lint-test-helm / helm-lint (push) Successful in 9s
renovate / renovate (push) Successful in 1m55s

This commit is contained in:
2025-09-23 19:57:46 -05:00
parent 4cfd324b42
commit 2ebd2f7012
10 changed files with 247 additions and 4 deletions

View File

@@ -138,6 +138,12 @@ homepage:
href: https://overseerr.alexlebens.net href: https://overseerr.alexlebens.net
siteMonitor: http://overseerr.overseerr:80 siteMonitor: http://overseerr.overseerr:80
statusStyle: dot statusStyle: dot
- Media Manager:
icon: sh-media-manager.webp
description: Media Manager
href: https://media-manager.alexlebens.net
siteMonitor: http://media-manager.media-manager:80
statusStyle: dot
- Jellyfin: - Jellyfin:
icon: sh-jellyfin.webp icon: sh-jellyfin.webp
description: Media server description: Media server

View File

@@ -0,0 +1,29 @@
apiVersion: v2
name: media-manager
version: 1.0.0
description: Media Manager
keywords:
- media-manager
- movies
- shows
- metrics
home: https://wiki.alexlebens.dev/s/
sources:
- https://github.com/maxdorninger/MediaManager
- https://github.com/cloudnative-pg/cloudnative-pg
- https://github.com/maxdorninger/MediaManager/pkgs/container/mediamanager
- https://github.com/bjw-s-labs/helm-charts/tree/main/charts/other/app-template
- https://gitea.alexlebens.dev/alexlebens/helm-charts/src/branch/main/charts/postgres-cluster
maintainers:
- name: alexlebens
dependencies:
- name: app-template
alias: media-manager
repository: https://bjw-s-labs.github.io/helm-charts/
version: 4.3.0
- name: postgres-cluster
alias: postgres-17-cluster
version: 5.1.0
repository: oci://harbor.alexlebens.net/helm-charts
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mediamanager.png
appVersion: v1.8.0

View File

@@ -0,0 +1,51 @@
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: media-manager-config-secret
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: media-manager-config-secret
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
secretStoreRef:
kind: ClusterSecretStore
name: vault
data:
- secretKey: config.toml
remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: /cl01tl/media-manager/config
metadataPolicy: None
property: config.toml
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: media-manager-postgresql-17-cluster-backup-secret
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: media-manager-postgresql-17-cluster-backup-secret
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
secretStoreRef:
kind: ClusterSecretStore
name: vault
data:
- secretKey: ACCESS_KEY_ID
remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: /digital-ocean/home-infra/postgres-backups
metadataPolicy: None
property: access
- secretKey: ACCESS_SECRET_KEY
remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: /digital-ocean/home-infra/postgres-backups
metadataPolicy: None
property: secret

View File

@@ -0,0 +1,28 @@
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: http-route-media-manager
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: http-route-media-manager
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
parentRefs:
- group: gateway.networking.k8s.io
kind: Gateway
name: traefik-gateway
namespace: traefik
hostnames:
- media-manager.alexlebens.net
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- group: ''
kind: Service
name: media-manager
port: 80
weight: 100

View File

@@ -0,0 +1,17 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: media-manager-nfs-storage
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: media-manager-nfs-storage
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
volumeName: media-manager-nfs-storage
storageClassName: nfs-client
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi

View File

@@ -0,0 +1,23 @@
apiVersion: v1
kind: PersistentVolume
metadata:
name: media-manager-nfs-storage
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: media-manager-nfs-storage
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs-client
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
nfs:
path: /volume2/Storage
server: synologybond.alexlebens.net
mountOptions:
- vers=4
- minorversion=1
- noac

View File

@@ -0,0 +1,90 @@
media-manager:
controllers:
main:
type: deployment
replicas: 1
strategy: Recreate
revisionHistoryLimit: 3
containers:
main:
image:
repository: ghcr.io/maxdorninger/mediamanager/mediamanager
tag: latest@sha256:631745e070319f1845565ef4cd1f31b14e09cecb81d682e0cfeddb46072e5062
pullPolicy: IfNotPresent
env:
- name: CONFIG_DIR
value: /app/config
resources:
requests:
cpu: 50m
memory: 512Mi
service:
main:
controller: main
ports:
http:
port: 80
targetPort: 8000
protocol: HTTP
persistence:
config:
enabled: true
type: secret
name: media-manager-config-secret
advancedMounts:
main:
main:
- path: /app/config/config.toml
readOnly: true
mountPropagation: None
subPath: config.toml
config-data:
storageClass: ceph-block
accessMode: ReadWriteOnce
size: 1Gi
advancedMounts:
main:
main:
- path: /app/config
readOnly: false
images:
storageClass: ceph-block
accessMode: ReadWriteOnce
size: 10Gi
advancedMounts:
main:
main:
- path: /data/images/
readOnly: false
media:
existingClaim: media-manager-nfs-storage
advancedMounts:
main:
main:
- path: /data/mnt/store
readOnly: false
postgres-17-cluster:
mode: standalone
cluster:
storage:
storageClass: local-path
walStorage:
storageClass: local-path
monitoring:
enabled: true
prometheusRule:
enabled: true
recovery:
method: objectStore
objectStore:
endpointURL: https://nyc3.digitaloceanspaces.com
destinationPath: s3://postgres-backups-ce540ddf106d186bbddca68a/cl01tl/media-manager/media-manager-postgresql-17-cluster
endpointCredentials: media-manager-postgresql-17-cluster-backup-secret
recoveryIndex: 2
backup:
enabled: false
endpointURL: https://nyc3.digitaloceanspaces.com
destinationPath: s3://postgres-backups-ce540ddf106d186bbddca68a/cl01tl/media-manager/media-manager-postgresql-17-cluster
endpointCredentials: media-manager-postgresql-17-cluster-backup-secret
backupIndex: 2
retentionPolicy: "3d"

View File

@@ -134,6 +134,7 @@ blocky:
lidarr IN CNAME traefik-cl01tl lidarr IN CNAME traefik-cl01tl
lidatube IN CNAME traefik-cl01tl lidatube IN CNAME traefik-cl01tl
mail IN CNAME traefik-cl01tl mail IN CNAME traefik-cl01tl
media-manager IN CNAME traefik-cl01tl
n8n IN CNAME traefik-cl01tl n8n IN CNAME traefik-cl01tl
ntfy IN CNAME traefik-cl01tl ntfy IN CNAME traefik-cl01tl
objects IN CNAME traefik-cl01tl objects IN CNAME traefik-cl01tl

View File

@@ -110,8 +110,7 @@ customDNS:
lidarr IN CNAME traefik-cl01tl lidarr IN CNAME traefik-cl01tl
lidatube IN CNAME traefik-cl01tl lidatube IN CNAME traefik-cl01tl
mail IN CNAME traefik-cl01tl mail IN CNAME traefik-cl01tl
minio-directus IN CNAME traefik-cl01tl media-manager IN CNAME traefik-cl01tl
minio-outline IN CNAME traefik-cl01tl
n8n IN CNAME traefik-cl01tl n8n IN CNAME traefik-cl01tl
ntfy IN CNAME traefik-cl01tl ntfy IN CNAME traefik-cl01tl
objects IN CNAME traefik-cl01tl objects IN CNAME traefik-cl01tl

View File

@@ -110,8 +110,7 @@ customDNS:
lidarr IN CNAME traefik-cl01tl lidarr IN CNAME traefik-cl01tl
lidatube IN CNAME traefik-cl01tl lidatube IN CNAME traefik-cl01tl
mail IN CNAME traefik-cl01tl mail IN CNAME traefik-cl01tl
minio-directus IN CNAME traefik-cl01tl media-manager IN CNAME traefik-cl01tl
minio-outline IN CNAME traefik-cl01tl
n8n IN CNAME traefik-cl01tl n8n IN CNAME traefik-cl01tl
ntfy IN CNAME traefik-cl01tl ntfy IN CNAME traefik-cl01tl
objects IN CNAME traefik-cl01tl objects IN CNAME traefik-cl01tl