Skip to main content

Manifest

Use the bundled manifest when you want a small starting point and are comfortable managing ingress, auth wiring, and later customization yourself.

Apply the manifest

kubectl apply -f https://raw.githubusercontent.com/FabioTavernini/spendemon/main/deploy/spendemon.yaml

What it includes

The manifest creates:

  • a ConfigMap containing a starter settings.yaml
  • a PersistentVolumeClaim for persisted settings
  • a single-replica Deployment
  • a ClusterIP Service

How configuration works

The deployment mounts /data/settings.yaml and seeds it from the ConfigMap only if the file does not already exist on the PVC.

That means the manifest gives you a sensible first boot, then the persisted file becomes the source of truth.

After deployment, update the config in one of these ways:

  • open /settings in Spendemon and edit the file from the UI
  • edit the file on the mounted volume yourself

See Settings for the exact format.

What you still need to add

The bundled manifest intentionally stays minimal. You will usually still want to add:

  • your own Ingress or HTTPRoute
  • any production-ready resource requests and limits
  • your preferred namespace and labels
  • a spendemon-auth secret if you want authentication

Auth secret note

The plain manifest now includes an optional envFrom.secretRef for a secret named spendemon-auth.

If that secret does not exist, Spendemon simply starts without auth.

Local credentials

Create this secret for local username/password auth:

kubectl create secret generic spendemon-auth \
--from-literal=AUTH_MODE='credentials' \
--from-literal=NEXTAUTH_SECRET='replace-with-a-long-random-string' \
--from-literal=LOCAL_ADMIN_USERNAME='admin' \
--from-literal=LOCAL_ADMIN_PASSWORD_HASH='scrypt:7b91d3c5f6f6c8e0a6f2e1b4c5d6e7f8:6b1a5f8f0a7c4b6e6b667f6c2852e7416bfe2f521f3473df84c62fb4ef13a4dd9f32831f4a1dd4ec9e4b1f69aa389a6d2f31f2f5fd70888e387de0d7e47355d6'

You can also add viewer-only keys such as LOCAL_VIEWER_USERNAME and LOCAL_VIEWER_PASSWORD_HASH.

OIDC

For OIDC, keep oidc.enabled: true in settings.yaml and create the same spendemon-auth secret with:

kubectl create secret generic spendemon-auth \
--from-literal=NEXTAUTH_SECRET='replace-with-a-long-random-string' \
--from-literal=NEXTAUTH_URL='https://spendemon.example.com' \
--from-literal=OIDC_ISSUER='https://id.example.com/realms/spendemon' \
--from-literal=OIDC_CLIENT_ID='spendemon' \
--from-literal=OIDC_CLIENT_SECRET='replace-me'

If you want those pieces wired through Helm values instead, use the Helm install path.