migrate
This commit is contained in:
6
clusters/cl01tl/helm/ephemera/Chart.lock
Normal file
6
clusters/cl01tl/helm/ephemera/Chart.lock
Normal file
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: app-template
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
digest: sha256:9900009eb6415344d8c5387371a0052259092d92f34c21774f6a6abe9f11f43e
|
||||
generated: "2025-11-30T21:05:32.524168-06:00"
|
||||
23
clusters/cl01tl/helm/ephemera/Chart.yaml
Normal file
23
clusters/cl01tl/helm/ephemera/Chart.yaml
Normal file
@@ -0,0 +1,23 @@
|
||||
apiVersion: v2
|
||||
name: ephemera
|
||||
version: 1.0.0
|
||||
description: ephemera
|
||||
keywords:
|
||||
- ephemera
|
||||
- books
|
||||
home: https://wiki.alexlebens.dev/
|
||||
sources:
|
||||
- https://github.com/OrwellianEpilogue/ephemera
|
||||
- https://github.com/FlareSolverr/FlareSolverr
|
||||
- https://github.com/orwellianepilogue/ephemera/pkgs/container/ephemera
|
||||
- https://github.com/flaresolverr/FlareSolverr/pkgs/container/flaresolverr
|
||||
- https://github.com/bjw-s-labs/helm-charts/tree/main/charts/other/app-template
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
dependencies:
|
||||
- name: app-template
|
||||
alias: ephemera
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/ephemera.png
|
||||
appVersion: 1.3.1
|
||||
101
clusters/cl01tl/helm/ephemera/templates/external-secret.yaml
Normal file
101
clusters/cl01tl/helm/ephemera/templates/external-secret.yaml
Normal file
@@ -0,0 +1,101 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: ephemera-key-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: ephemera-key-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: key
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/ephemera/config
|
||||
metadataPolicy: None
|
||||
property: key
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: ephemera-apprise-config
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: ephemera-apprise-config
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: ntfy-url
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/ephemera/config
|
||||
metadataPolicy: None
|
||||
property: ntfy-url
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: ephemera-config-backup-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: ephemera-config-backup-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
target:
|
||||
template:
|
||||
mergePolicy: Merge
|
||||
engineVersion: v2
|
||||
data:
|
||||
RESTIC_REPOSITORY: "{{ `{{ .BUCKET_ENDPOINT }}` }}/ephemera/ephemera-config"
|
||||
data:
|
||||
- secretKey: BUCKET_ENDPOINT
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: S3_BUCKET_ENDPOINT
|
||||
- secretKey: RESTIC_PASSWORD
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: RESTIC_PASSWORD
|
||||
- secretKey: AWS_DEFAULT_REGION
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: AWS_DEFAULT_REGION
|
||||
- secretKey: AWS_ACCESS_KEY_ID
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /digital-ocean/home-infra/volsync-backups
|
||||
metadataPolicy: None
|
||||
property: access_key
|
||||
- secretKey: AWS_SECRET_ACCESS_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /digital-ocean/home-infra/volsync-backups
|
||||
metadataPolicy: None
|
||||
property: secret_key
|
||||
28
clusters/cl01tl/helm/ephemera/templates/http-route.yaml
Normal file
28
clusters/cl01tl/helm/ephemera/templates/http-route.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: gateway.networking.k8s.io/v1
|
||||
kind: HTTPRoute
|
||||
metadata:
|
||||
name: http-route-ephemera
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: http-route-ephemera
|
||||
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:
|
||||
- ephemera.alexlebens.net
|
||||
rules:
|
||||
- matches:
|
||||
- path:
|
||||
type: PathPrefix
|
||||
value: /
|
||||
backendRefs:
|
||||
- group: ''
|
||||
kind: Service
|
||||
name: ephemera
|
||||
port: 80
|
||||
weight: 100
|
||||
@@ -0,0 +1,17 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: ephemera-import-nfs-storage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: ephemera-import-nfs-storage
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
volumeName: ephemera-import-nfs-storage
|
||||
storageClassName: nfs-client
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: ephemera-import-nfs-storage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: ephemera-import-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/Books Import
|
||||
server: synologybond.alexlebens.net
|
||||
mountOptions:
|
||||
- vers=4
|
||||
- minorversion=1
|
||||
- noac
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: volsync.backube/v1alpha1
|
||||
kind: ReplicationSource
|
||||
metadata:
|
||||
name: ephemera-config-backup-source
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: ephemera-config-backup-source
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
sourcePVC: ephemera-config
|
||||
trigger:
|
||||
schedule: 0 4 * * *
|
||||
restic:
|
||||
pruneIntervalDays: 7
|
||||
repository: ephemera-config-backup-secret
|
||||
retain:
|
||||
hourly: 1
|
||||
daily: 3
|
||||
weekly: 2
|
||||
monthly: 2
|
||||
yearly: 4
|
||||
copyMethod: Snapshot
|
||||
storageClassName: ceph-block
|
||||
volumeSnapshotClassName: ceph-blockpool-snapshot
|
||||
cacheCapacity: 10Gi
|
||||
107
clusters/cl01tl/helm/ephemera/values.yaml
Normal file
107
clusters/cl01tl/helm/ephemera/values.yaml
Normal file
@@ -0,0 +1,107 @@
|
||||
ephemera:
|
||||
controllers:
|
||||
main:
|
||||
type: deployment
|
||||
replicas: 1
|
||||
strategy: Recreate
|
||||
revisionHistoryLimit: 3
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: ghcr.io/orwellianepilogue/ephemera
|
||||
tag: 1.3.1
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: AA_BASE_URL
|
||||
value: https://annas-archive.org
|
||||
# - name: AA_API_KEY
|
||||
# valueFrom:
|
||||
# secretKeyRef:
|
||||
# name: ephemera-key-secret
|
||||
# key: key
|
||||
- name: FLARESOLVERR_URL
|
||||
value: http://127.0.0.1:8191
|
||||
- name: LG_BASE_URL
|
||||
value: https://gen.com
|
||||
- name: PUID
|
||||
value: 0
|
||||
- name: PGID
|
||||
value: 0
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 128Mi
|
||||
flaresolverr:
|
||||
image:
|
||||
repository: ghcr.io/flaresolverr/flaresolverr
|
||||
tag: v3.4.5
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: LOG_LEVEL
|
||||
value: info
|
||||
- name: LOG_HTML
|
||||
value: false
|
||||
- name: CAPTCHA_SOLVER
|
||||
value: none
|
||||
- name: TZ
|
||||
value: America/Chicago
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 128Mi
|
||||
apprise-api:
|
||||
image:
|
||||
repository: caronc/apprise
|
||||
tag: 1.2.6
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: TZ
|
||||
value: US/Central
|
||||
- name: APPRISE_STORAGE_MODE
|
||||
value: memory
|
||||
- name: APPRISE_STATEFUL_MODE
|
||||
value: disabled
|
||||
- name: APPRISE_WORKER_COUNT
|
||||
value: 1
|
||||
- name: APPRISE_STATELESS_URLS
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: ephemera-apprise-config
|
||||
key: ntfy-url
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 128Mi
|
||||
service:
|
||||
main:
|
||||
controller: main
|
||||
ports:
|
||||
http:
|
||||
port: 80
|
||||
targetPort: 8286
|
||||
protocol: HTTP
|
||||
persistence:
|
||||
config:
|
||||
storageClass: ceph-block
|
||||
accessMode: ReadWriteOnce
|
||||
size: 5Gi
|
||||
retain: true
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /app/data
|
||||
readOnly: false
|
||||
cache:
|
||||
type: emptyDir
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /app/downloads
|
||||
readOnly: false
|
||||
ingest:
|
||||
existingClaim: ephemera-import-nfs-storage
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /app/ingest
|
||||
readOnly: false
|
||||
6
clusters/cl01tl/helm/homepage/Chart.lock
Normal file
6
clusters/cl01tl/helm/homepage/Chart.lock
Normal file
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: app-template
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
digest: sha256:fe69d34709d7f0c3674453013c0e76d6064531134404de8f4e72fb509b98bcb0
|
||||
generated: "2025-11-30T21:07:05.997919-06:00"
|
||||
21
clusters/cl01tl/helm/homepage/Chart.yaml
Normal file
21
clusters/cl01tl/helm/homepage/Chart.yaml
Normal file
@@ -0,0 +1,21 @@
|
||||
apiVersion: v2
|
||||
name: homepage
|
||||
version: 1.0.0
|
||||
description: Homepage
|
||||
keywords:
|
||||
- homepage
|
||||
- dashboard
|
||||
home: https://wiki.alexlebens.dev/s/a5fabd91-3d89-4e2b-9417-06111aedaeaa
|
||||
sources:
|
||||
- https://github.com/gethomepage/homepage
|
||||
- https://github.com/gethomepage/homepage/pkgs/container/homepage
|
||||
- https://github.com/bjw-s-labs/helm-charts/tree/main/charts/other/app-template
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
dependencies:
|
||||
- name: app-template
|
||||
alias: homepage
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/homepage.png
|
||||
appVersion: v1.2.0
|
||||
@@ -0,0 +1,17 @@
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: homepage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: homepage
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: homepage
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: homepage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
50
clusters/cl01tl/helm/homepage/templates/cluster-role.yaml
Normal file
50
clusters/cl01tl/helm/homepage/templates/cluster-role.yaml
Normal file
@@ -0,0 +1,50 @@
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: homepage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: homepage
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
rules:
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- namespaces
|
||||
- pods
|
||||
- nodes
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- apiGroups:
|
||||
- extensions
|
||||
- networking.k8s.io
|
||||
resources:
|
||||
- ingresses
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- apiGroups:
|
||||
- traefik.io
|
||||
resources:
|
||||
- ingressroutes
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- apiGroups:
|
||||
- gateway.networking.k8s.io
|
||||
resources:
|
||||
- httproutes
|
||||
- gateways
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- apiGroups:
|
||||
- metrics.k8s.io
|
||||
resources:
|
||||
- nodes
|
||||
- pods
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
105
clusters/cl01tl/helm/homepage/templates/external-secret.yaml
Normal file
105
clusters/cl01tl/helm/homepage/templates/external-secret.yaml
Normal file
@@ -0,0 +1,105 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: homepage-keys-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: homepage-keys-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: HOMEPAGE_VAR_SYNOLOGY_USER
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /synology/auth/cl01tl
|
||||
metadataPolicy: None
|
||||
property: user
|
||||
- secretKey: HOMEPAGE_VAR_SYNOLOGY_PASSWORD
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /synology/auth/cl01tl
|
||||
metadataPolicy: None
|
||||
property: password
|
||||
- secretKey: HOMEPAGE_VAR_UNIFI_USER
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /unifi/auth/cl01tl
|
||||
metadataPolicy: None
|
||||
property: user
|
||||
- secretKey: HOMEPAGE_VAR_UNIFI_PASSWORD
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /unifi/auth/cl01tl
|
||||
metadataPolicy: None
|
||||
property: password
|
||||
- secretKey: HOMEPAGE_VAR_SONARR_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/sonarr4/key
|
||||
metadataPolicy: None
|
||||
property: key
|
||||
- secretKey: HOMEPAGE_VAR_SONARR4K_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/sonarr4-4k/key
|
||||
metadataPolicy: None
|
||||
property: key
|
||||
- secretKey: HOMEPAGE_VAR_SONARRANIME_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/sonarr4-anime/key
|
||||
metadataPolicy: None
|
||||
property: key
|
||||
- secretKey: HOMEPAGE_VAR_RADARR_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/radarr5/key
|
||||
metadataPolicy: None
|
||||
property: key
|
||||
- secretKey: HOMEPAGE_VAR_RADARR4K_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/radarr5-4k/key
|
||||
metadataPolicy: None
|
||||
property: key
|
||||
- secretKey: HOMEPAGE_VAR_RADARRANIME_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/radarr5-anime/key
|
||||
metadataPolicy: None
|
||||
property: key
|
||||
- secretKey: HOMEPAGE_VAR_RADARRSTANDUP_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/radarr5-standup/key
|
||||
metadataPolicy: None
|
||||
property: key
|
||||
- secretKey: HOMEPAGE_VAR_LIDARR_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/lidarr2/key
|
||||
metadataPolicy: None
|
||||
property: key
|
||||
- secretKey: HOMEPAGE_VAR_PROWLARR_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/prowlarr/key
|
||||
metadataPolicy: None
|
||||
property: key
|
||||
28
clusters/cl01tl/helm/homepage/templates/http-route.yaml
Normal file
28
clusters/cl01tl/helm/homepage/templates/http-route.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: gateway.networking.k8s.io/v1
|
||||
kind: HTTPRoute
|
||||
metadata:
|
||||
name: http-route-homepage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: http-route-homepage
|
||||
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:
|
||||
- home.alexlebens.net
|
||||
rules:
|
||||
- matches:
|
||||
- path:
|
||||
type: PathPrefix
|
||||
value: /
|
||||
backendRefs:
|
||||
- group: ''
|
||||
kind: Service
|
||||
name: homepage
|
||||
port: 80
|
||||
weight: 100
|
||||
46
clusters/cl01tl/helm/homepage/templates/service.yaml
Normal file
46
clusters/cl01tl/helm/homepage/templates/service.yaml
Normal file
@@ -0,0 +1,46 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: gitea-ps10rp
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: gitea-ps10rp
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
annotations:
|
||||
tailscale.com/tailnet-fqdn: gitea-ps10rp.boreal-beaufort.ts.net
|
||||
spec:
|
||||
externalName: placeholder
|
||||
type: ExternalName
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: home-ps10rp
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: home-ps10rp
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
annotations:
|
||||
tailscale.com/tailnet-fqdn: home-ps10rp.boreal-beaufort.ts.net
|
||||
spec:
|
||||
externalName: placeholder
|
||||
type: ExternalName
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: garage-ui-ps10rp
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: garage-ps10rp
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
annotations:
|
||||
tailscale.com/tailnet-fqdn: garage-ui-ps10rp.boreal-beaufort.ts.net
|
||||
spec:
|
||||
externalName: placeholder
|
||||
type: ExternalName
|
||||
795
clusters/cl01tl/helm/homepage/values.yaml
Normal file
795
clusters/cl01tl/helm/homepage/values.yaml
Normal file
@@ -0,0 +1,795 @@
|
||||
homepage:
|
||||
global:
|
||||
nameOverride: homepage
|
||||
controllers:
|
||||
main:
|
||||
type: deployment
|
||||
annotations:
|
||||
reloader.stakater.com/auto: "true"
|
||||
strategy: Recreate
|
||||
serviceAccount:
|
||||
name: homepage
|
||||
pod:
|
||||
automountServiceAccountToken: true
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: ghcr.io/gethomepage/homepage
|
||||
tag: v1.7.0
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: HOMEPAGE_ALLOWED_HOSTS
|
||||
value: home.alexlebens.net
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: homepage-keys-secret
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 256Mi
|
||||
serviceAccount:
|
||||
homepage:
|
||||
enabled: true
|
||||
staticToken: true
|
||||
configMaps:
|
||||
config:
|
||||
enabled: true
|
||||
data:
|
||||
docker.yaml: ""
|
||||
kubernetes.yaml: |
|
||||
mode: cluster
|
||||
settings.yaml: |
|
||||
favicon: https://web-assets-3bfcb5585cbd63dc365d32a3.nyc3.cdn.digitaloceanspaces.com/alexlebens-net/logo-new-round.svg
|
||||
headerStyle: clean
|
||||
hideVersion: true
|
||||
color: zinc
|
||||
background:
|
||||
image: https://web-assets-3bfcb5585cbd63dc365d32a3.nyc3.cdn.digitaloceanspaces.com/alexlebens-net/background.jpg
|
||||
brightness: 50
|
||||
theme: dark
|
||||
disableCollapse: true
|
||||
layout:
|
||||
- Media:
|
||||
tab: Applications
|
||||
icon: mdi-multimedia-#ffffff
|
||||
- Public:
|
||||
tab: Applications
|
||||
icon: mdi-earth-#ffffff
|
||||
- Internal:
|
||||
tab: Applications
|
||||
icon: mdi-security-network-#ffffff
|
||||
- Code:
|
||||
tab: Tools
|
||||
icon: mdi-code-block-braces-#ffffff
|
||||
- Automation:
|
||||
tab: Tools
|
||||
icon: mdi-wrench-#ffffff
|
||||
- Monitoring:
|
||||
tab: Tools
|
||||
icon: mdi-chart-line-#ffffff
|
||||
- Services:
|
||||
tab: Services
|
||||
icon: mdi-toolbox-outline-#ffffff
|
||||
- Hardware:
|
||||
tab: Services
|
||||
icon: mdi-server-network-#ffffff
|
||||
- Storage:
|
||||
tab: Services
|
||||
icon: mdi-database-#ffffff
|
||||
- Content:
|
||||
tab: Services
|
||||
icon: mdi-multimedia-#ffffff
|
||||
- TV Shows:
|
||||
tab: Content
|
||||
icon: mdi-television-#ffffff
|
||||
- Movies:
|
||||
tab: Content
|
||||
icon: mdi-filmstrip-#ffffff
|
||||
- Music:
|
||||
tab: Content
|
||||
icon: mdi-music-box-multiple-#ffffff
|
||||
- Books:
|
||||
tab: Content
|
||||
icon: mdi-book-open-variant-#ffffff
|
||||
- External Services:
|
||||
tab: Bookmarks
|
||||
icon: mdi-cloud-#ffffff
|
||||
- Other Homes:
|
||||
tab: Bookmarks
|
||||
icon: mdi-cloud-#ffffff
|
||||
- Trackers:
|
||||
tab: Bookmarks
|
||||
icon: mdi-cloud-#ffffff
|
||||
widgets.yaml: |
|
||||
- logo:
|
||||
icon: https://web-assets-3bfcb5585cbd63dc365d32a3.nyc3.cdn.digitaloceanspaces.com/alexlebens-net/logo-new-round.png
|
||||
- kubernetes:
|
||||
cluster:
|
||||
show: true
|
||||
cpu: true
|
||||
memory: true
|
||||
showLabel: false
|
||||
label: "Cluster"
|
||||
nodes:
|
||||
show: false
|
||||
- datetime:
|
||||
text_size: xl
|
||||
format:
|
||||
dateStyle: long
|
||||
timeStyle: short
|
||||
hour12: false
|
||||
- openmeteo:
|
||||
label: St. Paul
|
||||
latitude: 44.954445
|
||||
longitude: -93.091301
|
||||
timezone: America/Chicago
|
||||
units: metric
|
||||
cache: 5
|
||||
format:
|
||||
maximumFractionDigits: 0
|
||||
services.yaml: |
|
||||
- Media:
|
||||
- Plex:
|
||||
icon: sh-plex.webp
|
||||
description: Media server
|
||||
href: https://plex.alexlebens.net
|
||||
siteMonitor: http://plex.plex:32400
|
||||
statusStyle: dot
|
||||
- Jellyfin:
|
||||
icon: sh-jellyfin.webp
|
||||
description: Media server
|
||||
href: https://jellyfin.alexlebens.net
|
||||
siteMonitor: http://jellyfin.jellyfin:80
|
||||
statusStyle: dot
|
||||
- Media Requests:
|
||||
icon: sh-overseerr.webp
|
||||
description: Overseer
|
||||
href: https://overseerr.alexlebens.net
|
||||
siteMonitor: http://overseerr.overseerr:80
|
||||
statusStyle: dot
|
||||
- Media Tracking:
|
||||
icon: sh-yamtrack.webp
|
||||
description: Yamtrack
|
||||
href: https://yamtrack.alexlebens.net
|
||||
siteMonitor: http://yamtrack.yamtrack:80
|
||||
statusStyle: dot
|
||||
- Youtube Archive:
|
||||
icon: sh-tube-archivist-light.webp
|
||||
description: TubeAchivist
|
||||
href: https://tubearchivist.alexlebens.net/login
|
||||
siteMonitor: http://tubearchivist.tubearchivist:80
|
||||
statusStyle: dot
|
||||
- Photos:
|
||||
icon: sh-immich.webp
|
||||
description: Immich
|
||||
href: https://immich.alexlebens.net
|
||||
siteMonitor: http://immich-main.immich:2283
|
||||
statusStyle: dot
|
||||
- Pictures:
|
||||
icon: sh-photoview.webp
|
||||
description: Photoview
|
||||
href: https://photoview.alexlebens.net
|
||||
siteMonitor: http://photoview.photoview:80
|
||||
statusStyle: dot
|
||||
- Podcasts and Audiobooks:
|
||||
icon: sh-audiobookshelf.webp
|
||||
description: Audiobookshelf
|
||||
href: https://audiobookshelf.alexlebens.net
|
||||
siteMonitor: http://audiobookshelf.audiobookshelf:80
|
||||
statusStyle: dot
|
||||
- Books:
|
||||
icon: sh-booklore.webp
|
||||
description: Booklore
|
||||
href: https://booklore.alexlebens.net
|
||||
siteMonitor: http://booklore.booklore:80
|
||||
statusStyle: dot
|
||||
- Public:
|
||||
- Site:
|
||||
icon: https://web-assets-3bfcb5585cbd63dc365d32a3.nyc3.cdn.digitaloceanspaces.com/alexlebens-net/logo-new-round.png
|
||||
description: Profile Website
|
||||
href: https://www.alexlebens.dev
|
||||
siteMonitor: https://www.alexlebens.dev
|
||||
statusStyle: dot
|
||||
- Content Management:
|
||||
icon: directus.png
|
||||
description: Directus
|
||||
href: https://directus.alexlebens.dev
|
||||
siteMonitor: https://directus.alexlebens.dev
|
||||
statusStyle: dot
|
||||
- Social Media Management:
|
||||
icon: sh-postiz.webp
|
||||
description: Postiz
|
||||
href: https://postiz.alexlebens.dev
|
||||
siteMonitor: https://postiz.alexlebens.dev
|
||||
statusStyle: dot
|
||||
- Chat:
|
||||
icon: sh-element.webp
|
||||
description: Matrix
|
||||
href: https://chat.alexlebens.dev
|
||||
siteMonitor: https://chat.alexlebens.dev
|
||||
statusStyle: dot
|
||||
- Wiki:
|
||||
icon: sh-outline.webp
|
||||
description: Outline
|
||||
href: https://wiki.alexlebens.dev
|
||||
siteMonitor: https://wiki.alexlebens.dev
|
||||
statusStyle: dot
|
||||
- Passwords:
|
||||
icon: sh-vaultwarden-light.webp
|
||||
description: Vaultwarden
|
||||
href: https://passwords.alexlebens.dev
|
||||
siteMonitor: https://passwords.alexlebens.dev
|
||||
statusStyle: dot
|
||||
- Bookmarks:
|
||||
icon: sh-karakeep-light.webp
|
||||
description: Karakeep
|
||||
href: https://karakeep.alexlebens.dev
|
||||
siteMonitor: https://karakeep.alexlebens.dev
|
||||
statusStyle: dot
|
||||
- RSS:
|
||||
icon: sh-freshrss.webp
|
||||
description: FreshRSS
|
||||
href: https://rss.alexlebens.dev
|
||||
siteMonitor: https://rss.alexlebens.dev
|
||||
statusStyle: dot
|
||||
- Internal:
|
||||
- Home Automation:
|
||||
icon: sh-home-assistant.webp
|
||||
description: Home Assistant
|
||||
href: https://home-assistant.alexlebens.net
|
||||
siteMonitor: http://home-assistant-main.home-assistant:80
|
||||
statusStyle: dot
|
||||
- Budgeting:
|
||||
icon: sh-actual-budget.webp
|
||||
description: Actual
|
||||
href: https://actual.alexlebens.net
|
||||
siteMonitor: http://actual.actual:80
|
||||
statusStyle: dot
|
||||
- AI:
|
||||
icon: sh-ollama.webp
|
||||
description: Ollama
|
||||
href: https://ollama.alexlebens.net
|
||||
siteMonitor: http://ollama-web.ollama:80
|
||||
statusStyle: dot
|
||||
- AI Image:
|
||||
icon: https://user-images.githubusercontent.com/36368048/196280761-1535f413-a91e-4b6a-af6a-b890f8ae204c.png
|
||||
description: Stable Diffusion
|
||||
href: https://stable-diffusion-pd05wd.boreal-beaufort.ts.net
|
||||
siteMonitor: https://stable-diffusion-pd05wd.boreal-beaufort.ts.net
|
||||
statusStyle: dot
|
||||
- Search:
|
||||
icon: sh-searxng.webp
|
||||
description: Searxng
|
||||
href: https://searxng.alexlebens.net/
|
||||
siteMonitor: http://searxng-browser.searxng:80
|
||||
statusStyle: dot
|
||||
- Email:
|
||||
icon: sh-roundcube.webp
|
||||
description: Roundcube
|
||||
href: https://mail.alexlebens.net
|
||||
siteMonitor: http://roundcube.roundcube:80
|
||||
statusStyle: dot
|
||||
- Wiki:
|
||||
icon: sh-kiwix-light.webp
|
||||
description: Kiwix
|
||||
href: https://kiwix.alexlebens.net
|
||||
siteMonitor: http://kiwix.kiwix:80
|
||||
statusStyle: dot
|
||||
- Code:
|
||||
- Code (Public):
|
||||
icon: sh-gitea.webp
|
||||
description: Gitea
|
||||
href: https://gitea.alexlebens.dev
|
||||
siteMonitor: https://gitea.alexlebens.dev
|
||||
statusStyle: dot
|
||||
- Code (Local):
|
||||
icon: sh-gitea.webp
|
||||
description: Gitea
|
||||
href: https://gitea.alexlebens.net
|
||||
siteMonitor: https://gitea.alexlebens.net
|
||||
statusStyle: dot
|
||||
- Code (ps10rp):
|
||||
icon: sh-gitea.webp
|
||||
description: Gitea
|
||||
href: https://gitea-ps10rp.boreal-beaufort.ts.net
|
||||
siteMonitor: https://gitea-ps10rp.boreal-beaufort.ts.net
|
||||
statusStyle: dot
|
||||
- IDE (Public):
|
||||
icon: sh-visual-studio-code.webp
|
||||
description: VS Code
|
||||
href: https://codeserver.alexlebens.dev
|
||||
siteMonitor: https://codeserver.alexlebens.dev
|
||||
statusStyle: dot
|
||||
- IDE (Home Assistant):
|
||||
icon: sh-visual-studio-code.webp
|
||||
description: Edit config for Home Assistant
|
||||
href: https://home-assistant-code-server.alexlebens.net
|
||||
siteMonitor: http://home-assistant-code-server.home-assistant:8443
|
||||
statusStyle: dot
|
||||
- Continuous Deployment:
|
||||
icon: sh-argo-cd.webp
|
||||
description: ArgoCD
|
||||
href: https://argocd.alexlebens.net
|
||||
siteMonitor: http://argocd-server.argocd:80
|
||||
statusStyle: dot
|
||||
- Docker Deployment:
|
||||
icon: sh-komodo-light.webp
|
||||
description: Komodo
|
||||
href: https://komodo.alexlebens.net
|
||||
siteMonitor: http://komodo-main.komodo:80
|
||||
statusStyle: dot
|
||||
- Automation:
|
||||
- Deployment Workflows:
|
||||
icon: sh-argo-cd.webp
|
||||
description: Argo Workflows
|
||||
href: https://argo-workflows.alexlebens.net
|
||||
siteMonitor: http://argo-workflows-server.argo-workflows:2746
|
||||
statusStyle: dot
|
||||
- API Workflows:
|
||||
icon: sh-n8n.webp
|
||||
description: n8n
|
||||
href: https://n8n.alexlebens.net
|
||||
siteMonitor: http://n8n-main.n8n:80
|
||||
statusStyle: dot
|
||||
- Jobs:
|
||||
icon: https://raw.githubusercontent.com/mshade/kronic/main/static/android-chrome-192x192.png
|
||||
description: Kronic
|
||||
href: https://kronic.alexlebens.net
|
||||
siteMonitor: http://kronic.kronic:80
|
||||
statusStyle: dot
|
||||
- Uptime:
|
||||
icon: sh-gatus.webp
|
||||
description: Gatus
|
||||
href: https://gatus.alexlebens.net
|
||||
siteMonitor: http://gatus.gatus:80
|
||||
statusStyle: dot
|
||||
- Tools:
|
||||
icon: sh-omnitools.webp
|
||||
description: OmniTools
|
||||
href: https://omni-tools.alexlebens.net
|
||||
siteMonitor: http://omni-tools.omni-tools:80
|
||||
statusStyle: dot
|
||||
- Monitoring:
|
||||
- Kubernetes:
|
||||
icon: sh-headlamp.webp
|
||||
description: Headlamp
|
||||
href: https://headlamp.alexlebens.net
|
||||
siteMonitor: http://headlamp.headlamp:80
|
||||
statusStyle: dot
|
||||
- Network Monitoring:
|
||||
icon: sh-cilium.webp
|
||||
description: Hubble for Cilium
|
||||
href: https://hubble.alexlebens.net
|
||||
siteMonitor: http://hubble-ui.kube-system:80
|
||||
statusStyle: dot
|
||||
- Dashboard:
|
||||
icon: sh-grafana.webp
|
||||
description: Grafana
|
||||
href: https://grafana.alexlebens.net
|
||||
siteMonitor: http://grafana-main-service.grafana-operator:3000/api/health
|
||||
statusStyle: dot
|
||||
- Metrics:
|
||||
icon: sh-prometheus.webp
|
||||
description: Prometheus
|
||||
href: https://prometheus.alexlebens.net
|
||||
siteMonitor: http://kube-prometheus-stack-prometheus.kube-prometheus-stack:9090
|
||||
statusStyle: dot
|
||||
widget:
|
||||
type: prometheus
|
||||
url: http://kube-prometheus-stack-prometheus.kube-prometheus-stack:9090
|
||||
- Alerting:
|
||||
icon: sh-prometheus-light.webp
|
||||
description: Alertmanager
|
||||
href: https://alertmanager.alexlebens.net
|
||||
siteMonitor: http://kube-prometheus-stack-alertmanager.kube-prometheus-stack:9093
|
||||
statusStyle: dot
|
||||
widget:
|
||||
type: prometheusmetric
|
||||
url: http://kube-prometheus-stack-prometheus.kube-prometheus-stack:9090
|
||||
refreshInterval: 120s
|
||||
metrics:
|
||||
- label: Alerts Active
|
||||
query: alertmanager_alerts{state="active"}
|
||||
- label: Metric Database Size
|
||||
query: prometheus_tsdb_storage_blocks_bytes
|
||||
format:
|
||||
type: bytes
|
||||
- Tautulli:
|
||||
icon: sh-tautulli.webp
|
||||
description: Plex Monitoring
|
||||
href: https://tautulli.alexlebens.net
|
||||
siteMonitor: http://tautulli.tautulli:80
|
||||
statusStyle: dot
|
||||
- Jellystat:
|
||||
icon: sh-jellystat.webp
|
||||
description: Jellyfin Monitoring
|
||||
href: https://jellystat.alexlebens.net
|
||||
siteMonitor: http://jellystat.jellystat:80
|
||||
statusStyle: dot
|
||||
- Services:
|
||||
- Auth (Public):
|
||||
icon: sh-authentik.webp
|
||||
description: Authentik
|
||||
href: https://auth.alexlebens.dev
|
||||
siteMonitor: https://auth.alexlebens.dev
|
||||
statusStyle: dot
|
||||
- Auth (Local):
|
||||
icon: sh-authentik.webp
|
||||
description: Authentik
|
||||
href: https://authentik.alexlebens.net
|
||||
siteMonitor: http://authentik-server.authentik:80
|
||||
statusStyle: dot
|
||||
- Email:
|
||||
icon: sh-stalwart.webp
|
||||
description: Stalwart
|
||||
href: https://stalwart.alexlebens.net
|
||||
siteMonitor: http://stalwart.stalwart:80
|
||||
statusStyle: dot
|
||||
- Notifications:
|
||||
icon: sh-ntfy.webp
|
||||
description: ntfy
|
||||
href: https://ntfy.alexlebens.net
|
||||
siteMonitor: http://ntfy.ntfy:80
|
||||
statusStyle: dot
|
||||
- Reverse Proxy:
|
||||
icon: sh-traefik.webp
|
||||
description: Traefik
|
||||
href: https://traefik-cl01tl.alexlebens.net/dashboard/#/
|
||||
siteMonitor: https://traefik-cl01tl.alexlebens.net/dashboard/#/
|
||||
statusStyle: dot
|
||||
widget:
|
||||
type: traefik
|
||||
url: https://traefik-cl01tl.alexlebens.net
|
||||
- Image Cache:
|
||||
icon: sh-harbor.webp
|
||||
description: Harbor
|
||||
href: https://harbor.alexlebens.net
|
||||
siteMonitor: http://harbor-portal.harbor:80
|
||||
statusStyle: dot
|
||||
- Hardware:
|
||||
- Network Management (alexlebens.net):
|
||||
icon: sh-ubiquiti-unifi.webp
|
||||
description: Unifi
|
||||
href: https://unifi.alexlebens.net
|
||||
siteMonitor: https://unifi.alexlebens.net
|
||||
statusStyle: dot
|
||||
- Network Attached Storage:
|
||||
icon: sh-synology-light.webp
|
||||
description: Synology
|
||||
href: https://synology.alexlebens.net
|
||||
siteMonitor: https://synology.alexlebens.net
|
||||
statusStyle: dot
|
||||
widget:
|
||||
type: diskstation
|
||||
url: https://synology.alexlebens.net
|
||||
username: {{ "{{HOMEPAGE_VAR_SYNOLOGY_USER}}" }}
|
||||
password: {{ "{{HOMEPAGE_VAR_SYNOLOGY_PASSWORD}}" }}
|
||||
volume: volume_2
|
||||
- TV Tuner:
|
||||
icon: sh-hdhomerun.webp
|
||||
description: HD Homerun
|
||||
href: http://hdhr.alexlebens.net
|
||||
siteMonitor: http://hdhr.alexlebens.net
|
||||
statusStyle: dot
|
||||
widget:
|
||||
type: hdhomerun
|
||||
url: http://hdhr.alexlebens.net
|
||||
tuner: 0
|
||||
fields: ["channels", "hd"]
|
||||
- KVM:
|
||||
icon: sh-pikvm-light.webp
|
||||
description: Pi KVM
|
||||
href: https://pikvm.alexlebens.net
|
||||
siteMonitor: https://pikvm.alexlebens.net
|
||||
statusStyle: dot
|
||||
- Server Plug:
|
||||
icon: sh-shelly.webp
|
||||
description: Shelly
|
||||
href: http://it05sp.alexlebens.net
|
||||
siteMonitor: http://it05sp.alexlebens.net
|
||||
statusStyle: dot
|
||||
- Storage:
|
||||
- Cluster Storage:
|
||||
icon: sh-ceph.webp
|
||||
description: Ceph
|
||||
href: https://ceph.alexlebens.net
|
||||
siteMonitor: http://rook-ceph-mgr-dashboard.rook-ceph:7000
|
||||
statusStyle: dot
|
||||
- Object Storage (NAS):
|
||||
icon: sh-garage.webp
|
||||
description: Garage
|
||||
href: https://garage-webui.alexlebens.net
|
||||
siteMonitor: http://garage-webui.garage:3909
|
||||
statusStyle: dot
|
||||
- Object Storage (ps10rp):
|
||||
icon: sh-garage.webp
|
||||
description: Garage
|
||||
href: https://garage-ui-ps10rp.boreal-beaufort.ts.net
|
||||
siteMonitor: https://garage-ui-ps10rp.boreal-beaufort.ts.net
|
||||
statusStyle: dot
|
||||
- Database:
|
||||
icon: sh-pgadmin-light.webp
|
||||
description: PGAdmin
|
||||
href: https://pgadmin.alexlebens.net
|
||||
siteMonitor: http://pgadmin.pgadmin:80
|
||||
statusStyle: dot
|
||||
- Database:
|
||||
icon: sh-whodb.webp
|
||||
description: WhoDB
|
||||
href: https://whodb.alexlebens.net
|
||||
siteMonitor: http://whodb.whodb:80
|
||||
statusStyle: dot
|
||||
- Secrets:
|
||||
icon: sh-hashicorp-vault.webp
|
||||
description: Vault
|
||||
href: https://vault.alexlebens.net
|
||||
siteMonitor: http://vault.vault:8200
|
||||
statusStyle: dot
|
||||
- Backups:
|
||||
icon: sh-backrest-light.webp
|
||||
description: Backrest
|
||||
href: https://backrest.alexlebens.net
|
||||
siteMonitor: http://backrest.backrest:80
|
||||
statusStyle: dot
|
||||
- Content:
|
||||
- qUI:
|
||||
icon: https://raw.githubusercontent.com/autobrr/qui/8487c818886df9abb2b1456f43b54e0ba180a2bd/web/public/icons.svg
|
||||
description: qbitorrent
|
||||
href: https://qui.alexlebens.net
|
||||
siteMonitor: http://qbittorrent-qui.qbittorrent:80
|
||||
statusStyle: dot
|
||||
widget:
|
||||
type: qbittorrent
|
||||
url: http://qbittorrent.qbittorrent:8080
|
||||
enableLeechProgress: true
|
||||
- Prowlarr:
|
||||
icon: sh-prowlarr.webp
|
||||
description: Indexers
|
||||
href: https://prowlarr.alexlebens.net
|
||||
siteMonitor: http://prowlarr.prowlarr:80
|
||||
statusStyle: dot
|
||||
- Huntarr:
|
||||
icon: https://raw.githubusercontent.com/plexguide/Huntarr.io/main/frontend/static/logo/128.png
|
||||
description: Content upgrader
|
||||
href: https://huntarr.alexlebens.net
|
||||
siteMonitor: http://huntarr.huntarr:80
|
||||
statusStyle: dot
|
||||
- Bazarr:
|
||||
icon: sh-bazarr.webp
|
||||
description: Subtitles
|
||||
href: https://bazarr.alexlebens.net
|
||||
siteMonitor: http://bazarr.bazarr:80
|
||||
statusStyle: dot
|
||||
- Tdarr:
|
||||
icon: sh-tdarr.webp
|
||||
description: Media transcoding and health checks
|
||||
href: https://tdarr.alexlebens.net
|
||||
siteMonitor: http://tdarr-web.tdarr:8265
|
||||
statusStyle: dot
|
||||
widget:
|
||||
type: tdarr
|
||||
url: http://tdarr-web.tdarr:8265
|
||||
- TV Shows:
|
||||
- Sonarr:
|
||||
icon: sh-sonarr.webp
|
||||
description: TV Shows
|
||||
href: https://sonarr.alexlebens.net
|
||||
siteMonitor: http://sonarr.sonarr:80
|
||||
statusStyle: dot
|
||||
widget:
|
||||
type: sonarr
|
||||
url: http://sonarr.sonarr:80
|
||||
key: {{ "{{HOMEPAGE_VAR_SONARR_KEY}}" }}
|
||||
fields: ["wanted", "queued", "series"]
|
||||
enableQueue: false
|
||||
- Sonarr 4K:
|
||||
icon: sh-sonarr.webp
|
||||
description: TV Shows 4K
|
||||
href: https://sonarr-4k.alexlebens.net
|
||||
siteMonitor: http://sonarr-4k.sonarr-4k:80
|
||||
statusStyle: dot
|
||||
widget:
|
||||
type: sonarr
|
||||
url: http://sonarr-4k.sonarr-4k:80
|
||||
key: {{ "{{HOMEPAGE_VAR_SONARR4K_KEY}}" }}
|
||||
fields: ["wanted", "queued", "series"]
|
||||
enableQueue: false
|
||||
- Sonarr Anime:
|
||||
icon: sh-sonarr.webp
|
||||
description: Anime Shows
|
||||
href: https://sonarr-anime.alexlebens.net
|
||||
siteMonitor: http://sonarr-anime.sonarr-anime:80
|
||||
statusStyle: dot
|
||||
widget:
|
||||
type: sonarr
|
||||
url: http://sonarr-anime.sonarr-anime:80
|
||||
key: {{ "{{HOMEPAGE_VAR_SONARRANIME_KEY}}" }}
|
||||
fields: ["wanted", "queued", "series"]
|
||||
enableQueue: false
|
||||
- Movies:
|
||||
- Radarr:
|
||||
icon: sh-radarr.webp
|
||||
description: Movies
|
||||
href: https://radarr.alexlebens.net
|
||||
siteMonitor: http://radarr.radarr:80
|
||||
statusStyle: dot
|
||||
widget:
|
||||
type: radarr
|
||||
url: http://radarr.radarr:80
|
||||
key: {{ "{{HOMEPAGE_VAR_RADARR_KEY}}" }}
|
||||
fields: ["wanted", "queued", "movies"]
|
||||
enableQueue: false
|
||||
- Radarr 4K:
|
||||
icon: sh-radarr-4k.webp
|
||||
description: Movies 4K
|
||||
href: https://radarr-4k.alexlebens.net
|
||||
siteMonitor: http://radarr-4k.radarr-4k:80
|
||||
statusStyle: dot
|
||||
widget:
|
||||
type: radarr
|
||||
url: http://radarr-4k.radarr-4k:80
|
||||
key: {{ "{{HOMEPAGE_VAR_RADARR4K_KEY}}" }}
|
||||
fields: ["wanted", "queued", "movies"]
|
||||
enableQueue: false
|
||||
- Radarr Anime:
|
||||
icon: sh-radarr-anime.webp
|
||||
description: Anime Movies
|
||||
href: https://radarr-anime.alexlebens.net
|
||||
siteMonitor: http://radarr-anime.radarr-anime:80
|
||||
statusStyle: dot
|
||||
widget:
|
||||
type: radarr
|
||||
url: http://radarr-anime.radarr-anime:80
|
||||
key: {{ "{{HOMEPAGE_VAR_RADARRANIME_KEY}}" }}
|
||||
fields: ["wanted", "queued", "movies"]
|
||||
enableQueue: false
|
||||
- Radarr Stand Up:
|
||||
icon: sh-radarr-light-hybrid.webp
|
||||
description: Stand Up
|
||||
href: https://radarr-standup.alexlebens.net
|
||||
siteMonitor: http://radarr-standup.radarr-standup:80
|
||||
statusStyle: dot
|
||||
widget:
|
||||
type: radarr
|
||||
url: http://radarr-standup.radarr-standup:80
|
||||
key: {{ "{{HOMEPAGE_VAR_RADARRSTANDUP_KEY}}" }}
|
||||
fields: ["wanted", "queued", "movies"]
|
||||
enableQueue: false
|
||||
- Music:
|
||||
- Lidarr:
|
||||
icon: sh-lidarr.webp
|
||||
description: Music
|
||||
href: https://lidarr.alexlebens.net
|
||||
siteMonitor: http://lidarr.lidarr:80
|
||||
statusStyle: dot
|
||||
widget:
|
||||
type: lidarr
|
||||
url: http://lidarr.lidarr:80
|
||||
key: {{ "{{HOMEPAGE_VAR_LIDARR_KEY}}" }}
|
||||
fields: ["wanted", "queued", "artists"]
|
||||
- LidaTube:
|
||||
icon: sh-lidatube.webp
|
||||
description: Searches for Music
|
||||
href: https://lidatube.alexlebens.net
|
||||
siteMonitor: http://lidatube.lidatube:80
|
||||
statusStyle: dot
|
||||
- Soulseek:
|
||||
icon: sh-slskd.webp
|
||||
description: slskd
|
||||
href: https://slskd.alexlebens.net
|
||||
siteMonitor: http://slskd.slskd:5030
|
||||
statusStyle: dot
|
||||
- Books:
|
||||
- Ephemera:
|
||||
icon: sh-ephemera.webp
|
||||
description: Books
|
||||
href: https://ephemera.alexlebens.net
|
||||
siteMonitor: http://ephemera.ephemera:80
|
||||
statusStyle: dot
|
||||
- Listenarr:
|
||||
icon: sh-audiobookrequest.webp
|
||||
description: Audiobooks
|
||||
href: https://listenarr.alexlebens.net
|
||||
siteMonitor: http://listenarr.listenarr:80
|
||||
statusStyle: dot
|
||||
- Other Homes:
|
||||
- Dev:
|
||||
icon: sh-homepage.webp
|
||||
description: Public Homepage
|
||||
href: https://home.alexlebens.dev
|
||||
siteMonitor: https://home.alexlebens.dev
|
||||
statusStyle: dot
|
||||
- Lebens Home:
|
||||
icon: sh-homepage.webp
|
||||
description: Lebens Homepage
|
||||
href: https://home-ps10rp.boreal-beaufort.ts.net
|
||||
siteMonitor: https://home-ps10rp.boreal-beaufort.ts.net
|
||||
statusStyle: dot
|
||||
bookmarks.yaml: |
|
||||
- External Services:
|
||||
- Github:
|
||||
- abbr: GH
|
||||
href: https://github.com/alexlebens
|
||||
- Digital Ocean:
|
||||
- abbr: DO
|
||||
href: https://www.digitalocean.com/
|
||||
- AWS:
|
||||
- abbr: AW
|
||||
href: https://aws.amazon.com/console/
|
||||
- Cloudflare:
|
||||
- abbr: CF
|
||||
href: https://dash.cloudflare.com/b76e303258b84076ee01fd0f515c0768
|
||||
- Tailscale:
|
||||
- abbr: TS
|
||||
href: https://login.tailscale.com/admin/machines
|
||||
- ProtonVPN:
|
||||
- abbr: PV
|
||||
href: https://account.protonvpn.com/
|
||||
- Unifi:
|
||||
- abbr: UF
|
||||
href: https://unifi.ui.com/
|
||||
- Pushover:
|
||||
- abbr: PO
|
||||
href: https://pushover.net
|
||||
- ReCaptcha:
|
||||
- abbr: RC
|
||||
href: https://www.google.com/recaptcha/admin/site/698983587
|
||||
- Trackers:
|
||||
- Torrentleech:
|
||||
- abbr: TL
|
||||
href: https://www.torrentleech.org
|
||||
- Avistaz:
|
||||
- abbr: AV
|
||||
href: https://avistaz.to
|
||||
- Cinemaz:
|
||||
- abbr: CM
|
||||
href: https://cinemaz.to
|
||||
- Cathode Ray Tube:
|
||||
- abbr: CRT
|
||||
href: https://www.cathode-ray.tube
|
||||
- Alpha Ratio:
|
||||
- abbr: AL
|
||||
href: https://alpharatio.cc/
|
||||
- MV Group:
|
||||
- abbr: MV
|
||||
href: https://forums.mvgroup.org
|
||||
service:
|
||||
http:
|
||||
controller: main
|
||||
ports:
|
||||
http:
|
||||
port: 80
|
||||
targetPort: 3000
|
||||
protocol: HTTP
|
||||
persistence:
|
||||
config:
|
||||
enabled: true
|
||||
type: configMap
|
||||
name: homepage
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /app/config/bookmarks.yaml
|
||||
readOnly: true
|
||||
mountPropagation: None
|
||||
subPath: bookmarks.yaml
|
||||
- path: /app/config/docker.yaml
|
||||
readOnly: true
|
||||
mountPropagation: None
|
||||
subPath: docker.yaml
|
||||
- path: /app/config/kubernetes.yaml
|
||||
readOnly: true
|
||||
mountPropagation: None
|
||||
subPath: kubernetes.yaml
|
||||
- path: /app/config/services.yaml
|
||||
readOnly: true
|
||||
mountPropagation: None
|
||||
subPath: services.yaml
|
||||
- path: /app/config/settings.yaml
|
||||
readOnly: true
|
||||
mountPropagation: None
|
||||
subPath: settings.yaml
|
||||
- path: /app/config/widgets.yaml
|
||||
readOnly: true
|
||||
mountPropagation: None
|
||||
subPath: widgets.yaml
|
||||
9
clusters/cl01tl/helm/jellystat/Chart.lock
Normal file
9
clusters/cl01tl/helm/jellystat/Chart.lock
Normal file
@@ -0,0 +1,9 @@
|
||||
dependencies:
|
||||
- name: app-template
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
- name: postgres-cluster
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
version: 6.16.0
|
||||
digest: sha256:4d14b684813eac9fcae1be18bcc5644c8583e2c014da6941705b58b118bbd6ee
|
||||
generated: "2025-11-30T21:07:13.230393-06:00"
|
||||
27
clusters/cl01tl/helm/jellystat/Chart.yaml
Normal file
27
clusters/cl01tl/helm/jellystat/Chart.yaml
Normal file
@@ -0,0 +1,27 @@
|
||||
apiVersion: v2
|
||||
name: jellystat
|
||||
version: 1.0.0
|
||||
description: Jellystat
|
||||
keywords:
|
||||
- jellystat
|
||||
- jellyfin
|
||||
home: https://wiki.alexlebens.dev/s/d3fd2bf1-d2ab-4e94-a127-ee35f2d90142
|
||||
sources:
|
||||
- https://github.com/CyferShepard/Jellystat
|
||||
- https://github.com/cloudnative-pg/cloudnative-pg
|
||||
- https://hub.docker.com/r/cyfershepard/jellystat
|
||||
- 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: jellystat
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
- name: postgres-cluster
|
||||
alias: postgres-17-cluster
|
||||
version: 6.16.0
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/jellystat.png
|
||||
appVersion: 1.1.6
|
||||
159
clusters/cl01tl/helm/jellystat/templates/external-secret.yaml
Normal file
159
clusters/cl01tl/helm/jellystat/templates/external-secret.yaml
Normal file
@@ -0,0 +1,159 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: jellystat-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: jellystat-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: secret-key
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/jellystat/auth
|
||||
metadataPolicy: None
|
||||
property: secret-key
|
||||
- secretKey: user
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/jellystat/auth
|
||||
metadataPolicy: None
|
||||
property: user
|
||||
- secretKey: password
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/jellystat/auth
|
||||
metadataPolicy: None
|
||||
property: password
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: jellystat-data-backup-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: jellystat-data-backup-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
target:
|
||||
template:
|
||||
mergePolicy: Merge
|
||||
engineVersion: v2
|
||||
data:
|
||||
RESTIC_REPOSITORY: "{{ `{{ .BUCKET_ENDPOINT }}` }}/jellystat/jellystat-data"
|
||||
data:
|
||||
- secretKey: BUCKET_ENDPOINT
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: S3_BUCKET_ENDPOINT
|
||||
- secretKey: RESTIC_PASSWORD
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: RESTIC_PASSWORD
|
||||
- secretKey: AWS_DEFAULT_REGION
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: AWS_DEFAULT_REGION
|
||||
- secretKey: AWS_ACCESS_KEY_ID
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /digital-ocean/home-infra/volsync-backups
|
||||
metadataPolicy: None
|
||||
property: access_key
|
||||
- secretKey: AWS_SECRET_ACCESS_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /digital-ocean/home-infra/volsync-backups
|
||||
metadataPolicy: None
|
||||
property: secret_key
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: jellystat-postgresql-17-cluster-backup-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: jellystat-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
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: jellystat-postgresql-17-cluster-backup-secret-garage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: jellystat-postgresql-17-cluster-backup-secret-garage
|
||||
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: /garage/home-infra/postgres-backups
|
||||
metadataPolicy: None
|
||||
property: ACCESS_KEY_ID
|
||||
- secretKey: ACCESS_SECRET_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /garage/home-infra/postgres-backups
|
||||
metadataPolicy: None
|
||||
property: ACCESS_SECRET_KEY
|
||||
- secretKey: ACCESS_REGION
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /garage/home-infra/postgres-backups
|
||||
metadataPolicy: None
|
||||
property: ACCESS_REGION
|
||||
28
clusters/cl01tl/helm/jellystat/templates/http-route.yaml
Normal file
28
clusters/cl01tl/helm/jellystat/templates/http-route.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: gateway.networking.k8s.io/v1
|
||||
kind: HTTPRoute
|
||||
metadata:
|
||||
name: http-route-jellystat
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: http-route-jellystat
|
||||
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:
|
||||
- jellystat.alexlebens.net
|
||||
rules:
|
||||
- matches:
|
||||
- path:
|
||||
type: PathPrefix
|
||||
value: /
|
||||
backendRefs:
|
||||
- group: ''
|
||||
kind: Service
|
||||
name: jellystat
|
||||
port: 80
|
||||
weight: 100
|
||||
@@ -0,0 +1,25 @@
|
||||
apiVersion: volsync.backube/v1alpha1
|
||||
kind: ReplicationSource
|
||||
metadata:
|
||||
name: jellystat-data-backup-source
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: jellystat-data-backup-source
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
sourcePVC: jellystat-data
|
||||
trigger:
|
||||
schedule: 0 4 * * *
|
||||
restic:
|
||||
pruneIntervalDays: 7
|
||||
repository: jellystat-data-backup-secret
|
||||
retain:
|
||||
hourly: 1
|
||||
daily: 3
|
||||
weekly: 2
|
||||
monthly: 2
|
||||
yearly: 4
|
||||
copyMethod: Snapshot
|
||||
storageClassName: ceph-block
|
||||
volumeSnapshotClassName: ceph-blockpool-snapshot
|
||||
136
clusters/cl01tl/helm/jellystat/values.yaml
Normal file
136
clusters/cl01tl/helm/jellystat/values.yaml
Normal file
@@ -0,0 +1,136 @@
|
||||
jellystat:
|
||||
controllers:
|
||||
main:
|
||||
type: deployment
|
||||
replicas: 1
|
||||
strategy: Recreate
|
||||
revisionHistoryLimit: 3
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: cyfershepard/jellystat
|
||||
tag: 1.1.6
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: TZ
|
||||
value: US/Central
|
||||
- name: JWT_SECRET
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: jellystat-secret
|
||||
key: secret-key
|
||||
- name: JS_USER
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: jellystat-secret
|
||||
key: user
|
||||
- name: JS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: jellystat-secret
|
||||
key: password
|
||||
- name: POSTGRES_USER
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: jellystat-postgresql-17-cluster-app
|
||||
key: username
|
||||
- name: POSTGRES_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: jellystat-postgresql-17-cluster-app
|
||||
key: password
|
||||
- name: POSTGRES_DB
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: jellystat-postgresql-17-cluster-app
|
||||
key: dbname
|
||||
- name: POSTGRES_IP
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: jellystat-postgresql-17-cluster-app
|
||||
key: host
|
||||
- name: POSTGRES_PORT
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: jellystat-postgresql-17-cluster-app
|
||||
key: port
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 256Mi
|
||||
service:
|
||||
main:
|
||||
controller: main
|
||||
ports:
|
||||
http:
|
||||
port: 80
|
||||
targetPort: 3000
|
||||
protocol: HTTP
|
||||
persistence:
|
||||
data:
|
||||
forceRename: jellystat-data
|
||||
storageClass: ceph-block
|
||||
accessMode: ReadWriteOnce
|
||||
size: 5Gi
|
||||
retain: true
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /app/backend/backup-data
|
||||
readOnly: false
|
||||
postgres-17-cluster:
|
||||
mode: recovery
|
||||
cluster:
|
||||
storage:
|
||||
storageClass: local-path
|
||||
walStorage:
|
||||
storageClass: local-path
|
||||
monitoring:
|
||||
enabled: true
|
||||
prometheusRule:
|
||||
enabled: true
|
||||
recovery:
|
||||
method: objectStore
|
||||
objectStore:
|
||||
destinationPath: s3://postgres-backups/cl01tl/jellystat/jellystat-postgresql-17-cluster
|
||||
endpointURL: http://garage-main.garage:3900
|
||||
index: 1
|
||||
endpointCredentials: jellystat-postgresql-17-cluster-backup-secret-garage
|
||||
backup:
|
||||
objectStore:
|
||||
- name: external
|
||||
destinationPath: s3://postgres-backups-ce540ddf106d186bbddca68a/cl01tl/jellystat/jellystat-postgresql-17-cluster
|
||||
index: 1
|
||||
retentionPolicy: "30d"
|
||||
isWALArchiver: false
|
||||
- name: garage-local
|
||||
destinationPath: s3://postgres-backups/cl01tl/jellystat/jellystat-postgresql-17-cluster
|
||||
index: 1
|
||||
endpointURL: http://garage-main.garage:3900
|
||||
endpointCredentials: jellystat-postgresql-17-cluster-backup-secret-garage
|
||||
endpointCredentialsIncludeRegion: true
|
||||
retentionPolicy: "3d"
|
||||
isWALArchiver: true
|
||||
# - name: garage-remote
|
||||
# destinationPath: s3://postgres-backups/cl01tl/jellystat/jellystat-postgresql-17-cluster
|
||||
# index: 1
|
||||
# endpointURL: https://garage-ps10rp.boreal-beaufort.ts.net:3900
|
||||
# endpointCredentials: jellystat-postgresql-17-cluster-backup-secret-garage
|
||||
# retentionPolicy: "30d"
|
||||
# data:
|
||||
# compression: bzip2
|
||||
# jobs: 2
|
||||
scheduledBackups:
|
||||
- name: daily-backup
|
||||
suspend: false
|
||||
schedule: "0 0 0 * * *"
|
||||
backupName: external
|
||||
- name: live-backup
|
||||
suspend: false
|
||||
immediate: true
|
||||
schedule: "0 0 0 * * *"
|
||||
backupName: garage-local
|
||||
# - name: weekly-backup
|
||||
# suspend: false
|
||||
# schedule: "0 6 4 * * SAT"
|
||||
# backupName: garage-remote
|
||||
6
clusters/cl01tl/helm/lidatube/Chart.lock
Normal file
6
clusters/cl01tl/helm/lidatube/Chart.lock
Normal file
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: app-template
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
digest: sha256:ad00ef6a3bd12d2a6a167838ec3922aeb386e2a9efd260f4f8cce8964e5bf7b5
|
||||
generated: "2025-11-30T21:07:21.451781-06:00"
|
||||
22
clusters/cl01tl/helm/lidatube/Chart.yaml
Normal file
22
clusters/cl01tl/helm/lidatube/Chart.yaml
Normal file
@@ -0,0 +1,22 @@
|
||||
apiVersion: v2
|
||||
name: lidatube
|
||||
version: 1.0.0
|
||||
description: LidaTube
|
||||
keywords:
|
||||
- lidatube
|
||||
- music
|
||||
- yt-dlp
|
||||
home: https://wiki.alexlebens.dev/s/10d95030-85be-4ced-a8d7-b4aaeca9bee6
|
||||
sources:
|
||||
- https://github.com/TheWicklowWolf/LidaTube
|
||||
- https://registry.hub.docker.com/r/thewicklowwolf/lidatube
|
||||
- https://github.com/bjw-s-labs/helm-charts/tree/main/charts/other/app-template
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
dependencies:
|
||||
- name: app-template
|
||||
alias: lidatube
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/lidatube.png
|
||||
appVersion: 0.2.22
|
||||
21
clusters/cl01tl/helm/lidatube/templates/external-secret.yaml
Normal file
21
clusters/cl01tl/helm/lidatube/templates/external-secret.yaml
Normal file
@@ -0,0 +1,21 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: lidatube-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: lidatube-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: lidarr_api_key
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/lidarr2/key
|
||||
metadataPolicy: None
|
||||
property: key
|
||||
28
clusters/cl01tl/helm/lidatube/templates/http-route.yaml
Normal file
28
clusters/cl01tl/helm/lidatube/templates/http-route.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: gateway.networking.k8s.io/v1
|
||||
kind: HTTPRoute
|
||||
metadata:
|
||||
name: http-route-lidatube
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: http-route-lidatube
|
||||
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:
|
||||
- lidatube.alexlebens.net
|
||||
rules:
|
||||
- matches:
|
||||
- path:
|
||||
type: PathPrefix
|
||||
value: /
|
||||
backendRefs:
|
||||
- group: ''
|
||||
kind: Service
|
||||
name: lidatube
|
||||
port: 80
|
||||
weight: 100
|
||||
@@ -0,0 +1,17 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: lidatube-nfs-storage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: lidatube-nfs-storage
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
volumeName: lidatube-nfs-storage
|
||||
storageClassName: nfs-client
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: lidatube-nfs-storage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: lidatube-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/Music
|
||||
server: synologybond.alexlebens.net
|
||||
mountOptions:
|
||||
- vers=4
|
||||
- minorversion=1
|
||||
- noac
|
||||
66
clusters/cl01tl/helm/lidatube/values.yaml
Normal file
66
clusters/cl01tl/helm/lidatube/values.yaml
Normal file
@@ -0,0 +1,66 @@
|
||||
lidatube:
|
||||
controllers:
|
||||
main:
|
||||
type: deployment
|
||||
replicas: 1
|
||||
strategy: Recreate
|
||||
revisionHistoryLimit: 3
|
||||
pod:
|
||||
securityContext:
|
||||
fsGroup: 1000
|
||||
fsGroupChangePolicy: OnRootMismatch
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: thewicklowwolf/lidatube
|
||||
tag: 0.2.41
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: PUID
|
||||
value: 1000
|
||||
- name: PGID
|
||||
value: 1000
|
||||
- name: lidarr_address
|
||||
value: http://lidarr.lidarr:80
|
||||
- name: lidarr_api_key
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: lidatube-secret
|
||||
key: lidarr_api_key
|
||||
- name: sleep_interval
|
||||
value: 360
|
||||
- name: sync_schedule
|
||||
value: 4
|
||||
- name: attempt_lidarr_import
|
||||
value: true
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 128Mi
|
||||
service:
|
||||
main:
|
||||
controller: main
|
||||
ports:
|
||||
http:
|
||||
port: 80
|
||||
targetPort: 5000
|
||||
protocol: HTTP
|
||||
persistence:
|
||||
config:
|
||||
forceRename: lidatube-config
|
||||
storageClass: ceph-block
|
||||
accessMode: ReadWriteOnce
|
||||
size: 5Gi
|
||||
retain: true
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /lidatube/config
|
||||
readOnly: false
|
||||
music:
|
||||
existingClaim: lidatube-nfs-storage
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /lidatube/downloads
|
||||
readOnly: false
|
||||
6
clusters/cl01tl/helm/listenarr/Chart.lock
Normal file
6
clusters/cl01tl/helm/listenarr/Chart.lock
Normal file
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: app-template
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
digest: sha256:8cd26f322d08777301e6c080ca9faa09a2fabda5c3f8bba6536d67496149ae4b
|
||||
generated: "2025-11-30T21:07:22.794237-06:00"
|
||||
20
clusters/cl01tl/helm/listenarr/Chart.yaml
Normal file
20
clusters/cl01tl/helm/listenarr/Chart.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
apiVersion: v2
|
||||
name: listenarr
|
||||
version: 1.0.0
|
||||
description: Listenarr
|
||||
keywords:
|
||||
- listenarr
|
||||
- audiobooks
|
||||
home: https://wiki.alexlebens.dev/
|
||||
sources:
|
||||
- https://github.com/therobbiedavis/Listenarr
|
||||
- https://hub.docker.com/r/therobbiedavis/listenarr
|
||||
- https://github.com/bjw-s-labs/helm-charts/tree/main/charts/other/app-template
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
dependencies:
|
||||
- name: app-template
|
||||
alias: listenarr
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
appVersion: 0.2.35
|
||||
28
clusters/cl01tl/helm/listenarr/templates/http-route.yaml
Normal file
28
clusters/cl01tl/helm/listenarr/templates/http-route.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: gateway.networking.k8s.io/v1
|
||||
kind: HTTPRoute
|
||||
metadata:
|
||||
name: http-route-listenarr
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: http-route-listenarr
|
||||
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:
|
||||
- listenarr.alexlebens.net
|
||||
rules:
|
||||
- matches:
|
||||
- path:
|
||||
type: PathPrefix
|
||||
value: /
|
||||
backendRefs:
|
||||
- group: ''
|
||||
kind: Service
|
||||
name: listenarr
|
||||
port: 80
|
||||
weight: 100
|
||||
@@ -0,0 +1,17 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: listenarr-nfs-storage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: listenarr-nfs-storage
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
volumeName: listenarr-nfs-storage
|
||||
storageClassName: nfs-client
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: listenarr-nfs-storage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: listenarr-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/Audiobooks
|
||||
server: synologybond.alexlebens.net
|
||||
mountOptions:
|
||||
- vers=4
|
||||
- minorversion=1
|
||||
- noac
|
||||
46
clusters/cl01tl/helm/listenarr/values.yaml
Normal file
46
clusters/cl01tl/helm/listenarr/values.yaml
Normal file
@@ -0,0 +1,46 @@
|
||||
listenarr:
|
||||
controllers:
|
||||
main:
|
||||
type: deployment
|
||||
replicas: 1
|
||||
strategy: Recreate
|
||||
revisionHistoryLimit: 3
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: therobbiedavis/listenarr
|
||||
tag: canary-0.2.35
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: LISTENARR_PUBLIC_URL
|
||||
value: https://listenarr.alexlebens.net
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 128Mi
|
||||
service:
|
||||
main:
|
||||
controller: main
|
||||
ports:
|
||||
http:
|
||||
port: 80
|
||||
targetPort: 5000
|
||||
protocol: HTTP
|
||||
persistence:
|
||||
config:
|
||||
storageClass: ceph-block
|
||||
accessMode: ReadWriteOnce
|
||||
size: 5Gi
|
||||
retain: true
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /app/config
|
||||
readOnly: false
|
||||
media:
|
||||
existingClaim: listenarr-nfs-storage
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /data
|
||||
readOnly: false
|
||||
6
clusters/cl01tl/helm/omni-tools/Chart.lock
Normal file
6
clusters/cl01tl/helm/omni-tools/Chart.lock
Normal file
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: app-template
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
digest: sha256:2742827fee3fb1d07cd96db1ae82dbf206d24dd5d326ba2702508de42e3dccb2
|
||||
generated: "2025-11-30T21:07:24.477661-06:00"
|
||||
20
clusters/cl01tl/helm/omni-tools/Chart.yaml
Normal file
20
clusters/cl01tl/helm/omni-tools/Chart.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
apiVersion: v2
|
||||
name: omni-tools
|
||||
version: 1.0.0
|
||||
description: OmniTools
|
||||
keywords:
|
||||
- omni-tools
|
||||
home: https://wiki.alexlebens.dev/s/8820cd36-dcf6-4ddf-8b2f-584271628a54
|
||||
sources:
|
||||
- https://github.com/iib0011/omni-tools
|
||||
- https://hub.docker.com/r/iib0011/omni-tools
|
||||
- https://github.com/bjw-s-labs/helm-charts/tree/main/charts/other/app-template
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
dependencies:
|
||||
- name: app-template
|
||||
alias: omni-tools
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/omnitools.png
|
||||
appVersion: 0.4.0
|
||||
28
clusters/cl01tl/helm/omni-tools/templates/http-route.yaml
Normal file
28
clusters/cl01tl/helm/omni-tools/templates/http-route.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: gateway.networking.k8s.io/v1
|
||||
kind: HTTPRoute
|
||||
metadata:
|
||||
name: http-route-omni-tools
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: http-route-omni-tools
|
||||
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:
|
||||
- omni-tools.alexlebens.net
|
||||
rules:
|
||||
- matches:
|
||||
- path:
|
||||
type: PathPrefix
|
||||
value: /
|
||||
backendRefs:
|
||||
- group: ''
|
||||
kind: Service
|
||||
name: omni-tools
|
||||
port: 80
|
||||
weight: 100
|
||||
25
clusters/cl01tl/helm/omni-tools/values.yaml
Normal file
25
clusters/cl01tl/helm/omni-tools/values.yaml
Normal file
@@ -0,0 +1,25 @@
|
||||
omni-tools:
|
||||
controllers:
|
||||
main:
|
||||
type: deployment
|
||||
replicas: 1
|
||||
strategy: Recreate
|
||||
revisionHistoryLimit: 3
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: iib0011/omni-tools
|
||||
tag: 0.6.0
|
||||
pullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 512Mi
|
||||
service:
|
||||
main:
|
||||
controller: main
|
||||
ports:
|
||||
http:
|
||||
port: 80
|
||||
targetPort: 80
|
||||
protocol: HTTP
|
||||
12
clusters/cl01tl/helm/outline/Chart.lock
Normal file
12
clusters/cl01tl/helm/outline/Chart.lock
Normal file
@@ -0,0 +1,12 @@
|
||||
dependencies:
|
||||
- name: app-template
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
- name: cloudflared
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
version: 1.23.0
|
||||
- name: postgres-cluster
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
version: 6.16.0
|
||||
digest: sha256:4c36df51e831ff5431e9c60cf4f13a8ad7436ed070f4ce082c2793fc9773958c
|
||||
generated: "2025-11-30T21:07:25.868245-06:00"
|
||||
34
clusters/cl01tl/helm/outline/Chart.yaml
Normal file
34
clusters/cl01tl/helm/outline/Chart.yaml
Normal file
@@ -0,0 +1,34 @@
|
||||
apiVersion: v2
|
||||
name: outline
|
||||
version: 1.0.0
|
||||
description: Outline
|
||||
keywords:
|
||||
- outline
|
||||
- wiki
|
||||
- documentation
|
||||
home: https://wiki.alexlebens.dev/s/c530c2b9-82b7-44df-b7ef-870c8b29242f
|
||||
sources:
|
||||
- https://github.com/outline/outline
|
||||
- https://github.com/cloudflare/cloudflared
|
||||
- https://github.com/cloudnative-pg/cloudnative-pg
|
||||
- https://hub.docker.com/r/outlinewiki/outline
|
||||
- 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/cloudflared
|
||||
- https://gitea.alexlebens.dev/alexlebens/helm-charts/src/branch/main/charts/postgres-cluster
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
dependencies:
|
||||
- name: app-template
|
||||
alias: outline
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
- name: cloudflared
|
||||
alias: cloudflared-outline
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
version: 1.23.0
|
||||
- name: postgres-cluster
|
||||
alias: postgres-17-cluster
|
||||
version: 6.16.0
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/outline.png
|
||||
appVersion: 0.84.0
|
||||
148
clusters/cl01tl/helm/outline/templates/external-secret.yaml
Normal file
148
clusters/cl01tl/helm/outline/templates/external-secret.yaml
Normal file
@@ -0,0 +1,148 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: outline-key-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: outline-key-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: secret-key
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/outline/key
|
||||
metadataPolicy: None
|
||||
property: secret-key
|
||||
- secretKey: utils-key
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/outline/key
|
||||
metadataPolicy: None
|
||||
property: utils-key
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: outline-oidc-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: outline-oidc-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: client
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /authentik/oidc/outline
|
||||
metadataPolicy: None
|
||||
property: client
|
||||
- secretKey: secret
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /authentik/oidc/outline
|
||||
metadataPolicy: None
|
||||
property: secret
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: outline-cloudflared-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: outline-cloudflared-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: cf-tunnel-token
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cloudflare/tunnels/outline
|
||||
metadataPolicy: None
|
||||
property: token
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: outline-postgresql-17-cluster-backup-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: outline-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
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: outline-postgresql-17-cluster-backup-secret-garage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: outline-postgresql-17-cluster-backup-secret-garage
|
||||
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: /garage/home-infra/postgres-backups
|
||||
metadataPolicy: None
|
||||
property: ACCESS_KEY_ID
|
||||
- secretKey: ACCESS_SECRET_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /garage/home-infra/postgres-backups
|
||||
metadataPolicy: None
|
||||
property: ACCESS_SECRET_KEY
|
||||
- secretKey: ACCESS_REGION
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /garage/home-infra/postgres-backups
|
||||
metadataPolicy: None
|
||||
property: ACCESS_REGION
|
||||
@@ -0,0 +1,30 @@
|
||||
apiVersion: objectbucket.io/v1alpha1
|
||||
kind: ObjectBucketClaim
|
||||
metadata:
|
||||
name: ceph-bucket-outline
|
||||
labels:
|
||||
app.kubernetes.io/name: ceph-bucket-outline
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
generateBucketName: bucket-outline
|
||||
storageClassName: ceph-bucket
|
||||
additionalConfig:
|
||||
bucketPolicy: |
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Sid": "VisualEditor",
|
||||
"Effect": "Allow",
|
||||
"Action": [
|
||||
"s3:GetObjectAcl",
|
||||
"s3:DeleteObject",
|
||||
"s3:PutObject",
|
||||
"s3:GetObject",
|
||||
"s3:PutObjectAcl"
|
||||
],
|
||||
"Resource": "arn:aws:s3:::bucket-outline-630c57e0-d475-4d78-926c-c1c082291d73/*"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: redis-replication-outline
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: redis-replication-outline
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
clusterSize: 3
|
||||
podSecurityContext:
|
||||
runAsUser: 1000
|
||||
fsGroup: 1000
|
||||
kubernetesConfig:
|
||||
image: quay.io/opstree/redis:v8.0.3
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 128Mi
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
storageClassName: ceph-block
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
redisExporter:
|
||||
enabled: true
|
||||
image: quay.io/opstree/redis-exporter:v1.48.0
|
||||
19
clusters/cl01tl/helm/outline/templates/service-monitor.yaml
Normal file
19
clusters/cl01tl/helm/outline/templates/service-monitor.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: ServiceMonitor
|
||||
metadata:
|
||||
name: redis-replication-outline
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: redis-replication-outline
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
redis-operator: "true"
|
||||
env: production
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
redis_setup_type: replication
|
||||
endpoints:
|
||||
- port: redis-exporter
|
||||
interval: 30s
|
||||
scrapeTimeout: 10s
|
||||
203
clusters/cl01tl/helm/outline/values.yaml
Normal file
203
clusters/cl01tl/helm/outline/values.yaml
Normal file
@@ -0,0 +1,203 @@
|
||||
outline:
|
||||
controllers:
|
||||
main:
|
||||
type: deployment
|
||||
replicas: 1
|
||||
strategy: Recreate
|
||||
revisionHistoryLimit: 3
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: outlinewiki/outline
|
||||
tag: 1.1.0
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: NODE_ENV
|
||||
value: production
|
||||
- name: URL
|
||||
value: https://wiki.alexlebens.dev
|
||||
- name: PORT
|
||||
value: 3000
|
||||
- name: SECRET_KEY
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: outline-key-secret
|
||||
key: secret-key
|
||||
- name: UTILS_SECRET
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: outline-key-secret
|
||||
key: utils-key
|
||||
- name: POSTGRES_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: outline-postgresql-17-cluster-app
|
||||
key: username
|
||||
- name: POSTGRES_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: outline-postgresql-17-cluster-app
|
||||
key: password
|
||||
- name: POSTGRES_DATABASE_NAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: outline-postgresql-17-cluster-app
|
||||
key: dbname
|
||||
- name: POSTGRES_DATABASE_HOST
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: outline-postgresql-17-cluster-app
|
||||
key: host
|
||||
- name: POSTGRES_DATABASE_PORT
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: outline-postgresql-17-cluster-app
|
||||
key: port
|
||||
- name: DATABASE_URL
|
||||
value: postgres://$(POSTGRES_USERNAME):$(POSTGRES_PASSWORD)@$(POSTGRES_DATABASE_HOST):$(POSTGRES_DATABASE_PORT)/$(POSTGRES_DATABASE_NAME)
|
||||
- name: DATABASE_URL_TEST
|
||||
value: postgres://$(POSTGRES_USERNAME):$(POSTGRES_PASSWORD)@$(POSTGRES_DATABASE_HOST):$(POSTGRES_DATABASE_PORT)/$(POSTGRES_DATABASE_NAME)-test
|
||||
- name: DATABASE_CONNECTION_POOL_MIN
|
||||
value: "2"
|
||||
- name: DATABASE_CONNECTION_POOL_MAX
|
||||
value: "20"
|
||||
- name: PGSSLMODE
|
||||
value: disable
|
||||
- name: REDIS_URL
|
||||
value: redis://redis-replication-outline-master.outline:6379
|
||||
- name: FILE_STORAGE
|
||||
value: s3
|
||||
- name: AWS_ACCESS_KEY_ID
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: ceph-bucket-outline
|
||||
key: AWS_ACCESS_KEY_ID
|
||||
- name: AWS_SECRET_ACCESS_KEY
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: ceph-bucket-outline
|
||||
key: AWS_SECRET_ACCESS_KEY
|
||||
- name: AWS_REGION
|
||||
value: us-east-1
|
||||
- name: AWS_S3_UPLOAD_BUCKET_NAME
|
||||
valueFrom:
|
||||
configMapKeyRef:
|
||||
name: ceph-bucket-outline
|
||||
key: BUCKET_NAME
|
||||
- name: AWS_S3_UPLOAD_BUCKET_URL
|
||||
value: https://objects.alexlebens.dev
|
||||
- name: AWS_S3_FORCE_PATH_STYLE
|
||||
value: true
|
||||
- name: AWS_S3_ACL
|
||||
value: private
|
||||
- name: FILE_STORAGE_UPLOAD_MAX_SIZE
|
||||
value: "26214400"
|
||||
- name: FORCE_HTTPS
|
||||
value: false
|
||||
- name: ENABLE_UPDATES
|
||||
value: false
|
||||
- name: WEB_CONCURRENCY
|
||||
value: 1
|
||||
- name: FILE_STORAGE_IMPORT_MAX_SIZE
|
||||
value: 5120000
|
||||
- name: LOG_LEVEL
|
||||
value: info
|
||||
- name: DEFAULT_LANGUAGE
|
||||
value: en_US
|
||||
- name: RATE_LIMITER_ENABLED
|
||||
value: false
|
||||
- name: DEVELOPMENT_UNSAFE_INLINE_CSP
|
||||
value: false
|
||||
- name: OIDC_CLIENT_ID
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: outline-oidc-secret
|
||||
key: client
|
||||
- name: OIDC_CLIENT_SECRET
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: outline-oidc-secret
|
||||
key: secret
|
||||
- name: OIDC_AUTH_URI
|
||||
value: https://auth.alexlebens.dev/application/o/authorize/
|
||||
- name: OIDC_TOKEN_URI
|
||||
value: https://auth.alexlebens.dev/application/o/token/
|
||||
- name: OIDC_USERINFO_URI
|
||||
value: https://auth.alexlebens.dev/application/o/userinfo/
|
||||
- name: OIDC_USERNAME_CLAIM
|
||||
value: email
|
||||
- name: OIDC_DISPLAY_NAME
|
||||
value: Authentik
|
||||
- name: OIDC_SCOPES
|
||||
value: openid profile email
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 512Mi
|
||||
service:
|
||||
main:
|
||||
controller: main
|
||||
ports:
|
||||
http:
|
||||
port: 3000
|
||||
targetPort: 3000
|
||||
protocol: HTTP
|
||||
cloudflared-outline:
|
||||
existingSecretName: outline-cloudflared-secret
|
||||
name: cloudflared-outline
|
||||
postgres-17-cluster:
|
||||
mode: recovery
|
||||
cluster:
|
||||
storage:
|
||||
storageClass: local-path
|
||||
walStorage:
|
||||
storageClass: local-path
|
||||
monitoring:
|
||||
enabled: true
|
||||
prometheusRule:
|
||||
enabled: true
|
||||
recovery:
|
||||
method: objectStore
|
||||
objectStore:
|
||||
destinationPath: s3://postgres-backups/cl01tl/outline/outline-postgresql-17-cluster
|
||||
endpointURL: http://garage-main.garage:3900
|
||||
index: 1
|
||||
endpointCredentials: outline-postgresql-17-cluster-backup-secret-garage
|
||||
backup:
|
||||
objectStore:
|
||||
- name: external
|
||||
destinationPath: s3://postgres-backups-ce540ddf106d186bbddca68a/cl01tl/outline/outline-postgresql-17-cluster
|
||||
index: 1
|
||||
retentionPolicy: "30d"
|
||||
isWALArchiver: false
|
||||
- name: garage-local
|
||||
destinationPath: s3://postgres-backups/cl01tl/outline/outline-postgresql-17-cluster
|
||||
index: 1
|
||||
endpointURL: http://garage-main.garage:3900
|
||||
endpointCredentials: outline-postgresql-17-cluster-backup-secret-garage
|
||||
endpointCredentialsIncludeRegion: true
|
||||
retentionPolicy: "3d"
|
||||
isWALArchiver: true
|
||||
# - name: garage-remote
|
||||
# destinationPath: s3://postgres-backups/cl01tl/outline/outline-postgresql-17-cluster
|
||||
# index: 1
|
||||
# endpointURL: https://garage-ps10rp.boreal-beaufort.ts.net:3900
|
||||
# endpointCredentials: outline-postgresql-17-cluster-backup-secret-garage
|
||||
# retentionPolicy: "30d"
|
||||
# data:
|
||||
# compression: bzip2
|
||||
# jobs: 2
|
||||
scheduledBackups:
|
||||
- name: daily-backup
|
||||
suspend: false
|
||||
schedule: "0 0 0 * * *"
|
||||
backupName: external
|
||||
- name: live-backup
|
||||
suspend: false
|
||||
immediate: true
|
||||
schedule: "0 0 0 * * *"
|
||||
backupName: garage-local
|
||||
# - name: weekly-backup
|
||||
# suspend: false
|
||||
# schedule: "0 10 4 * * SAT"
|
||||
# backupName: garage-remote
|
||||
6
clusters/cl01tl/helm/overseerr/Chart.lock
Normal file
6
clusters/cl01tl/helm/overseerr/Chart.lock
Normal file
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: app-template
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
digest: sha256:9d2b5e1862aa2d9336884874aba6a11624a26b2fb0f98329b0b90f3426d61c4d
|
||||
generated: "2025-11-30T21:07:27.498925-06:00"
|
||||
21
clusters/cl01tl/helm/overseerr/Chart.yaml
Normal file
21
clusters/cl01tl/helm/overseerr/Chart.yaml
Normal file
@@ -0,0 +1,21 @@
|
||||
apiVersion: v2
|
||||
name: overseerr
|
||||
version: 1.0.0
|
||||
description: Overseerr
|
||||
keywords:
|
||||
- overseer
|
||||
- media
|
||||
- request
|
||||
home: https://wiki.alexlebens.dev/s/ba89ec92-a15c-48d5-9c33-a28a0134b0f9
|
||||
sources:
|
||||
- https://github.com/sct/overseerr
|
||||
- https://github.com/sct/overseerr/pkgs/container/overseerr
|
||||
- https://github.com/bjw-s-labs/helm-charts/tree/main/charts/other/app-template
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
dependencies:
|
||||
- name: app-template
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/overseerr.png
|
||||
appVersion: 1.34.0
|
||||
@@ -0,0 +1,55 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: overseerr-main-backup-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: overseerr-main-backup-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
target:
|
||||
template:
|
||||
mergePolicy: Merge
|
||||
engineVersion: v2
|
||||
data:
|
||||
RESTIC_REPOSITORY: "{{ `{{ .BUCKET_ENDPOINT }}` }}/overseerr/overseerr-main"
|
||||
data:
|
||||
- secretKey: BUCKET_ENDPOINT
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: S3_BUCKET_ENDPOINT
|
||||
- secretKey: RESTIC_PASSWORD
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: RESTIC_PASSWORD
|
||||
- secretKey: AWS_DEFAULT_REGION
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: AWS_DEFAULT_REGION
|
||||
- secretKey: AWS_ACCESS_KEY_ID
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /digital-ocean/home-infra/volsync-backups
|
||||
metadataPolicy: None
|
||||
property: access_key
|
||||
- secretKey: AWS_SECRET_ACCESS_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /digital-ocean/home-infra/volsync-backups
|
||||
metadataPolicy: None
|
||||
property: secret_key
|
||||
28
clusters/cl01tl/helm/overseerr/templates/http-route.yaml
Normal file
28
clusters/cl01tl/helm/overseerr/templates/http-route.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: gateway.networking.k8s.io/v1
|
||||
kind: HTTPRoute
|
||||
metadata:
|
||||
name: http-route-overseerr
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: http-route-overseerr
|
||||
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:
|
||||
- overseerr.alexlebens.net
|
||||
rules:
|
||||
- matches:
|
||||
- path:
|
||||
type: PathPrefix
|
||||
value: /
|
||||
backendRefs:
|
||||
- group: ''
|
||||
kind: Service
|
||||
name: overseerr
|
||||
port: 80
|
||||
weight: 100
|
||||
@@ -0,0 +1,25 @@
|
||||
apiVersion: volsync.backube/v1alpha1
|
||||
kind: ReplicationSource
|
||||
metadata:
|
||||
name: overseerr-main-backup-source
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: overseerr-main-backup-source
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
sourcePVC: overseerr-main
|
||||
trigger:
|
||||
schedule: 0 4 * * *
|
||||
restic:
|
||||
pruneIntervalDays: 7
|
||||
repository: overseerr-main-backup-secret
|
||||
retain:
|
||||
hourly: 1
|
||||
daily: 3
|
||||
weekly: 2
|
||||
monthly: 2
|
||||
yearly: 4
|
||||
copyMethod: Snapshot
|
||||
storageClassName: ceph-block
|
||||
volumeSnapshotClassName: ceph-blockpool-snapshot
|
||||
40
clusters/cl01tl/helm/overseerr/values.yaml
Normal file
40
clusters/cl01tl/helm/overseerr/values.yaml
Normal file
@@ -0,0 +1,40 @@
|
||||
app-template:
|
||||
controllers:
|
||||
main:
|
||||
type: deployment
|
||||
replicas: 1
|
||||
strategy: Recreate
|
||||
revisionHistoryLimit: 3
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: ghcr.io/sct/overseerr
|
||||
tag: 1.34.0
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: TZ
|
||||
value: US/Central
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 512Mi
|
||||
service:
|
||||
main:
|
||||
controller: main
|
||||
ports:
|
||||
http:
|
||||
port: 80
|
||||
targetPort: 5055
|
||||
protocol: HTTP
|
||||
persistence:
|
||||
main:
|
||||
forceRename: overseerr-main
|
||||
storageClass: ceph-block
|
||||
accessMode: ReadWriteOnce
|
||||
size: 10Gi
|
||||
retain: true
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /app/config
|
||||
readOnly: false
|
||||
9
clusters/cl01tl/helm/photoview/Chart.lock
Normal file
9
clusters/cl01tl/helm/photoview/Chart.lock
Normal file
@@ -0,0 +1,9 @@
|
||||
dependencies:
|
||||
- name: app-template
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
- name: postgres-cluster
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
version: 6.16.0
|
||||
digest: sha256:6e32298738e136a5c8cd51f84bc125a7f19443afe71978002fb3d1924e1d37d8
|
||||
generated: "2025-11-30T21:07:29.196717-06:00"
|
||||
26
clusters/cl01tl/helm/photoview/Chart.yaml
Normal file
26
clusters/cl01tl/helm/photoview/Chart.yaml
Normal file
@@ -0,0 +1,26 @@
|
||||
apiVersion: v2
|
||||
name: photoview
|
||||
version: 1.0.0
|
||||
description: Photoview
|
||||
keywords:
|
||||
- photoview
|
||||
- pictures
|
||||
home: https://wiki.alexlebens.dev/s/f519a435-8388-4503-a9f9-401bdb424151
|
||||
sources:
|
||||
- https://github.com/photoview/photoview
|
||||
- https://github.com/cloudnative-pg/cloudnative-pg
|
||||
- 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: photoview
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
- name: postgres-cluster
|
||||
alias: postgres-17-cluster
|
||||
version: 6.16.0
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/photoview.png
|
||||
appVersion: 2.4.0
|
||||
@@ -0,0 +1,65 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: photoview-postgresql-17-cluster-backup-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: photoview-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
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: photoview-postgresql-17-cluster-backup-secret-garage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: photoview-postgresql-17-cluster-backup-secret-garage
|
||||
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: /garage/home-infra/postgres-backups
|
||||
metadataPolicy: None
|
||||
property: ACCESS_KEY_ID
|
||||
- secretKey: ACCESS_SECRET_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /garage/home-infra/postgres-backups
|
||||
metadataPolicy: None
|
||||
property: ACCESS_SECRET_KEY
|
||||
- secretKey: ACCESS_REGION
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /garage/home-infra/postgres-backups
|
||||
metadataPolicy: None
|
||||
property: ACCESS_REGION
|
||||
28
clusters/cl01tl/helm/photoview/templates/http-route.yaml
Normal file
28
clusters/cl01tl/helm/photoview/templates/http-route.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: gateway.networking.k8s.io/v1
|
||||
kind: HTTPRoute
|
||||
metadata:
|
||||
name: http-route-photoview
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: http-route-photoview
|
||||
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:
|
||||
- photoview.alexlebens.net
|
||||
rules:
|
||||
- matches:
|
||||
- path:
|
||||
type: PathPrefix
|
||||
value: /
|
||||
backendRefs:
|
||||
- group: ''
|
||||
kind: Service
|
||||
name: photoview
|
||||
port: 80
|
||||
weight: 100
|
||||
@@ -0,0 +1,17 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: photoview-nfs-storage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: photoview-nfs-storage
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
volumeName: photoview-nfs-storage
|
||||
storageClassName: nfs-client
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: photoview-nfs-storage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: photoview-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/Pictures
|
||||
server: synologybond.alexlebens.net
|
||||
mountOptions:
|
||||
- vers=4
|
||||
- minorversion=1
|
||||
- noac
|
||||
130
clusters/cl01tl/helm/photoview/values.yaml
Normal file
130
clusters/cl01tl/helm/photoview/values.yaml
Normal file
@@ -0,0 +1,130 @@
|
||||
photoview:
|
||||
controllers:
|
||||
main:
|
||||
type: deployment
|
||||
replicas: 1
|
||||
strategy: Recreate
|
||||
revisionHistoryLimit: 3
|
||||
initContainers:
|
||||
init-chmod-data:
|
||||
securityContext:
|
||||
runAsUser: 0
|
||||
image:
|
||||
repository: busybox
|
||||
tag: 1.37.0
|
||||
pullPolicy: IfNotPresent
|
||||
command:
|
||||
- /bin/sh
|
||||
- -ec
|
||||
- |
|
||||
/bin/chown -R 999:999 /app/cache
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 128Mi
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: photoview/photoview
|
||||
tag: 2.4.0
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: PHOTOVIEW_DATABASE_DRIVER
|
||||
value: postgres
|
||||
- name: PHOTOVIEW_POSTGRES_URL
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: photoview-postgresql-17-cluster-app
|
||||
key: uri
|
||||
- name: PHOTOVIEW_MEDIA_CACHE
|
||||
value: /app/cache
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 512Mi
|
||||
service:
|
||||
main:
|
||||
controller: main
|
||||
ports:
|
||||
http:
|
||||
port: 80
|
||||
targetPort: 80
|
||||
protocol: HTTP
|
||||
persistence:
|
||||
cache:
|
||||
forceRename: photoview-cache
|
||||
storageClass: ceph-block
|
||||
accessMode: ReadWriteOnce
|
||||
size: 10Gi
|
||||
retain: false
|
||||
advancedMounts:
|
||||
main:
|
||||
init-chmod-data:
|
||||
- path: /app/cache
|
||||
readOnly: false
|
||||
main:
|
||||
- path: /app/cache
|
||||
readOnly: false
|
||||
media:
|
||||
existingClaim: photoview-nfs-storage
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /photos
|
||||
readOnly: true
|
||||
postgres-17-cluster:
|
||||
mode: recovery
|
||||
cluster:
|
||||
storage:
|
||||
storageClass: local-path
|
||||
walStorage:
|
||||
storageClass: local-path
|
||||
monitoring:
|
||||
enabled: true
|
||||
prometheusRule:
|
||||
enabled: true
|
||||
recovery:
|
||||
method: objectStore
|
||||
objectStore:
|
||||
destinationPath: s3://postgres-backups/cl01tl/photoview/photoview-postgresql-17-cluster
|
||||
endpointURL: http://garage-main.garage:3900
|
||||
index: 1
|
||||
endpointCredentials: photoview-postgresql-17-cluster-backup-secret-garage
|
||||
backup:
|
||||
objectStore:
|
||||
- name: external
|
||||
destinationPath: s3://postgres-backups-ce540ddf106d186bbddca68a/cl01tl/photoview/photoview-postgresql-17-cluster
|
||||
index: 1
|
||||
retentionPolicy: "30d"
|
||||
isWALArchiver: false
|
||||
- name: garage-local
|
||||
destinationPath: s3://postgres-backups/cl01tl/photoview/photoview-postgresql-17-cluster
|
||||
index: 1
|
||||
endpointURL: http://garage-main.garage:3900
|
||||
endpointCredentials: photoview-postgresql-17-cluster-backup-secret-garage
|
||||
endpointCredentialsIncludeRegion: true
|
||||
retentionPolicy: "3d"
|
||||
isWALArchiver: true
|
||||
# - name: garage-remote
|
||||
# destinationPath: s3://postgres-backups/cl01tl/photoview/photoview-postgresql-17-cluster
|
||||
# index: 1
|
||||
# endpointURL: https://garage-ps10rp.boreal-beaufort.ts.net:3900
|
||||
# endpointCredentials: photoview-postgresql-17-cluster-backup-secret-garage
|
||||
# retentionPolicy: "30d"
|
||||
# data:
|
||||
# compression: bzip2
|
||||
# jobs: 2
|
||||
scheduledBackups:
|
||||
- name: daily-backup
|
||||
suspend: false
|
||||
schedule: "0 0 0 * * *"
|
||||
backupName: external
|
||||
- name: live-backup
|
||||
suspend: false
|
||||
immediate: true
|
||||
schedule: "0 0 0 * * *"
|
||||
backupName: garage-local
|
||||
# - name: weekly-backup
|
||||
# suspend: false
|
||||
# schedule: "0 12 4 * * SAT"
|
||||
# backupName: garage-remote
|
||||
6
clusters/cl01tl/helm/plex/Chart.lock
Normal file
6
clusters/cl01tl/helm/plex/Chart.lock
Normal file
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: app-template
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
digest: sha256:a9d49fd723833cb90c635a612d40d4edd765879e56eab64c13a344a44356bf72
|
||||
generated: "2025-11-30T21:07:30.705444-06:00"
|
||||
26
clusters/cl01tl/helm/plex/Chart.yaml
Normal file
26
clusters/cl01tl/helm/plex/Chart.yaml
Normal file
@@ -0,0 +1,26 @@
|
||||
apiVersion: v2
|
||||
name: plex
|
||||
version: 1.0.0
|
||||
description: Plex
|
||||
keywords:
|
||||
- plex
|
||||
- tv shows
|
||||
- movies
|
||||
- music
|
||||
- photos
|
||||
- live tv
|
||||
home: https://wiki.alexlebens.dev/s/e2833eed-f991-4b00-9fa0-5d7f403a8183
|
||||
sources:
|
||||
- https://www.plex.tv/
|
||||
- https://github.com/linuxserver/docker-plex
|
||||
- https://github.com/linuxserver/docker-plex/pkgs/container/plex
|
||||
- https://github.com/bjw-s-labs/helm-charts/tree/main/charts/other/app-template
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
dependencies:
|
||||
- name: app-template
|
||||
alias: plex
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/plex.png
|
||||
appVersion: 1.41.6
|
||||
28
clusters/cl01tl/helm/plex/templates/http-route.yaml
Normal file
28
clusters/cl01tl/helm/plex/templates/http-route.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: gateway.networking.k8s.io/v1
|
||||
kind: HTTPRoute
|
||||
metadata:
|
||||
name: http-route-plex
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: http-route-plex
|
||||
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:
|
||||
- plex.alexlebens.net
|
||||
rules:
|
||||
- matches:
|
||||
- path:
|
||||
type: PathPrefix
|
||||
value: /
|
||||
backendRefs:
|
||||
- group: ''
|
||||
kind: Service
|
||||
name: plex
|
||||
port: 32400
|
||||
weight: 100
|
||||
@@ -0,0 +1,17 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: plex-nfs-storage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: plex-nfs-storage
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
volumeName: plex-nfs-storage
|
||||
storageClassName: nfs-client
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
23
clusters/cl01tl/helm/plex/templates/persistent-volume.yaml
Normal file
23
clusters/cl01tl/helm/plex/templates/persistent-volume.yaml
Normal file
@@ -0,0 +1,23 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: plex-nfs-storage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: plex-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
|
||||
61
clusters/cl01tl/helm/plex/values.yaml
Normal file
61
clusters/cl01tl/helm/plex/values.yaml
Normal file
@@ -0,0 +1,61 @@
|
||||
plex:
|
||||
controllers:
|
||||
main:
|
||||
type: deployment
|
||||
replicas: 1
|
||||
strategy: Recreate
|
||||
revisionHistoryLimit: 3
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: ghcr.io/linuxserver/plex
|
||||
tag: 1.42.2@sha256:ab81c7313fb5dc4d1f9562e5bbd5e5877a8a3c5ca6b9f9fff3437b5096a2b123
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: TZ
|
||||
value: US/Central
|
||||
- name: VERSION
|
||||
value: docker
|
||||
- name: PLEX_CLAIM
|
||||
value: claim-XmGK2o9x54PbCzQaqj-J
|
||||
resources:
|
||||
limits:
|
||||
gpu.intel.com/i915: 1
|
||||
requests:
|
||||
gpu.intel.com/i915: 1
|
||||
cpu: 10m
|
||||
memory: 512Mi
|
||||
service:
|
||||
main:
|
||||
controller: main
|
||||
type: LoadBalancer
|
||||
ports:
|
||||
http:
|
||||
port: 32400
|
||||
targetPort: 32400
|
||||
protocol: HTTP
|
||||
persistence:
|
||||
config:
|
||||
forceRename: plex-config
|
||||
storageClass: ceph-block
|
||||
accessMode: ReadWriteOnce
|
||||
size: 100Gi
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /config
|
||||
readOnly: false
|
||||
transcode:
|
||||
type: emptyDir
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /transcode
|
||||
readOnly: false
|
||||
media:
|
||||
existingClaim: plex-nfs-storage
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /mnt/store
|
||||
readOnly: true
|
||||
12
clusters/cl01tl/helm/postiz/Chart.lock
Normal file
12
clusters/cl01tl/helm/postiz/Chart.lock
Normal file
@@ -0,0 +1,12 @@
|
||||
dependencies:
|
||||
- name: app-template
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
- name: cloudflared
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
version: 1.23.0
|
||||
- name: postgres-cluster
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
version: 6.16.0
|
||||
digest: sha256:9a80f885ed38b0a6addd2c9be8ffa5670cd03f89ba86c821b6dd91d8ba370d2b
|
||||
generated: "2025-11-30T21:07:32.067121-06:00"
|
||||
32
clusters/cl01tl/helm/postiz/Chart.yaml
Normal file
32
clusters/cl01tl/helm/postiz/Chart.yaml
Normal file
@@ -0,0 +1,32 @@
|
||||
apiVersion: v2
|
||||
name: postiz
|
||||
version: 1.0.0
|
||||
description: Postiz
|
||||
keywords:
|
||||
- postiz
|
||||
- social-media
|
||||
home: https://wiki.alexlebens.dev/s/f483a06b-860b-423c-8d51-a1ce82e0fd43
|
||||
sources:
|
||||
- https://github.com/gitroomhq/postiz-app
|
||||
- https://github.com/cloudflare/cloudflared
|
||||
- https://github.com/cloudnative-pg/cloudnative-pg
|
||||
- https://github.com/gitroomhq/postiz-app/pkgs/container/postiz-app
|
||||
- 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/cloudflared
|
||||
- https://gitea.alexlebens.dev/alexlebens/helm-charts/src/branch/main/charts/postgres-cluster
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
dependencies:
|
||||
- name: app-template
|
||||
alias: postiz
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
- name: cloudflared
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
version: 1.23.0
|
||||
- name: postgres-cluster
|
||||
alias: postgres-17-cluster
|
||||
version: 6.16.0
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/postiz.png
|
||||
appVersion: v1.43.3
|
||||
292
clusters/cl01tl/helm/postiz/templates/external-secret.yaml
Normal file
292
clusters/cl01tl/helm/postiz/templates/external-secret.yaml
Normal file
@@ -0,0 +1,292 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: postiz-config-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: postiz-config-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: JWT_SECRET
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/postiz/config
|
||||
metadataPolicy: None
|
||||
property: JWT_SECRET
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: postiz-redis-config
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: postiz-redis-config
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: REDIS_URL
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/postiz/redis
|
||||
metadataPolicy: None
|
||||
property: REDIS_URL
|
||||
- secretKey: user
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/postiz/redis
|
||||
metadataPolicy: None
|
||||
property: user
|
||||
- secretKey: password
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/postiz/redis
|
||||
metadataPolicy: None
|
||||
property: password
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: postiz-oidc-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: postiz-oidc-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: client
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /authentik/oidc/postiz
|
||||
metadataPolicy: None
|
||||
property: client
|
||||
- secretKey: secret
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /authentik/oidc/postiz
|
||||
metadataPolicy: None
|
||||
property: secret
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: postiz-config-backup-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: postiz-config-backup-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
target:
|
||||
template:
|
||||
mergePolicy: Merge
|
||||
engineVersion: v2
|
||||
data:
|
||||
RESTIC_REPOSITORY: "{{ `{{ .BUCKET_ENDPOINT }}` }}/postiz/postiz-config"
|
||||
data:
|
||||
- secretKey: BUCKET_ENDPOINT
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: S3_BUCKET_ENDPOINT
|
||||
- secretKey: RESTIC_PASSWORD
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: RESTIC_PASSWORD
|
||||
- secretKey: AWS_DEFAULT_REGION
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: AWS_DEFAULT_REGION
|
||||
- secretKey: AWS_ACCESS_KEY_ID
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /digital-ocean/home-infra/volsync-backups
|
||||
metadataPolicy: None
|
||||
property: access_key
|
||||
- secretKey: AWS_SECRET_ACCESS_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /digital-ocean/home-infra/volsync-backups
|
||||
metadataPolicy: None
|
||||
property: secret_key
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: postiz-uploads-backup-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: postiz-uploads-backup-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
target:
|
||||
template:
|
||||
mergePolicy: Merge
|
||||
engineVersion: v2
|
||||
data:
|
||||
RESTIC_REPOSITORY: "{{ `{{ .BUCKET_ENDPOINT }}` }}/postiz/postiz-uploads"
|
||||
data:
|
||||
- secretKey: BUCKET_ENDPOINT
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: S3_BUCKET_ENDPOINT
|
||||
- secretKey: RESTIC_PASSWORD
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: RESTIC_PASSWORD
|
||||
- secretKey: AWS_DEFAULT_REGION
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: AWS_DEFAULT_REGION
|
||||
- secretKey: AWS_ACCESS_KEY_ID
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /digital-ocean/home-infra/volsync-backups
|
||||
metadataPolicy: None
|
||||
property: access_key
|
||||
- secretKey: AWS_SECRET_ACCESS_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /digital-ocean/home-infra/volsync-backups
|
||||
metadataPolicy: None
|
||||
property: secret_key
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: postiz-cloudflared-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: postiz-cloudflared-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: cf-tunnel-token
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cloudflare/tunnels/postiz
|
||||
metadataPolicy: None
|
||||
property: token
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: postiz-postgresql-17-cluster-backup-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: postiz-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
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: postiz-postgresql-17-cluster-backup-secret-garage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: postiz-postgresql-17-cluster-backup-secret-garage
|
||||
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: /garage/home-infra/postgres-backups
|
||||
metadataPolicy: None
|
||||
property: ACCESS_KEY_ID
|
||||
- secretKey: ACCESS_SECRET_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /garage/home-infra/postgres-backups
|
||||
metadataPolicy: None
|
||||
property: ACCESS_SECRET_KEY
|
||||
- secretKey: ACCESS_REGION
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /garage/home-infra/postgres-backups
|
||||
metadataPolicy: None
|
||||
property: ACCESS_REGION
|
||||
28
clusters/cl01tl/helm/postiz/templates/http-route.yaml
Normal file
28
clusters/cl01tl/helm/postiz/templates/http-route.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: gateway.networking.k8s.io/v1
|
||||
kind: HTTPRoute
|
||||
metadata:
|
||||
name: http-route-postiz
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: http-route-postiz
|
||||
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:
|
||||
- postiz.alexlebens.net
|
||||
rules:
|
||||
- matches:
|
||||
- path:
|
||||
type: PathPrefix
|
||||
value: /
|
||||
backendRefs:
|
||||
- group: ''
|
||||
kind: Service
|
||||
name: postiz
|
||||
port: 80
|
||||
weight: 100
|
||||
35
clusters/cl01tl/helm/postiz/templates/redis-replication.yaml
Normal file
35
clusters/cl01tl/helm/postiz/templates/redis-replication.yaml
Normal file
@@ -0,0 +1,35 @@
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: redis-replication-postiz
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: redis-replication-postiz
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
clusterSize: 3
|
||||
podSecurityContext:
|
||||
runAsUser: 1000
|
||||
fsGroup: 1000
|
||||
kubernetesConfig:
|
||||
image: quay.io/opstree/redis:v8.0.3
|
||||
imagePullPolicy: IfNotPresent
|
||||
redisSecret:
|
||||
name: postiz-redis-config
|
||||
key: password
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 128Mi
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
storageClassName: ceph-block
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
redisExporter:
|
||||
enabled: true
|
||||
image: quay.io/opstree/redis-exporter:v1.48.0
|
||||
@@ -0,0 +1,52 @@
|
||||
apiVersion: volsync.backube/v1alpha1
|
||||
kind: ReplicationSource
|
||||
metadata:
|
||||
name: postiz-config-backup-source
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: postiz-config-backup-source
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
sourcePVC: postiz-config
|
||||
trigger:
|
||||
schedule: 0 4 * * *
|
||||
restic:
|
||||
pruneIntervalDays: 7
|
||||
repository: postiz-config-backup-secret
|
||||
retain:
|
||||
hourly: 1
|
||||
daily: 3
|
||||
weekly: 2
|
||||
monthly: 2
|
||||
yearly: 4
|
||||
copyMethod: Snapshot
|
||||
storageClassName: ceph-block
|
||||
volumeSnapshotClassName: ceph-blockpool-snapshot
|
||||
|
||||
---
|
||||
apiVersion: volsync.backube/v1alpha1
|
||||
kind: ReplicationSource
|
||||
metadata:
|
||||
name: postiz-uploads-backup-source
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: postiz-uploads-backup-source
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
sourcePVC: postiz-uploads
|
||||
trigger:
|
||||
schedule: 0 4 * * *
|
||||
restic:
|
||||
pruneIntervalDays: 7
|
||||
repository: postiz-uploads-backup-secret
|
||||
retain:
|
||||
hourly: 1
|
||||
daily: 3
|
||||
weekly: 2
|
||||
monthly: 2
|
||||
yearly: 4
|
||||
copyMethod: Snapshot
|
||||
storageClassName: ceph-block
|
||||
volumeSnapshotClassName: ceph-blockpool-snapshot
|
||||
19
clusters/cl01tl/helm/postiz/templates/service-monitor.yaml
Normal file
19
clusters/cl01tl/helm/postiz/templates/service-monitor.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: ServiceMonitor
|
||||
metadata:
|
||||
name: redis-replication-postiz
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: redis-replication-postiz
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
redis-operator: "true"
|
||||
env: production
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
redis_setup_type: replication
|
||||
endpoints:
|
||||
- port: redis-exporter
|
||||
interval: 30s
|
||||
scrapeTimeout: 10s
|
||||
163
clusters/cl01tl/helm/postiz/values.yaml
Normal file
163
clusters/cl01tl/helm/postiz/values.yaml
Normal file
@@ -0,0 +1,163 @@
|
||||
postiz:
|
||||
controllers:
|
||||
main:
|
||||
type: deployment
|
||||
replicas: 1
|
||||
strategy: Recreate
|
||||
revisionHistoryLimit: 3
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: ghcr.io/gitroomhq/postiz-app
|
||||
tag: v2.8.3
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: MAIN_URL
|
||||
value: https://postiz.alexlebens.dev
|
||||
- name: FRONTEND_URL
|
||||
value: https://postiz.alexlebens.dev
|
||||
- name: NEXT_PUBLIC_BACKEND_URL
|
||||
value: https://postiz.alexlebens.dev/api
|
||||
- name: JWT_SECRET
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: postiz-config-secret
|
||||
key: JWT_SECRET
|
||||
- name: DATABASE_URL
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: postiz-postgresql-17-cluster-app
|
||||
key: uri
|
||||
- name: REDIS_URL
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: postiz-redis-config
|
||||
key: REDIS_URL
|
||||
- name: BACKEND_INTERNAL_URL
|
||||
value: http://localhost:3000
|
||||
- name: IS_GENERAL
|
||||
value: "true"
|
||||
- name: STORAGE_PROVIDER
|
||||
value: local
|
||||
- name: UPLOAD_DIRECTORY
|
||||
value: /uploads
|
||||
- name: NEXT_PUBLIC_UPLOAD_DIRECTORY
|
||||
value: /uploads
|
||||
- name: NEXT_PUBLIC_POSTIZ_OAUTH_DISPLAY_NAME
|
||||
value: Authentik
|
||||
- name: NEXT_PUBLIC_POSTIZ_OAUTH_LOGO_URL
|
||||
value: https://cdn.jsdelivr.net/gh/selfhst/icons/png/authentik.png
|
||||
- name: POSTIZ_GENERIC_OAUTH
|
||||
value: "true"
|
||||
- name: POSTIZ_OAUTH_URL
|
||||
value: https://auth.alexlebens.dev
|
||||
- name: POSTIZ_OAUTH_AUTH_URL
|
||||
value: https://auth.alexlebens.dev/application/o/authorize/
|
||||
- name: POSTIZ_OAUTH_TOKEN_URL
|
||||
value: https://auth.alexlebens.dev/application/o/token/
|
||||
- name: POSTIZ_OAUTH_USERINFO_URL
|
||||
value: https://auth.alexlebens.dev/application/o/userinfo/
|
||||
- name: POSTIZ_OAUTH_CLIENT_ID
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: postiz-oidc-secret
|
||||
key: client
|
||||
- name: POSTIZ_OAUTH_CLIENT_SECRET
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: postiz-oidc-secret
|
||||
key: secret
|
||||
- name: POSTIZ_OAUTH_SCOPE
|
||||
value: openid profile email
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 128Mi
|
||||
service:
|
||||
main:
|
||||
controller: main
|
||||
ports:
|
||||
http:
|
||||
port: 80
|
||||
targetPort: 5000
|
||||
protocol: HTTP
|
||||
persistence:
|
||||
config:
|
||||
storageClass: ceph-block
|
||||
accessMode: ReadWriteOnce
|
||||
size: 2Gi
|
||||
retain: true
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /config
|
||||
readOnly: false
|
||||
uploads:
|
||||
storageClass: ceph-block
|
||||
accessMode: ReadWriteOnce
|
||||
size: 10Gi
|
||||
retain: true
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /uploads
|
||||
readOnly: false
|
||||
cloudflared:
|
||||
name: cloudflared-postiz
|
||||
existingSecretName: postiz-cloudflared-secret
|
||||
postgres-17-cluster:
|
||||
mode: recovery
|
||||
cluster:
|
||||
storage:
|
||||
storageClass: local-path
|
||||
walStorage:
|
||||
storageClass: local-path
|
||||
monitoring:
|
||||
enabled: true
|
||||
prometheusRule:
|
||||
enabled: true
|
||||
recovery:
|
||||
method: objectStore
|
||||
objectStore:
|
||||
destinationPath: s3://postgres-backups/cl01tl/postiz/postiz-postgresql-17-cluster
|
||||
endpointURL: http://garage-main.garage:3900
|
||||
index: 1
|
||||
endpointCredentials: postiz-postgresql-17-cluster-backup-secret-garage
|
||||
backup:
|
||||
objectStore:
|
||||
- name: external
|
||||
destinationPath: s3://postgres-backups-ce540ddf106d186bbddca68a/cl01tl/postiz/postiz-postgresql-17-cluster
|
||||
index: 2
|
||||
retentionPolicy: "30d"
|
||||
isWALArchiver: false
|
||||
- name: garage-local
|
||||
destinationPath: s3://postgres-backups/cl01tl/postiz/postiz-postgresql-17-cluster
|
||||
index: 1
|
||||
endpointURL: http://garage-main.garage:3900
|
||||
endpointCredentials: postiz-postgresql-17-cluster-backup-secret-garage
|
||||
endpointCredentialsIncludeRegion: true
|
||||
retentionPolicy: "3d"
|
||||
isWALArchiver: true
|
||||
# - name: garage-remote
|
||||
# destinationPath: s3://postgres-backups/cl01tl/postiz/postiz-postgresql-17-cluster
|
||||
# index: 1
|
||||
# endpointURL: https://garage-ps10rp.boreal-beaufort.ts.net:3900
|
||||
# endpointCredentials: postiz-postgresql-17-cluster-backup-secret-garage
|
||||
# retentionPolicy: "30d"
|
||||
# data:
|
||||
# compression: bzip2
|
||||
# jobs: 2
|
||||
scheduledBackups:
|
||||
- name: daily-backup
|
||||
suspend: false
|
||||
schedule: "0 0 0 * * *"
|
||||
backupName: external
|
||||
- name: live-backup
|
||||
suspend: false
|
||||
immediate: true
|
||||
schedule: "0 0 0 * * *"
|
||||
backupName: garage-local
|
||||
# - name: weekly-backup
|
||||
# suspend: false
|
||||
# schedule: "0 14 4 * * SAT"
|
||||
# backupName: garage-remote
|
||||
9
clusters/cl01tl/helm/roundcube/Chart.lock
Normal file
9
clusters/cl01tl/helm/roundcube/Chart.lock
Normal file
@@ -0,0 +1,9 @@
|
||||
dependencies:
|
||||
- name: app-template
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
- name: postgres-cluster
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
version: 6.16.0
|
||||
digest: sha256:bf4ddb79b0fa0e266d5c5a18e37508bd1e4eaac98ad8c373c4bb44dba4a17fd0
|
||||
generated: "2025-11-30T21:07:41.680426-06:00"
|
||||
27
clusters/cl01tl/helm/roundcube/Chart.yaml
Normal file
27
clusters/cl01tl/helm/roundcube/Chart.yaml
Normal file
@@ -0,0 +1,27 @@
|
||||
apiVersion: v2
|
||||
name: roundcube
|
||||
version: 1.0.0
|
||||
description: Roundcube
|
||||
keywords:
|
||||
- roundcube
|
||||
- email
|
||||
home: https://wiki.alexlebens.dev/s/68896660-74d8-4166-82bd-f7c282cdb08e
|
||||
sources:
|
||||
- https://github.com/roundcube/roundcubemail
|
||||
- https://github.com/cloudnative-pg/cloudnative-pg
|
||||
- https://hub.docker.com/r/roundcube/roundcubemail
|
||||
- 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: roundcube
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
- name: postgres-cluster
|
||||
alias: postgres-17-cluster
|
||||
version: 6.16.0
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/roundcube.png
|
||||
appVersion: 1.6.10
|
||||
145
clusters/cl01tl/helm/roundcube/templates/external-secret.yaml
Normal file
145
clusters/cl01tl/helm/roundcube/templates/external-secret.yaml
Normal file
@@ -0,0 +1,145 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: roundcube-key-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: roundcube-key-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: DES_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/roundcube/key
|
||||
metadataPolicy: None
|
||||
property: DES_KEY
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: roundcube-data-backup-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: roundcube-data-backup-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
target:
|
||||
template:
|
||||
mergePolicy: Merge
|
||||
engineVersion: v2
|
||||
data:
|
||||
RESTIC_REPOSITORY: "{{ `{{ .BUCKET_ENDPOINT }}` }}/roundcube/roundcube-data"
|
||||
data:
|
||||
- secretKey: BUCKET_ENDPOINT
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: S3_BUCKET_ENDPOINT
|
||||
- secretKey: RESTIC_PASSWORD
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: RESTIC_PASSWORD
|
||||
- secretKey: AWS_DEFAULT_REGION
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: AWS_DEFAULT_REGION
|
||||
- secretKey: AWS_ACCESS_KEY_ID
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /digital-ocean/home-infra/volsync-backups
|
||||
metadataPolicy: None
|
||||
property: access_key
|
||||
- secretKey: AWS_SECRET_ACCESS_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /digital-ocean/home-infra/volsync-backups
|
||||
metadataPolicy: None
|
||||
property: secret_key
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: roundcube-postgresql-17-cluster-backup-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: roundcube-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
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: roundcube-postgresql-17-cluster-backup-secret-garage
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: roundcube-postgresql-17-cluster-backup-secret-garage
|
||||
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: /garage/home-infra/postgres-backups
|
||||
metadataPolicy: None
|
||||
property: ACCESS_KEY_ID
|
||||
- secretKey: ACCESS_SECRET_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /garage/home-infra/postgres-backups
|
||||
metadataPolicy: None
|
||||
property: ACCESS_SECRET_KEY
|
||||
- secretKey: ACCESS_REGION
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /garage/home-infra/postgres-backups
|
||||
metadataPolicy: None
|
||||
property: ACCESS_REGION
|
||||
28
clusters/cl01tl/helm/roundcube/templates/http-route.yaml
Normal file
28
clusters/cl01tl/helm/roundcube/templates/http-route.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: gateway.networking.k8s.io/v1
|
||||
kind: HTTPRoute
|
||||
metadata:
|
||||
name: http-route-mail
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: http-route-mail
|
||||
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:
|
||||
- mail.alexlebens.net
|
||||
rules:
|
||||
- matches:
|
||||
- path:
|
||||
type: PathPrefix
|
||||
value: /
|
||||
backendRefs:
|
||||
- group: ''
|
||||
kind: Service
|
||||
name: roundcube
|
||||
port: 80
|
||||
weight: 100
|
||||
@@ -0,0 +1,25 @@
|
||||
apiVersion: volsync.backube/v1alpha1
|
||||
kind: ReplicationSource
|
||||
metadata:
|
||||
name: roundcube-data-backup-source
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: roundcube-data-backup-source
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
sourcePVC: roundcube-data
|
||||
trigger:
|
||||
schedule: 0 4 * * *
|
||||
restic:
|
||||
pruneIntervalDays: 7
|
||||
repository: roundcube-data-backup-secret
|
||||
retain:
|
||||
hourly: 1
|
||||
daily: 3
|
||||
weekly: 2
|
||||
monthly: 2
|
||||
yearly: 4
|
||||
copyMethod: Snapshot
|
||||
storageClassName: ceph-block
|
||||
volumeSnapshotClassName: ceph-blockpool-snapshot
|
||||
263
clusters/cl01tl/helm/roundcube/values.yaml
Normal file
263
clusters/cl01tl/helm/roundcube/values.yaml
Normal file
@@ -0,0 +1,263 @@
|
||||
roundcube:
|
||||
controllers:
|
||||
main:
|
||||
type: deployment
|
||||
replicas: 1
|
||||
strategy: Recreate
|
||||
revisionHistoryLimit: 3
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: roundcube/roundcubemail
|
||||
tag: 1.6.11-fpm-alpine
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: ROUNDCUBEMAIL_DB_TYPE
|
||||
value: pgsql
|
||||
- name: ROUNDCUBEMAIL_DB_HOST
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: roundcube-postgresql-17-cluster-app
|
||||
key: host
|
||||
- name: ROUNDCUBEMAIL_DB_NAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: roundcube-postgresql-17-cluster-app
|
||||
key: dbname
|
||||
- name: ROUNDCUBEMAIL_DB_USER
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: roundcube-postgresql-17-cluster-app
|
||||
key: user
|
||||
- name: ROUNDCUBEMAIL_DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: roundcube-postgresql-17-cluster-app
|
||||
key: password
|
||||
- name: ROUNDCUBEMAIL_DES_KEY
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: roundcube-key-secret
|
||||
key: DES_KEY
|
||||
- name: ROUNDCUBEMAIL_DEFAULT_HOST
|
||||
value: stalwart.stalwart
|
||||
- name: ROUNDCUBEMAIL_DEFAULT_PORT
|
||||
value: 143
|
||||
- name: ROUNDCUBEMAIL_SMTP_SERVER
|
||||
value: stalwart.stalwart
|
||||
- name: ROUNDCUBEMAIL_SMTP_PORT
|
||||
value: 25
|
||||
- name: ROUNDCUBEMAIL_SKIN
|
||||
value: elastic
|
||||
- name: ROUNDCUBEMAIL_PLUGINS
|
||||
value: archive,zipdownload,newmail_notifier
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 256Mi
|
||||
nginx:
|
||||
image:
|
||||
repository: nginx
|
||||
tag: 1.29.3-alpine
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: NGINX_HOST
|
||||
value: mail.alexlebens.net
|
||||
- name: NGINX_PHP_CGI
|
||||
value: roundcube.roundcube:9000
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 128Mi
|
||||
cleandb:
|
||||
type: cronjob
|
||||
cronjob:
|
||||
suspend: false
|
||||
concurrencyPolicy: Forbid
|
||||
timeZone: US/Central
|
||||
schedule: 30 4 * * *
|
||||
startingDeadlineSeconds: 90
|
||||
successfulJobsHistory: 3
|
||||
failedJobsHistory: 3
|
||||
backoffLimit: 3
|
||||
parallelism: 1
|
||||
containers:
|
||||
backup:
|
||||
image:
|
||||
repository: roundcube/roundcubemail
|
||||
tag: 1.6.11-fpm-alpine
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: ROUNDCUBEMAIL_DB_TYPE
|
||||
value: pgsql
|
||||
- name: ROUNDCUBEMAIL_DB_HOST
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: roundcube-postgresql-17-cluster-app
|
||||
key: host
|
||||
- name: ROUNDCUBEMAIL_DB_NAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: roundcube-postgresql-17-cluster-app
|
||||
key: dbname
|
||||
- name: ROUNDCUBEMAIL_DB_USER
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: roundcube-postgresql-17-cluster-app
|
||||
key: user
|
||||
- name: ROUNDCUBEMAIL_DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: roundcube-postgresql-17-cluster-app
|
||||
key: password
|
||||
- name: ROUNDCUBEMAIL_DES_KEY
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: roundcube-key-secret
|
||||
key: DES_KEY
|
||||
- name: ROUNDCUBEMAIL_DEFAULT_HOST
|
||||
value: tls://stalwart.stalwart
|
||||
- name: ROUNDCUBEMAIL_SMTP_SERVER
|
||||
value: tls://stalwart.stalwart
|
||||
- name: ROUNDCUBEMAIL_SKIN
|
||||
value: elastic
|
||||
- name: ROUNDCUBEMAIL_PLUGINS
|
||||
value: archive,zipdownload,newmail_notifier
|
||||
args:
|
||||
- bin/cleandb.sh
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 128Mi
|
||||
configMaps:
|
||||
config:
|
||||
enabled: true
|
||||
data:
|
||||
default.conf: |
|
||||
server {
|
||||
listen 80 default_server;
|
||||
server_name _;
|
||||
root /var/www/html;
|
||||
|
||||
location / {
|
||||
try_files $uri /index.php$is_args$args;
|
||||
}
|
||||
|
||||
location ~ \.php(/|$) {
|
||||
try_files $uri =404;
|
||||
fastcgi_pass roundcube:9000;
|
||||
fastcgi_read_timeout 300;
|
||||
proxy_read_timeout 300;
|
||||
fastcgi_split_path_info ^(.+\.php)(/.*)$;
|
||||
include fastcgi_params;
|
||||
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
|
||||
fastcgi_param DOCUMENT_ROOT $realpath_root;
|
||||
internal;
|
||||
}
|
||||
|
||||
client_max_body_size 6m;
|
||||
|
||||
error_log /var/log/nginx/error.log;
|
||||
access_log /var/log/nginx/access.log;
|
||||
}
|
||||
service:
|
||||
main:
|
||||
controller: main
|
||||
ports:
|
||||
mail:
|
||||
port: 9000
|
||||
targetPort: 9000
|
||||
protocol: HTTP
|
||||
web:
|
||||
port: 80
|
||||
targetPort: 80
|
||||
protocol: HTTP
|
||||
persistence:
|
||||
data:
|
||||
forceRename: roundcube-data
|
||||
storageClass: ceph-block
|
||||
accessMode: ReadWriteOnce
|
||||
size: 5Gi
|
||||
retain: true
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /var/www/html
|
||||
readOnly: false
|
||||
nginx:
|
||||
- path: /var/www/html
|
||||
readOnly: false
|
||||
temp:
|
||||
type: emptyDir
|
||||
advancedMounts:
|
||||
main:
|
||||
main:
|
||||
- path: /tmp/roundcube-temp
|
||||
readOnly: false
|
||||
config:
|
||||
enabled: true
|
||||
type: configMap
|
||||
name: roundcube-config
|
||||
advancedMounts:
|
||||
main:
|
||||
nginx:
|
||||
- path: /etc/nginx/conf.d/default.conf
|
||||
readOnly: true
|
||||
mountPropagation: None
|
||||
subPath: default.conf
|
||||
postgres-17-cluster:
|
||||
mode: recovery
|
||||
cluster:
|
||||
storage:
|
||||
storageClass: local-path
|
||||
walStorage:
|
||||
storageClass: local-path
|
||||
monitoring:
|
||||
enabled: true
|
||||
prometheusRule:
|
||||
enabled: true
|
||||
recovery:
|
||||
method: objectStore
|
||||
objectStore:
|
||||
destinationPath: s3://postgres-backups/cl01tl/roundcube/roundcube-postgresql-17-cluster
|
||||
endpointURL: http://garage-main.garage:3900
|
||||
index: 1
|
||||
endpointCredentials: roundcube-postgresql-17-cluster-backup-secret-garage
|
||||
backup:
|
||||
objectStore:
|
||||
- name: external
|
||||
destinationPath: s3://postgres-backups-ce540ddf106d186bbddca68a/cl01tl/roundcube/roundcube-postgresql-17-cluster
|
||||
index: 2
|
||||
retentionPolicy: "30d"
|
||||
isWALArchiver: false
|
||||
- name: garage-local
|
||||
destinationPath: s3://postgres-backups/cl01tl/roundcube/roundcube-postgresql-17-cluster
|
||||
index: 1
|
||||
endpointURL: http://garage-main.garage:3900
|
||||
endpointCredentials: roundcube-postgresql-17-cluster-backup-secret-garage
|
||||
endpointCredentialsIncludeRegion: true
|
||||
retentionPolicy: "3d"
|
||||
isWALArchiver: true
|
||||
# - name: garage-remote
|
||||
# destinationPath: s3://postgres-backups/cl01tl/roundcube/roundcube-postgresql-17-cluster
|
||||
# index: 1
|
||||
# endpointURL: https://garage-ps10rp.boreal-beaufort.ts.net:3900
|
||||
# endpointCredentials: roundcube-postgresql-17-cluster-backup-secret-garage
|
||||
# retentionPolicy: "30d"
|
||||
# data:
|
||||
# compression: bzip2
|
||||
# jobs: 2
|
||||
scheduledBackups:
|
||||
- name: daily-backup
|
||||
suspend: false
|
||||
schedule: "0 0 0 * * *"
|
||||
backupName: external
|
||||
- name: live-backup
|
||||
suspend: false
|
||||
immediate: true
|
||||
schedule: "0 0 0 * * *"
|
||||
backupName: garage-local
|
||||
# - name: weekly-backup
|
||||
# suspend: false
|
||||
# schedule: "0 24 4 * * SAT"
|
||||
# backupName: garage-remote
|
||||
6
clusters/cl01tl/helm/searxng/Chart.lock
Normal file
6
clusters/cl01tl/helm/searxng/Chart.lock
Normal file
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: app-template
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
digest: sha256:5dc774da528576893d9072f75d16e731851da85d056c6d3461d1f6ee353de2b0
|
||||
generated: "2025-11-30T21:07:43.174721-06:00"
|
||||
20
clusters/cl01tl/helm/searxng/Chart.yaml
Normal file
20
clusters/cl01tl/helm/searxng/Chart.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
apiVersion: v2
|
||||
name: searxng
|
||||
version: 1.0.0
|
||||
description: Searxng
|
||||
keywords:
|
||||
- searxng
|
||||
- search
|
||||
home: https://wiki.alexlebens.dev/s/6c6da68a-8725-4439-93c8-990ce824be54
|
||||
sources:
|
||||
- https://github.com/searxng/searxng
|
||||
- https://github.com/bjw-s-labs/helm-charts/tree/main/charts/other/app-template
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
dependencies:
|
||||
- name: app-template
|
||||
alias: searxng
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/searxng.png
|
||||
appVersion: 1.0.0
|
||||
85
clusters/cl01tl/helm/searxng/templates/external-secret.yaml
Normal file
85
clusters/cl01tl/helm/searxng/templates/external-secret.yaml
Normal file
@@ -0,0 +1,85 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: searxng-api-config-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: searxng-api-config-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: settings.yml
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/searxng/api/config
|
||||
metadataPolicy: None
|
||||
property: settings.yml
|
||||
- secretKey: limiter.toml
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/searxng/api/config
|
||||
metadataPolicy: None
|
||||
property: limiter.toml
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: searxng-browser-data-backup-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: searxng-browser-data-backup-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
target:
|
||||
template:
|
||||
mergePolicy: Merge
|
||||
engineVersion: v2
|
||||
data:
|
||||
RESTIC_REPOSITORY: "{{ `{{ .BUCKET_ENDPOINT }}` }}/searxng/searxng-browser-data"
|
||||
data:
|
||||
- secretKey: BUCKET_ENDPOINT
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: S3_BUCKET_ENDPOINT
|
||||
- secretKey: RESTIC_PASSWORD
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: RESTIC_PASSWORD
|
||||
- secretKey: AWS_DEFAULT_REGION
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/volsync/restic/config
|
||||
metadataPolicy: None
|
||||
property: AWS_DEFAULT_REGION
|
||||
- secretKey: AWS_ACCESS_KEY_ID
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /digital-ocean/home-infra/volsync-backups
|
||||
metadataPolicy: None
|
||||
property: access_key
|
||||
- secretKey: AWS_SECRET_ACCESS_KEY
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /digital-ocean/home-infra/volsync-backups
|
||||
metadataPolicy: None
|
||||
property: secret_key
|
||||
28
clusters/cl01tl/helm/searxng/templates/http-route.yaml
Normal file
28
clusters/cl01tl/helm/searxng/templates/http-route.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: gateway.networking.k8s.io/v1
|
||||
kind: HTTPRoute
|
||||
metadata:
|
||||
name: http-route-searxng
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: http-route-searxng
|
||||
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:
|
||||
- searxng.alexlebens.net
|
||||
rules:
|
||||
- matches:
|
||||
- path:
|
||||
type: PathPrefix
|
||||
value: /
|
||||
backendRefs:
|
||||
- group: ''
|
||||
kind: Service
|
||||
name: searxng-browser
|
||||
port: 80
|
||||
weight: 100
|
||||
@@ -0,0 +1,32 @@
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: redis-replication-searxng
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: redis-replication-searxng
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
clusterSize: 3
|
||||
podSecurityContext:
|
||||
runAsUser: 1000
|
||||
fsGroup: 1000
|
||||
kubernetesConfig:
|
||||
image: quay.io/opstree/redis:v8.0.3
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 128Mi
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
storageClassName: ceph-block
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
redisExporter:
|
||||
enabled: true
|
||||
image: quay.io/opstree/redis-exporter:v1.48.0
|
||||
@@ -0,0 +1,25 @@
|
||||
apiVersion: volsync.backube/v1alpha1
|
||||
kind: ReplicationSource
|
||||
metadata:
|
||||
name: searxng-browser-data-backup-source
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: searxng-browser-data-backup-source
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
sourcePVC: searxng-browser-data
|
||||
trigger:
|
||||
schedule: 0 4 * * *
|
||||
restic:
|
||||
pruneIntervalDays: 7
|
||||
repository: searxng-browser-data-backup-secret
|
||||
retain:
|
||||
hourly: 1
|
||||
daily: 3
|
||||
weekly: 2
|
||||
monthly: 2
|
||||
yearly: 4
|
||||
copyMethod: Snapshot
|
||||
storageClassName: ceph-block
|
||||
volumeSnapshotClassName: ceph-blockpool-snapshot
|
||||
19
clusters/cl01tl/helm/searxng/templates/service-monitor.yaml
Normal file
19
clusters/cl01tl/helm/searxng/templates/service-monitor.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: ServiceMonitor
|
||||
metadata:
|
||||
name: redis-replication-searxng
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: redis-replication-searxng
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
redis-operator: "true"
|
||||
env: production
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
redis_setup_type: replication
|
||||
endpoints:
|
||||
- port: redis-exporter
|
||||
interval: 30s
|
||||
scrapeTimeout: 10s
|
||||
113
clusters/cl01tl/helm/searxng/values.yaml
Normal file
113
clusters/cl01tl/helm/searxng/values.yaml
Normal file
@@ -0,0 +1,113 @@
|
||||
searxng:
|
||||
controllers:
|
||||
api:
|
||||
type: deployment
|
||||
replicas: 1
|
||||
strategy: Recreate
|
||||
revisionHistoryLimit: 3
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: searxng/searxng
|
||||
tag: latest@sha256:0124d32d77e0c7360d0b85f5d91882d1837e6ceb243c82e190f5d7e9f1401334
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: SEARXNG_BASE_URL
|
||||
value: http://searxng-api.searxng:8080
|
||||
- name: SEARXNG_QUERY_URL
|
||||
value: http://searxng-api.searxng:8080/search?q=<query>
|
||||
- name: SEARXNG_HOSTNAME
|
||||
value: searxng-api.searxng
|
||||
- name: UWSGI_WORKERS
|
||||
value: 4
|
||||
- name: UWSGI_THREADS
|
||||
value: 4
|
||||
- name: ENABLE_RAG_WEB_SEARCH
|
||||
value: true
|
||||
- name: RAG_WEB_SEARCH_ENGINE
|
||||
value: searxng
|
||||
- name: RAG_WEB_SEARCH_RESULT_COUNT
|
||||
value: 3
|
||||
- name: RAG_WEB_SEARCH_CONCURRENT_REQUESTS
|
||||
value: 10
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 256Mi
|
||||
browser:
|
||||
type: deployment
|
||||
replicas: 1
|
||||
strategy: Recreate
|
||||
revisionHistoryLimit: 3
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: searxng/searxng
|
||||
tag: latest@sha256:0124d32d77e0c7360d0b85f5d91882d1837e6ceb243c82e190f5d7e9f1401334
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: SEARXNG_BASE_URL
|
||||
value: https://searxng.alexlebens.net/
|
||||
- name: SEARXNG_QUERY_URL
|
||||
value: https://searxng.alexlebens.net/search?q=<query>
|
||||
- name: SEARXNG_HOSTNAME
|
||||
value: searxng.alexlebens.net
|
||||
- name: SEARXNG_REDIS_URL
|
||||
value: redis://redis-replication-searxng-master.searxng:6379/0
|
||||
- name: UWSGI_WORKERS
|
||||
value: 4
|
||||
- name: UWSGI_THREADS
|
||||
value: 4
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 256Mi
|
||||
service:
|
||||
api:
|
||||
controller: api
|
||||
ports:
|
||||
mail:
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
protocol: HTTP
|
||||
browser:
|
||||
controller: browser
|
||||
ports:
|
||||
mail:
|
||||
port: 80
|
||||
targetPort: 8080
|
||||
protocol: HTTP
|
||||
persistence:
|
||||
config:
|
||||
enabled: true
|
||||
type: secret
|
||||
name: searxng-api-config-secret
|
||||
advancedMounts:
|
||||
api:
|
||||
main:
|
||||
- path: /etc/searxng/settings.yml
|
||||
readOnly: true
|
||||
mountPropagation: None
|
||||
subPath: settings.yml
|
||||
- path: /etc/searxng/limiter.toml
|
||||
readOnly: true
|
||||
mountPropagation: None
|
||||
subPath: limiter.toml
|
||||
api-data:
|
||||
storageClass: ceph-block
|
||||
accessMode: ReadWriteOnce
|
||||
size: 5Gi
|
||||
advancedMounts:
|
||||
api:
|
||||
main:
|
||||
- path: /etc/searxng
|
||||
readOnly: false
|
||||
browser-data:
|
||||
storageClass: ceph-block
|
||||
accessMode: ReadWriteOnce
|
||||
size: 5Gi
|
||||
advancedMounts:
|
||||
browser:
|
||||
main:
|
||||
- path: /etc/searxng
|
||||
readOnly: false
|
||||
9
clusters/cl01tl/helm/site-documentation/Chart.lock
Normal file
9
clusters/cl01tl/helm/site-documentation/Chart.lock
Normal file
@@ -0,0 +1,9 @@
|
||||
dependencies:
|
||||
- name: app-template
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
- name: cloudflared
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
version: 1.23.0
|
||||
digest: sha256:5a7b3c34f9eb198ea91b40d341daaf28c5fe425e344d4d247a5592f742aaf760
|
||||
generated: "2025-11-30T21:07:44.522489-06:00"
|
||||
28
clusters/cl01tl/helm/site-documentation/Chart.yaml
Normal file
28
clusters/cl01tl/helm/site-documentation/Chart.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: v2
|
||||
name: site-documentation
|
||||
version: 1.0.0
|
||||
description: Site Documentation
|
||||
keywords:
|
||||
- site-documentation
|
||||
- astro
|
||||
home: https://wiki.alexlebens.dev/s/1c39adb6-e0c6-4b01-b71f-278631adf584
|
||||
sources:
|
||||
- https://github.com/alexlebens/site-documentation
|
||||
- https://github.com/withastro/astro
|
||||
- https://github.com/cloudflare/cloudflared
|
||||
- https://github.com/alexlebens/site-documentation/pkgs/container/site-documentation
|
||||
- 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/cloudflared
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
dependencies:
|
||||
- name: app-template
|
||||
alias: site-documentation
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
- name: cloudflared
|
||||
alias: cloudflared-site
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
version: 1.23.0
|
||||
icon: https://d21zlbwtcn424f.cloudfront.net/logo-new-round.png
|
||||
appVersion: 0.8.1
|
||||
@@ -0,0 +1,21 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: site-documentation-cloudflared-api-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: site-documentation-cloudflared-api-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: cf-tunnel-token
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cloudflare/tunnels/site-documentation
|
||||
metadataPolicy: None
|
||||
property: token
|
||||
30
clusters/cl01tl/helm/site-documentation/values.yaml
Normal file
30
clusters/cl01tl/helm/site-documentation/values.yaml
Normal file
@@ -0,0 +1,30 @@
|
||||
site-documentation:
|
||||
global:
|
||||
fullnameOverride: site-documentation
|
||||
controllers:
|
||||
main:
|
||||
type: deployment
|
||||
replicas: 3
|
||||
strategy: RollingUpdate
|
||||
revisionHistoryLimit: 3
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: harbor.alexlebens.net/images/site-documentation
|
||||
tag: 0.0.3
|
||||
pullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 128Mi
|
||||
service:
|
||||
main:
|
||||
controller: main
|
||||
ports:
|
||||
http:
|
||||
port: 80
|
||||
targetPort: 4321
|
||||
protocol: HTTP
|
||||
cloudflared-site:
|
||||
name: cloudflared-site
|
||||
existingSecretName: site-documentation-cloudflared-api-secret
|
||||
9
clusters/cl01tl/helm/site-profile/Chart.lock
Normal file
9
clusters/cl01tl/helm/site-profile/Chart.lock
Normal file
@@ -0,0 +1,9 @@
|
||||
dependencies:
|
||||
- name: app-template
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
- name: cloudflared
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
version: 1.23.0
|
||||
digest: sha256:2894c66ba8f97a04b37305fc59a8ef376ef7b8ac20280851d6b86f18af6f5a47
|
||||
generated: "2025-11-30T21:07:46.422263-06:00"
|
||||
28
clusters/cl01tl/helm/site-profile/Chart.yaml
Normal file
28
clusters/cl01tl/helm/site-profile/Chart.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: v2
|
||||
name: site-profile
|
||||
version: 1.0.0
|
||||
description: Site Profile
|
||||
keywords:
|
||||
- site-profile
|
||||
- astro
|
||||
home: https://wiki.alexlebens.dev/s/1c39adb6-e0c6-4b01-b71f-278631adf584
|
||||
sources:
|
||||
- https://github.com/alexlebens/site-profile
|
||||
- https://github.com/withastro/astro
|
||||
- https://github.com/cloudflare/cloudflared
|
||||
- https://github.com/alexlebens/site-profile/pkgs/container/site-profile
|
||||
- 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/cloudflared
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
dependencies:
|
||||
- name: app-template
|
||||
alias: site-profile
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
- name: cloudflared
|
||||
alias: cloudflared-site
|
||||
repository: oci://harbor.alexlebens.net/helm-charts
|
||||
version: 1.23.0
|
||||
icon: https://d21zlbwtcn424f.cloudfront.net/logo-new-round.png
|
||||
appVersion: 2.0.1
|
||||
@@ -0,0 +1,21 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: site-profile-cloudflared-api-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: site-profile-cloudflared-api-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: cf-tunnel-token
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cloudflare/tunnels/site-profile
|
||||
metadataPolicy: None
|
||||
property: token
|
||||
30
clusters/cl01tl/helm/site-profile/values.yaml
Normal file
30
clusters/cl01tl/helm/site-profile/values.yaml
Normal file
@@ -0,0 +1,30 @@
|
||||
site-profile:
|
||||
global:
|
||||
fullnameOverride: site-profile
|
||||
controllers:
|
||||
main:
|
||||
type: deployment
|
||||
replicas: 3
|
||||
strategy: RollingUpdate
|
||||
revisionHistoryLimit: 3
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: harbor.alexlebens.net/images/site-profile
|
||||
tag: 2.1.0
|
||||
pullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 128Mi
|
||||
service:
|
||||
main:
|
||||
controller: main
|
||||
ports:
|
||||
http:
|
||||
port: 80
|
||||
targetPort: 4321
|
||||
protocol: HTTP
|
||||
cloudflared-site:
|
||||
name: cloudflared-site
|
||||
existingSecretName: site-profile-cloudflared-api-secret
|
||||
6
clusters/cl01tl/helm/slskd/Chart.lock
Normal file
6
clusters/cl01tl/helm/slskd/Chart.lock
Normal file
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: app-template
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
digest: sha256:4ab38a9fe2d034c69b543086c90de898957d35a9f662715a3f4de30864486123
|
||||
generated: "2025-11-30T21:07:47.912262-06:00"
|
||||
25
clusters/cl01tl/helm/slskd/Chart.yaml
Normal file
25
clusters/cl01tl/helm/slskd/Chart.yaml
Normal file
@@ -0,0 +1,25 @@
|
||||
apiVersion: v2
|
||||
name: slskd
|
||||
version: 1.0.0
|
||||
description: slskd
|
||||
keywords:
|
||||
- slskd
|
||||
- soularr
|
||||
- lidarr
|
||||
- music
|
||||
home: https://wiki.alexlebens.dev/s/ea931f86-1e70-480c-8002-64380b267cd7
|
||||
sources:
|
||||
- https://github.com/slskd/slskd
|
||||
- https://github.com/mrusse/soularr
|
||||
- https://hub.docker.com/r/slskd/slskd
|
||||
- https://hub.docker.com/r/mrusse08/soularr
|
||||
- https://github.com/bjw-s-labs/helm-charts/tree/main/charts/other/app-template
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
dependencies:
|
||||
- name: app-template
|
||||
alias: slskd
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/slskd.png
|
||||
appVersion: 0.22.5
|
||||
67
clusters/cl01tl/helm/slskd/templates/external-secret.yaml
Normal file
67
clusters/cl01tl/helm/slskd/templates/external-secret.yaml
Normal file
@@ -0,0 +1,67 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: slskd-config-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: slskd-config-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: slskd.yml
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/slskd/config
|
||||
metadataPolicy: None
|
||||
property: slskd.yml
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: soularr-config-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: soularr-config-secret
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: config.ini
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /cl01tl/slskd/soularr
|
||||
metadataPolicy: None
|
||||
property: config.ini
|
||||
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: slskd-wireguard-conf
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: slskd-wireguard-conf
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: vault
|
||||
data:
|
||||
- secretKey: private-key
|
||||
remoteRef:
|
||||
conversionStrategy: Default
|
||||
decodingStrategy: None
|
||||
key: /protonvpn/conf/cl01tl
|
||||
metadataPolicy: None
|
||||
property: private-key
|
||||
28
clusters/cl01tl/helm/slskd/templates/http-route.yaml
Normal file
28
clusters/cl01tl/helm/slskd/templates/http-route.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: gateway.networking.k8s.io/v1
|
||||
kind: HTTPRoute
|
||||
metadata:
|
||||
name: http-route-slskd
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/name: http-route-slskd
|
||||
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:
|
||||
- slskd.alexlebens.net
|
||||
rules:
|
||||
- matches:
|
||||
- path:
|
||||
type: PathPrefix
|
||||
value: /
|
||||
backendRefs:
|
||||
- group: ''
|
||||
kind: Service
|
||||
name: slskd
|
||||
port: 5030
|
||||
weight: 100
|
||||
11
clusters/cl01tl/helm/slskd/templates/namespace.yaml
Normal file
11
clusters/cl01tl/helm/slskd/templates/namespace.yaml
Normal file
@@ -0,0 +1,11 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: slskd
|
||||
labels:
|
||||
app.kubernetes.io/name: slskd
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
pod-security.kubernetes.io/audit: privileged
|
||||
pod-security.kubernetes.io/enforce: privileged
|
||||
pod-security.kubernetes.io/warn: privileged
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user