diff --git a/clusters/cl01tl/helm/blocky/values.yaml b/clusters/cl01tl/helm/blocky/values.yaml index d03e7d250..4c614b37a 100644 --- a/clusters/cl01tl/helm/blocky/values.yaml +++ b/clusters/cl01tl/helm/blocky/values.yaml @@ -160,6 +160,7 @@ blocky: sonarr IN CNAME traefik-cl01tl sonarr-4k IN CNAME traefik-cl01tl sonarr-anime IN CNAME traefik-cl01tl + sparkyfitness IN CNAME traefik-cl01tl stalwart IN CNAME traefik-cl01tl tdarr IN CNAME traefik-cl01tl tubearchivist IN CNAME traefik-cl01tl diff --git a/clusters/cl01tl/helm/gatus/values.yaml b/clusters/cl01tl/helm/gatus/values.yaml index b64c12496..906ac5401 100644 --- a/clusters/cl01tl/helm/gatus/values.yaml +++ b/clusters/cl01tl/helm/gatus/values.yaml @@ -155,8 +155,8 @@ gatus: - name: searxng url: https://searxng.alexlebens.net <<: *defaults - - name: roundcube - url: https://mail.alexlebens.net + - name: sparkyfitness + url: https://sparkyfitness.alexlebens.net <<: *defaults - name: paperless-ngx url: https://paperless-ngx.alexlebens.net @@ -212,6 +212,9 @@ gatus: - name: authentik url: https://authentik.alexlebens.net <<: *defaults + - name: roundcube + url: https://mail.alexlebens.net + <<: *defaults - name: stalwart url: https://stalwart.alexlebens.net <<: *defaults diff --git a/clusters/cl01tl/helm/homepage/values.yaml b/clusters/cl01tl/helm/homepage/values.yaml index 44e36bf32..18d6b9315 100644 --- a/clusters/cl01tl/helm/homepage/values.yaml +++ b/clusters/cl01tl/helm/homepage/values.yaml @@ -285,11 +285,11 @@ homepage: 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 + - Fitness Tracker: + icon: sh-sparkyfitness.webp + description: Sparky Fitness + href: https://sparkyfitness.alexlebens.net + siteMonitor: http://sparkyfitness-frontend.sparkyfitness:80 statusStyle: dot - Documents: icon: sh-paperless-ngx.webp @@ -487,7 +487,13 @@ homepage: href: https://authentik.alexlebens.net siteMonitor: http://authentik-server.authentik:80 statusStyle: dot - - Email: + - Email Client: + icon: sh-roundcube.webp + description: Roundcube + href: https://mail.alexlebens.net + siteMonitor: http://roundcube.roundcube:80 + statusStyle: dot + - Email Server: icon: sh-stalwart.webp description: Stalwart href: https://stalwart.alexlebens.net diff --git a/clusters/cl01tl/helm/sparkyfitness/Chart.lock b/clusters/cl01tl/helm/sparkyfitness/Chart.lock new file mode 100644 index 000000000..0a847908e --- /dev/null +++ b/clusters/cl01tl/helm/sparkyfitness/Chart.lock @@ -0,0 +1,12 @@ +dependencies: +- name: sparkyfitness + repository: oci://ghcr.io/codewithcj/charts + version: 0.16.5-7 +- name: postgres-cluster + repository: oci://harbor.alexlebens.net/helm-charts + version: 7.11.2 +- name: volsync-target + repository: oci://harbor.alexlebens.net/helm-charts + version: 0.8.0 +digest: sha256:cbe47d5c90cb22ba40b6de948b0a49733c6ce40b1be92555d5df3f0f1e610950 +generated: "2026-04-13T19:27:44.289967-05:00" diff --git a/clusters/cl01tl/helm/sparkyfitness/Chart.yaml b/clusters/cl01tl/helm/sparkyfitness/Chart.yaml new file mode 100644 index 000000000..d6b849861 --- /dev/null +++ b/clusters/cl01tl/helm/sparkyfitness/Chart.yaml @@ -0,0 +1,32 @@ +apiVersion: v2 +name: sparkyfitness +version: 1.0.0 +description: Sparky Fitness +keywords: + - sparky-fitness + - fitness-tracking +home: https://docs.alexlebens.dev/applications/sparkyfitness/ +sources: + - https://github.com/CodeWithCJ/SparkyFitness + - https://github.com/CodeWithCJ/SparkyFitness/pkgs/container/sparkyfitness-server + - https://github.com/CodeWithCJ/SparkyFitness/pkgs/container/sparkyfitness-frontend + - https://github.com/CodeWithCJ/SparkyFitness/tree/main/helm/chart + - https://gitea.alexlebens.dev/alexlebens/helm-charts/src/branch/main/charts/postgres-cluster + - https://gitea.alexlebens.dev/alexlebens/helm-charts/src/branch/main/charts/volsync-target +maintainers: + - name: alexlebens +dependencies: + - name: sparkyfitness + version: 0.16.5-7 + repository: oci://ghcr.io/codewithcj/charts + - name: postgres-cluster + alias: postgres-18-cluster + version: 7.11.2 + repository: oci://harbor.alexlebens.net/helm-charts + - name: volsync-target + alias: volsync-target-backup + version: 0.8.0 + repository: oci://harbor.alexlebens.net/helm-charts +icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/sparkyfitness.png +# renovate: datasource=github-releases depName=CodeWithCJ/SparkyFitness +appVersion: v0.16.5.7 diff --git a/clusters/cl01tl/helm/sparkyfitness/templates/external-secret.yaml b/clusters/cl01tl/helm/sparkyfitness/templates/external-secret.yaml new file mode 100644 index 000000000..c7521caf8 --- /dev/null +++ b/clusters/cl01tl/helm/sparkyfitness/templates/external-secret.yaml @@ -0,0 +1,46 @@ +apiVersion: external-secrets.io/v1 +kind: ExternalSecret +metadata: + name: sparkyfitness-key-secret + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: sparkyfitness-key-secret + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + secretStoreRef: + kind: ClusterSecretStore + name: vault + data: + - secretKey: api_encryption_key + remoteRef: + key: /cl01tl/sparkyfitness/key + property: api_encryption_key + - secretKey: better_auth_secret + remoteRef: + key: /cl01tl/sparkyfitness/key + property: better_auth_secret + +--- +apiVersion: external-secrets.io/v1 +kind: ExternalSecret +metadata: + name: sparkyfitness-oidc-secret + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: sparkyfitness-oidc-secret + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + secretStoreRef: + kind: ClusterSecretStore + name: vault + data: + - secretKey: client_id + remoteRef: + key: /authentik/oidc/sparkyfitness + property: client + - secretKey: client_secret + remoteRef: + key: /authentik/oidc/sparkyfitness + property: secret diff --git a/clusters/cl01tl/helm/sparkyfitness/values.yaml b/clusters/cl01tl/helm/sparkyfitness/values.yaml new file mode 100644 index 000000000..66afde6f3 --- /dev/null +++ b/clusters/cl01tl/helm/sparkyfitness/values.yaml @@ -0,0 +1,93 @@ +sparkyfitness: + config: + timezone: America/Chicago + allowPrivateNetworkCors: true + extraTrustedOrigins: https://sparkyfitness.alexlebens.net + oidc: + enabled: true + providerSlug: sparky-fitness + providerName: Authentik + issuerUrl: https://authentik.alexlebens.net + logoUrl: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/authentik.webp + secrets: + existingSecret: sparkyfitness-oidc-secret + httpRoute: + enabled: true + hostname: https://sparkyfitness.alexlebens.net + parentRef: + name: traefik-gateway + namespace: traefik + server: + image: + repository: ghcr.io/codewithcj/sparkyfitness-server + tag: v0.16.5.7@sha256:7cdb8cb3ae7f90c7590dac3b92cea3a8e24d51b28eb836a1f6d5201cd45bc080 + resources: + requests: + cpu: 100m + memory: 200Mi + limits: + cpu: null + memory: null + secrets: + generate: false + existingSecret: sparkyfitness-key-secret + appDatabase: + existingSecret: sparkyfitness-postgresql-18-cluster-app + persistence: + backup: + size: 5Gi + accessMode: ReadWriteOnce + storageClass: ceph-block + uploads: + size: 10Gi + accessMode: ReadWriteOnce + storageClass: ceph-block + frontend: + image: + repository: ghcr.io/codewithcj/sparkyfitness-server + tag: v0.16.5.7@sha256:c57a0a07b3470bd0c280d63d02b45adfe7360441b396e9bd445d7b0d22823356 + resources: + requests: + cpu: 10m + memory: 40Mi + limits: + cpu: null + memory: null + postgresql: + enabled: false + externalDatabase: + host: sparkyfitness-postgresql-18-cluster-rw + port: 5432 + database: app + auth: + existingSecret: sparkyfitness-postgresql-18-cluster-app +postgres-18-cluster: + mode: standalone + recovery: + method: objectStore + objectStore: + index: 1 + backup: + objectStore: + - name: garage-local + index: 1 + destinationBucket: postgres-backups + externalSecretCredentialPath: /garage/home-infra/postgres-backups + isWALArchiver: true + scheduledBackups: + - name: live-backup + suspend: false + immediate: true + schedule: "0 0 16 * * *" + backupName: garage-local +volsync-target-backup: + pvcTarget: sparkyfitness-server-backup + local: + enabled: true + schedule: 26 11 * * * + remote: + enabled: true + schedule: 26 12 * * * + external: + enabled: true + schedule: 26 13 * * * diff --git a/hosts/ps08rp/blocky/config.yml b/hosts/ps08rp/blocky/config.yml index e7d9c681b..40e63bc4c 100644 --- a/hosts/ps08rp/blocky/config.yml +++ b/hosts/ps08rp/blocky/config.yml @@ -137,6 +137,7 @@ customDNS: sonarr IN CNAME traefik-cl01tl sonarr-4k IN CNAME traefik-cl01tl sonarr-anime IN CNAME traefik-cl01tl + sparkyfitness IN CNAME traefik-cl01tl stalwart IN CNAME traefik-cl01tl tdarr IN CNAME traefik-cl01tl tubearchivist IN CNAME traefik-cl01tl diff --git a/hosts/ps09rp/blocky/config.yml b/hosts/ps09rp/blocky/config.yml index 4ff736220..8058549a4 100644 --- a/hosts/ps09rp/blocky/config.yml +++ b/hosts/ps09rp/blocky/config.yml @@ -158,6 +158,7 @@ customDNS: sonarr IN CNAME traefik-cl01tl sonarr-4k IN CNAME traefik-cl01tl sonarr-anime IN CNAME traefik-cl01tl + sparkyfitness IN CNAME traefik-cl01tl stalwart IN CNAME traefik-cl01tl tdarr IN CNAME traefik-cl01tl tubearchivist IN CNAME traefik-cl01tl