This project provides a Helm chart for deploying Ghostfolio: the Open Source Wealth Management Software into any Kubernetes cluster. It integrates the official Docker images built by the Ghostfolio team and hosted on DockerHub. It also includes PostgreSQL and Redis servers that use the Bitnami charts, but it is easy to provide your own.
The charts are built and then published to these project GitHub Pages, allowing anyone to quickly deploy and test the application.
- Ghostfolio Helm Chart
- A Kubernetes cluster,
- A PostgreSQL server (optional),
- A Redis instance (optional),
- The Helm client installed locally (see Quickstart Guide),
- The
kubectlcommand-line tool installed locally (optionnal, see Install Tools)
Like any other Helm chart, the available configuration options can be found in the charts/ghostfolio/values.yaml configuration file. I recommend you to override any values in a dedicated ghostfolio.values.yaml file before deploying the chart:
-
Start by retrieving the chart default values:
helm show values charts/ghostfolio > ghostfolio.values.yaml -
Edit the
ghostfolio.values.yamlvalues, and specially the following ones:ghostfolio: # ACCESS_TOKEN_SALT and JWT_SECRET_KEY are auto-generated if left empty. # See section 1.2.1 for more options. ACCESS_TOKEN_SALT: "" JWT_SECRET_KEY: "" # For more information checkout: https://artifacthub.io/packages/helm/bitnami/postgresql postgresql: enabled: true auth: username: ghostfolio-user password: ghostfolio-password database: ghostfolio-db secretRef: name: "" # When defined, override the .postgresql.auth.username and .postgresql.auth.password keys usernameKey: "username" passwordKey: "password" # For more information checkout: https://artifacthub.io/packages/helm/bitnami/redis redis: enabled: true architecture: standalone auth: enabled: true password: redis-password secretRef: name: "" # When defined, override the .redis.auth.password key passwordKey: "password" ingress: enabled: true hosts: - host: ghostfolio.domain.tld paths: - path: / pathType: ImplementationSpecific
By default, ACCESS_TOKEN_SALT and JWT_SECRET_KEY are automatically generated (64-character random strings) on first install. They are preserved across upgrades — if the values are left empty and a secret already exists in the cluster, the existing values are reused.
You have three options:
-
Auto-generated (default): leave
ACCESS_TOKEN_SALTandJWT_SECRET_KEYempty.ghostfolio: ACCESS_TOKEN_SALT: "" JWT_SECRET_KEY: ""
-
Explicit values: provide your own strings.
ghostfolio: ACCESS_TOKEN_SALT: mysuperrandomstring JWT_SECRET_KEY: mysuperrandomstring
-
Existing secret: reference a pre-existing Kubernetes Secret (e.g. managed by ExternalSecrets, SealedSecrets, or Vault). When set, the chart does not create its own Secret resource. The existing secret must contain at least
ACCESS_TOKEN_SALTandJWT_SECRET_KEYkeys, plus all other keys the deployment expects (e.g.REDIS_HOST,POSTGRES_HOST, etc.).ghostfolio: existingSecret: my-ghostfolio-secret # Override key names if your secret uses different keys: # existingSecretAccessTokenSaltKey: ACCESS_TOKEN_SALT # existingSecretJwtSecretKeyKey: JWT_SECRET_KEY
By default, the chart deploys a PostgreSQL server via a subchart dependency. However, if want to use your own instance, you can set the following values:
postgresql:
enabled: false
externalPostgresql:
host: postgres.domain.tld
port: 5432
auth:
username: external-ghostfolio-user
password: external-ghostfolio-password
database: external-ghostfolio-db
secretRef:
name: "" # When defined, override the .postgresql.auth.username and .postgresql.auth.password keys
usernameKey: "username"
passwordKey: "password"
options: connect_timeout=300&sslmode=preferBy default, the chart deploys a Redis server via a subchart dependency. However, if want to use your own instance, you can set the following values:
redis:
enabled: false
externalRedis:
host: redis.domain.fqdn
port: 6379
auth:
enabled: false
password: ""
secretRef:
name: "" # When defined, override the .redis.auth.password key
passwordKey: "password"You can deploy additional Kubernetes resources alongside the chart by using the extraManifests value. Each entry is a raw Kubernetes manifest that is templated through Helm:
extraManifests:
- apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: ghostfolio-secrets
spec:
refreshInterval: 1h
secretStoreRef:
name: vault
kind: SecretStore
target:
name: ghostfolio-secrets
data:
- secretKey: ACCESS_TOKEN_SALT
remoteRef:
key: ghostfolio
property: access_token_salt
- secretKey: JWT_SECRET_KEY
remoteRef:
key: ghostfolio
property: jwt_secret_keyWhen using extraManifests to create a secret that holds ACCESS_TOKEN_SALT and JWT_SECRET_KEY, combine it with the existingSecret option:
ghostfolio:
existingSecret: ghostfolio-secrets
existingSecretAccessTokenSaltKey: ACCESS_TOKEN_SALT
existingSecretJwtSecretKeyKey: JWT_SECRET_KEYTo deploy the application using Helm, follow these steps:
helm repo add ghostfolio https://bythehugo.github.io/ghostfolio-helm/
helm repo updatehelm upgrade --install ghostfolio ghostfolio/ghostfolio -f ghostfolio.values.yamlYou can also install the chart directly from sources:
helm upgrade --install ghostfolio charts/ghostfolio -f ghostfolio.values.yamlIf you want to install a specific version of Ghostfolio, you must define the .image.tag key in the values.yaml file or directly inline:
helm upgrade --install --set "image.tag=3.0.1" ghostfolio ghostfolio/ghostfoliokubectl get all -l app=ghostfolioReplace with your target namespace if you specified one.
To uninstall the Helm chart and remove all associated resources from your Kubernetes cluster, follow these steps:
-
Identify the release name you used when installing the chart. If you haven't changed the release name, it may be the default or the one you specified during installation.
-
Run the following command to uninstall the release:
helm uninstall ghostfolio
-
Verify that the resources have been removed:
kubectl get all -l app=ghostfolio
This should return no resources related to the uninstalled release.
Note: If you used custom namespaces during installation, include the -n <namespace> flag in the commands:
helm uninstall ghostfolio -n <namespace>
kubectl get all -n <namespace> -l app=ghostfolioDistributed under the Apache 2.0 License. See LICENSE for more information.
Hugo CHUPIN - [email protected] - hugo.chupin.xyz - @hugo.chupin.xyz
Project link: https://github.com/ByTheHugo/ghostfolio-helm
