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
ConfigMapcontaining a startersettings.yaml - a
PersistentVolumeClaimfor persisted settings - a single-replica
Deployment - a
ClusterIPService
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
/settingsin 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
IngressorHTTPRoute - any production-ready resource requests and limits
- your preferred namespace and labels
- a
spendemon-authsecret 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.