add feat sparkyfitness via helm

This commit is contained in:
2026-05-26 11:52:19 +02:00
parent f82c66b8b3
commit 946da291ed
9 changed files with 290 additions and 0 deletions
+19
View File
@@ -0,0 +1,19 @@
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: sparkyfitness
namespace: flux-system
spec:
interval: 10m
path: ./clusters/homelab/apps/sparkyfitness
prune: true
sourceRef:
kind: GitRepository
name: flux-system
decryption:
provider: sops
secretRef:
name: sops-age
dependsOn:
- name: cnpg
- name: infrastructure
@@ -0,0 +1,35 @@
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: sparkyfitness-db
namespace: sparkyfitness
spec:
instances: 1
postgresql:
parameters:
shared_preload_libraries: "pg_stat_statements"
storage:
size: 8Gi
storageClass: longhorn
backup:
barmanObjectStore:
destinationPath: s3://cnpg-backups/sparkyfitness
endpointURL: http://192.168.2.107:9010
s3Credentials:
accessKeyId:
name: minio-cnpg-credentials
key: ACCESS_KEY_ID
secretAccessKey:
name: minio-cnpg-credentials
key: ACCESS_SECRET_KEY
retentionPolicy: "30d"
bootstrap:
initdb:
database: sparkyfitness
owner: sparky
postInitSQL:
- CREATE EXTENSION IF NOT EXISTS "uuid-ossp"
- CREATE EXTENSION IF NOT EXISTS "pgcrypto"
- CREATE EXTENSION IF NOT EXISTS "pg_stat_statements"
- ALTER USER sparky CREATEROLE
- GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO sparky WITH GRANT OPTION
@@ -0,0 +1,10 @@
apiVersion: postgresql.cnpg.io/v1
kind: ScheduledBackup
metadata:
name: sparkyfitness-db-backup
namespace: sparkyfitness
spec:
schedule: "0 3 * * *"
backupOwnerReference: self
cluster:
name: sparkyfitness-db
@@ -0,0 +1,76 @@
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: sparkyfitness
namespace: sparkyfitness
spec:
interval: 1h
chart:
spec:
chart: sparkyfitness
version: ">=0.1.0"
sourceRef:
kind: HelmRepository
name: sparkyfitness
namespace: sparkyfitness
interval: 12h
install:
remediation:
retries: 3
upgrade:
cleanupOnFail: true
remediation:
retries: 3
values:
postgresql:
enabled: false
externalDatabase:
host: sparkyfitness-db-rw.sparkyfitness.svc.cluster.local
port: 5432
database: sparkyfitness
auth:
existingSecret: sparkyfitness-db-secret
# keys: username, password
server:
secrets:
existingSecret: sparkyfitness-app-secret
# keys: api_encryption_key, better_auth_secret
appDatabase:
existingSecret: sparkyfitness-appdb-secret
# keys: username, password
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
frontend:
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 200m
memory: 128Mi
config:
garmin:
enabled: false
httpRoute:
enabled: true
hostname: sparkyfitness.net-scope.org # <-- anpassen
parentRef:
name: homelab-gateway # <-- ggf. anpassen
namespace: gateway
sectionName: https
ingress:
enabled: false
networkPolicy:
enabled: true
@@ -0,0 +1,9 @@
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
metadata:
name: sparkyfitness
namespace: sparkyfitness
spec:
type: oci
url: oci://ghcr.io/codewithcj/charts
interval: 12h
@@ -0,0 +1,10 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- namespace.yaml
- minio-secret.sops.yaml
- secret.sops.yaml
- cnpg-cluster.yaml
- cnpg-scheduledbackup.yaml
- helmrepository.yaml
- helmrelease.yaml
@@ -0,0 +1,28 @@
apiVersion: v1
kind: Secret
metadata:
name: minio-cnpg-credentials
namespace: sparkyfitness
stringData:
ACCESS_KEY_ID: ENC[AES256_GCM,data:QTyLZleYbt4hi/2ACqe4zmzJ6qw=,iv:9CI7SEsiT/dhvtOFj4e98W/v1cF8emHKdM3aY9RyoaU=,tag:EAba86iYBS3grwwMhdDkEw==,type:str]
ACCESS_SECRET_KEY: ENC[AES256_GCM,data:MovnfHfBplTEDZpaCzkiChQLkJV5w7+GqhcTUvARvwzQlEXeBtCnkQ==,iv:AogRUGsM93KNEO+pN6nzdAug7jsfojjXXbML6C5/LrM=,tag:6Pns/29t8/JemQVZVHYB/A==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age1rydfcalt7pu4jnmh298lgjlasxyjldyaz3xyssk7v54lpu30fv0qna96ea
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQV3hYdm5DR0h1SjFBeGZR
RjhVdFFKTURBZkg2dW1JY2R4Zmw1Y2Q0SlM4Ck5EWWlRZkR4N3k5TGFvYXRZNTR5
SFZnQ3BFOWsxSDFvVGpJQThZZ3BTYjgKLS0tIHoxVXM3dXFGbFFQSVZTVEpRaDNr
b29kUGo0Q2VwbTd6NkxPU2xoSStxWjgKO8ItEv2t2Zh/JHv0Nu4bR0EcpH2mErAq
7E01pJzc5e8B4oHJofZ5QP7MiPbDVx4KCgD0LREmG+MSIwwP0yfZVA==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-05-26T09:50:43Z"
mac: ENC[AES256_GCM,data:6oq9Y591KNzrrlaysijDtubKmUoHzVIGitFnzHAVcYq7e7BN6zNY5NhfST9YhJmMKVdrla5TqrgGDOBJQg2zQroGBbP4yD/gokenR+f1yPwVGdbcceEgN1TV8vzi1G3unREvhmV0QQWHQhIZPBIIYiUd/cI55ARAhx231NTbLXw=,iv:r7sjLEcJIZk2gCxEB5Q11LT37tw2ABuFbbmOY+ai938=,tag:Q1ZBhjmuskM2j8l/G76xUQ==,type:str]
pgp: []
encrypted_regex: ^(data|stringData)$
version: 3.9.4
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: sparkyfitness
@@ -0,0 +1,99 @@
apiVersion: v1
kind: Secret
metadata:
name: sparkyfitness-db-secret
namespace: sparkyfitness
stringData:
username: ENC[AES256_GCM,data:s5+BtLM=,iv:dTKvQbdYNNN4UlgJ7qDdooXGNWzBcrE6722LQR4S4b8=,tag:0HrGT2vIaY4GaQyNsSQSRA==,type:str]
password: ENC[AES256_GCM,data:0f8Q/Y/4DXc=,iv:QqQVUoOlNA+DtyrdkRrchvxgLH79CAAGVDcDRXJnYLY=,tag:eft8ZcpVGCRkD7qkN0fQEg==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age1rydfcalt7pu4jnmh298lgjlasxyjldyaz3xyssk7v54lpu30fv0qna96ea
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4aFJlM09ESFZSdmQyWHZN
NzlhVE80eDg3cFZJbzRJajAzOGtiNWhqeUVZCjAvaWh0ekZtcWNEcHZ5aHhnODRV
T3JPSFJxL3JKNk9oeDlGQnhQNFZrbzAKLS0tIHF2Rm9LVnhzYzRkVHRhd08zREdL
eEw0NzNiQWVhSXF1Q2xkZGRTOGhLalEKRu8XUE7qmaoyKOx/y+2h3/B4xzx2+toD
2y3ZVV5YDb266EfDQ/TyH0JyuNczw9F4nzWCHHP0NeCFQVJMSfl0og==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-05-26T09:47:34Z"
mac: ENC[AES256_GCM,data:igQwMXuNacNSeVlsy1GmFA//a9s+fa+qBdwlLvdbw2U1lcw2akgTGhjxolg4ACKU+K9RpM3hOxvwp8DOdLwRk/duHwlvVranOlLq7+lky8D3Ec4z/YBHAnLnF5F7pyEtEA7/vKf2q47yoUkxvoZfPn4XEIV+zVUUTt8jdJzHuY4=,iv:UR3NYMFO5LmI4gqwe6QhL1EPlavp5N14Tk6ggWEDTKI=,tag:V9zOZlt64NXdce86PAfDRA==,type:str]
pgp: []
encrypted_regex: ^(data|stringData)$
version: 3.9.4
---
apiVersion: v1
kind: Secret
metadata:
name: sparkyfitness-appdb-secret
namespace: sparkyfitness
stringData:
username: ENC[AES256_GCM,data:onGgewc=,iv:Nlf05QgJ3a3WiBbhz8RzYEs4J5SGGo6OXhZMq5+eFks=,tag:WHaCk2rS78ekJTXf4M7R0A==,type:str]
password: ENC[AES256_GCM,data:TnZcBesc7gI=,iv:YgDJ0LMgUgPgcXRagfMLdaeQIR7g7jy5pIS00fRUICM=,tag:hqkfmvev8UVOn8fBy0ocUA==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age1rydfcalt7pu4jnmh298lgjlasxyjldyaz3xyssk7v54lpu30fv0qna96ea
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4aFJlM09ESFZSdmQyWHZN
NzlhVE80eDg3cFZJbzRJajAzOGtiNWhqeUVZCjAvaWh0ekZtcWNEcHZ5aHhnODRV
T3JPSFJxL3JKNk9oeDlGQnhQNFZrbzAKLS0tIHF2Rm9LVnhzYzRkVHRhd08zREdL
eEw0NzNiQWVhSXF1Q2xkZGRTOGhLalEKRu8XUE7qmaoyKOx/y+2h3/B4xzx2+toD
2y3ZVV5YDb266EfDQ/TyH0JyuNczw9F4nzWCHHP0NeCFQVJMSfl0og==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-05-26T09:47:34Z"
mac: ENC[AES256_GCM,data:igQwMXuNacNSeVlsy1GmFA//a9s+fa+qBdwlLvdbw2U1lcw2akgTGhjxolg4ACKU+K9RpM3hOxvwp8DOdLwRk/duHwlvVranOlLq7+lky8D3Ec4z/YBHAnLnF5F7pyEtEA7/vKf2q47yoUkxvoZfPn4XEIV+zVUUTt8jdJzHuY4=,iv:UR3NYMFO5LmI4gqwe6QhL1EPlavp5N14Tk6ggWEDTKI=,tag:V9zOZlt64NXdce86PAfDRA==,type:str]
pgp: []
encrypted_regex: ^(data|stringData)$
version: 3.9.4
---
apiVersion: v1
kind: Secret
metadata:
name: sparkyfitness-app-secret
namespace: sparkyfitness
stringData:
api_encryption_key: ENC[AES256_GCM,data:Nu27yu/HVORcKHBaRGZ/f3TrliDDySrjKF7RiZHw9ruGebnV8Smtg8cpv570LDilcYr0zG3rXkgy7YHedQ6LkA==,iv:w482arFwsfqy99VxhaYn8FmL1/r5W41hQw7yfS41sas=,tag:oCGTkVohckPhXPvViEzoaA==,type:str]
better_auth_secret: ENC[AES256_GCM,data:YqFpjv+QMsEYtyDZQHEx4/cGPP5V1k2r9iynJqzeCMpnYeClMgUHUphlfUNumXJBBtDzMiG/uleViyXdka2qFQ==,iv:HP/zjHSjsx/i9SodTvTxtQP1t7u1sEyHlyVcn/RlVpY=,tag:fTAjB0JOj52/cHK8eLRnew==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age1rydfcalt7pu4jnmh298lgjlasxyjldyaz3xyssk7v54lpu30fv0qna96ea
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
-----END AGE ENCRYPTED FILE-----
pgp: []
encrypted_regex: ^(data|stringData)$
version: 3.9.4
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age1rydfcalt7pu4jnmh298lgjlasxyjldyaz3xyssk7v54lpu30fv0qna96ea
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4aFJlM09ESFZSdmQyWHZN
NzlhVE80eDg3cFZJbzRJajAzOGtiNWhqeUVZCjAvaWh0ekZtcWNEcHZ5aHhnODRV
T3JPSFJxL3JKNk9oeDlGQnhQNFZrbzAKLS0tIHF2Rm9LVnhzYzRkVHRhd08zREdL
eEw0NzNiQWVhSXF1Q2xkZGRTOGhLalEKRu8XUE7qmaoyKOx/y+2h3/B4xzx2+toD
2y3ZVV5YDb266EfDQ/TyH0JyuNczw9F4nzWCHHP0NeCFQVJMSfl0og==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-05-26T09:47:34Z"
mac: ENC[AES256_GCM,data:igQwMXuNacNSeVlsy1GmFA//a9s+fa+qBdwlLvdbw2U1lcw2akgTGhjxolg4ACKU+K9RpM3hOxvwp8DOdLwRk/duHwlvVranOlLq7+lky8D3Ec4z/YBHAnLnF5F7pyEtEA7/vKf2q47yoUkxvoZfPn4XEIV+zVUUTt8jdJzHuY4=,iv:UR3NYMFO5LmI4gqwe6QhL1EPlavp5N14Tk6ggWEDTKI=,tag:V9zOZlt64NXdce86PAfDRA==,type:str]
pgp: []
encrypted_regex: ^(data|stringData)$
version: 3.9.4