Install on Kubernetes
deploy/k8s/ in the repository holds plain manifests: a Deployment with a PersistentVolumeClaim mounted at /data, a Service on port 8765, an Ingress, and an example Secret with the settings. The Secret's example keeps the vaults in an S3 bucket; see Storage.
Copy the example Secret and fill it in. Make the master key with
mindin master-key generate, or withdocker run --rm ghcr.io/gronare/mindin:latest master-key generate.cp deploy/k8s/secret.example.yaml secret.yaml $EDITOR secret.yamlIt needs
VAULT_PUBLIC_URL,VAULT_HOSTED_MASTER_KEY, a sign-in method and the storage. Configuration lists every setting.In
deploy/k8s/ingress.yaml, setingressClassName, the host, andsecretNameto a TLS certificate for that host.Apply the manifests and invite yourself:
kubectl apply -f secret.yaml -f deploy/k8s/deployment.yaml -f deploy/k8s/service.yaml -f deploy/k8s/ingress.yaml kubectl exec deploy/notes-vault-mcp -- mindin accounts invite you@example.comOpen
VAULT_PUBLIC_URL/accountand sign in.
What the manifests set
- One pod. The Deployment runs one pod with the
Recreatestrategy, so the old pod stops before the new one starts. - Probes. Both hit
/.well-known/oauth-protected-resource/mcp, which answers without a token. WhenVAULT_PUBLIC_URLcarries a path, such as/vault, the probe path is/.well-known/oauth-protected-resource/vault/mcp. - Memory. The limit is 512 MiB, which is enough without search by meaning; Search by meaning needs more.
The server also answers two health routes, under the path of VAULT_PUBLIC_URL when it has one:
GET /upanswersokwhile the process serves.GET /readyanswers200when the account store answers, the storage is reachable and every readiness check an installed extension adds passes. Otherwise it answers503with a JSON body naming the checks that failed, such as{"ready": false, "failing": ["storage"]}. The built-in checks,account_storeandstorage, each look at most once every 5 seconds.
The image sets VAULT_AUTH_DIR=/data/auth and VAULT_CACHE_DIR=/data/cache. Back up /data/auth together with the master key; see Back up and rotate keys.
An Ingress controller that rewrites the Host header needs VAULT_ALLOWED_HOSTS.