Files
invoiceninja-docker/charts/invoiceninja/README.md
Ween Jiann 7238e521e6 Automatically set values for Nginx sub-chart based on install name (#370)
* Automatically set serverblock from IN chart

* Automatically set nginx PVC

* Bump chart version

* Upgrade dependencies

* Updated k8s test versions
2021-07-07 04:19:03 +08:00

23 KiB

Invoice Ninja Helm Chart

This helm chart installs Invoice Ninja (IN) and its dependencies into a running Kubernetes cluster.

The chart installs the Invoice Ninja docker image.

Please read Upgrading section before upgrading MAJOR versions.

Dependencies

  • The Bitnami common helm chart
  • The Bitnami mariadb helm chart
  • The Bitnami nginx helm chart
  • The Bitnami redis helm chart
  • Tested on Kubernetes 1.19+

Installing the Chart

To install the chart with the release name invoiceninja:

helm repo add invoiceninja https://invoiceninja.github.io/dockerfiles
helm install invoiceninja invoiceninja/invoiceninja --set appKey=changeit --set mariadb.auth.rootPassword=changeit --set mariadb.auth.password=changeit --set redis.password=changeit

The command deploys Invoice Ninja on the Kubernetes cluster in the default namespace. The Parameters section lists the parameters that can be configured during installation.

Tip

: List all releases using helm list

Uninstalling the Chart

To uninstall/delete the invoiceninja deployment:

helm delete invoiceninja

The command removes all the Kubernetes components associated with the chart and deletes the release.

Parameters

The following table lists the configurable parameters of the Invoice Ninja chart and their default values.

NOTE: You MUST set any values that default to random or risk losing access after an upgrade. See how here

Global Configuration

The following table shows the configuration options for the Invoice Ninja helm chart:

Global parameters

Parameter Description Default
global.imageRegistry Global Docker image registry nil
global.imagePullSecrets Global Docker registry secret names as an array [] (does not add image pull secrets to deployed pods)
global.storageClass Global storage class for dynamic provisioning nil

Common parameters

Parameter Description Default
nameOverride String to partially override common.names.fullname nil
fullnameOverride String to fully override common.names.fullname nil
clusterDomain Default Kubernetes cluster domain cluster.local
commonLabels Labels to add to all deployed objects {}
commonAnnotations Annotations to add to all deployed objects {}
kubeVersion Force target Kubernetes version (using Helm capabilities if not set) nil
extraDeploy Array of extra objects to deploy with the release [] (evaluated as a template)

Invoice Ninja parameters

Parameter Description Default
image.registry Invoice Ninja image registry docker.io
image.repository Invoice Ninja image name invoiceninja/invoiceninja
image.tag Invoice Ninja image tag Check values.yaml file
image.pullPolicy Invoice Ninja image pull policy IfNotPresent
image.pullSecrets Specify docker-registry secret names as an array [] (does not add image pull secrets to deployed pods)
image.debug Specify if debug logs should be enabled false
serviceAccountName Name of a service account for the Invoice Ninja pods default
debug Turn on debug mode on Invoice Ninja false
appKey Laravel Application Key random 32 character alphanumeric string
userEmail Initial user email address admin@example.com
userPassword Initial user password changeme!
logChannel Name of log channel to use nil
broadcastDriver Name of broadcast driver to use nil
cacheDriver Name of cache driver to use nil
sessionDriver Name of session driver to use nil
queueConnection Name of queue connection to use nil
snappdf Use snappdf instead of Phantom JS PDF generation true
mailer Name of the mailer to use (log, smtp, etc.) log
requireHttps Force HTTPS for internal connections to Invoice Ninja (see #349) false
extraEnvVars Extra environment variables to be set on Invoice Ninja container {}
extraEnvVarsCM Name of existing ConfigMap containing extra env vars nil
extraEnvVarsSecret Name of existing Secret containing extra env vars nil
trustedProxy List of trusted proxies for Invoice Ninja to communicate with the nginx proxy '*'

Invoice Ninja deployment parameters

Parameter Description Default
replicaCount Number of Invoice Ninja Pods to run 1
containerPorts.fastcgi FastCGI port to expose at container level 9000
podSecurityContext Invoice Ninja pods' Security Context Check values.yaml file
containerSecurityContext Invoice Ninja containers' Security Context Check values.yaml file
resources The resources for the Invoice Ninja container {}
livenessProbe Liveness probe configuration for Invoice Ninja Check values.yaml file
readinessProbe Readiness probe configuration for Invoice Ninja Check values.yaml file
updateStrategy Set up update strategy RollingUpdate
podAntiAffinityPreset Pod anti-affinity preset. Ignored if affinity is set. Allowed values: soft or hard soft
nodeAffinityPreset.type Node affinity preset type. Ignored if affinity is set. Allowed values: soft or hard ""
nodeAffinityPreset.key Node label key to match. Ignored if affinity is set. ""
nodeAffinityPreset.values Node label values to match. Ignored if affinity is set. []
affinity Affinity for pod assignment {} (evaluated as a template)
nodeSelector Node labels for pod assignment {} (evaluated as a template)
tolerations Tolerations for pod assignment [] (evaluated as a template)
podLabels Extra labels for Invoice Ninja pods {}
podAnnotations Annotations for Invoice Ninja pods {}
extraVolumeMounts Additional volume mounts []
extraVolumes Additional volumes []

Volume Permissions parameters

Parameter Description Default
volumePermissions.enabled Enable init container that changes the owner and group of the persistent volume(s) mountpoint to runAsUser:fsGroup false
volumePermissions.image.registry Init container volume-permissions image registry docker.io
volumePermissions.image.repository Init container volume-permissions image name bitnami/bitnami-shell
volumePermissions.image.tag Init container volume-permissions image tag "10"
volumePermissions.image.pullPolicy Init container volume-permissions image pull policy Always
volumePermissions.image.pullSecrets Specify docker-registry secret names as an array [] (does not add image pull secrets to deployed pods)
volumePermissions.resources Init container volume-permissions resource {}

Exposure parameters

Parameter Description Default
service.type Kubernetes Service type ClusterIP
service.port Service FastCGI port 9000
service.nodePort Kubernetes FastCGI node port ""
service.clusterIP Invoice Ninja service clusterIP IP None
service.loadBalancerSourceRanges Restricts access for LoadBalancer (only with service.type: LoadBalancer) []
service.loadBalancerIP loadBalancerIP if service type is LoadBalancer nil
service.externalTrafficPolicy Enable client source IP preservation Cluster
service.annotations Service annotations {} (evaluated as a template)

Ingress parameters

Parameter Description Default
nginx.service.type Kubernetes Service type ClusterIP
nginx.ingress.enabled Enable ingress controller resource true
nginx.ingress.hostname Default host for the ingress resource invoiceninja.local
nginx.existingServerBlockConfigmap Custom NGINX server block config map {{ include "invoiceninja.nginx.serverBlockName" . }}
nginx.staticSitePVC Name of Invoice Ninja public PVC {{ include "invoiceninja.public.storageName" . }}

See Dependencies for more.

Persistence parameters

Parameter Description Default
persistence.public.enabled Enable persistence using PVC true
persistence.public.existingClaim Enable persistence using an existing PVC nil
persistence.public.storageClass PVC Storage Class nil
persistence.public.accessModes PVC Access Modes [ReadWriteMany]
persistence.public.size PVC Storage Request 1Gi
persistence.public.dataSource PVC data source {}
persistence.storage.enabled Enable persistence using PVC true
persistence.storage.existingClaim Enable persistence using an existing PVC nil
persistence.storage.storageClass PVC Storage Class nil
persistence.storage.accessModes PVC Access Modes [ReadWriteMany]
persistence.storage.size PVC Storage Request 5Gi
persistence.storage.dataSource PVC data source {}

Redis parameters

Parameter Description Default
redis.enabled If external redis is used, set it to false true
redis.password Redis password random 10 character alphanumeric string
redis.sentinel.enabled Enable sentinel containers true
redis.sentinel.usePassword Use password for sentinel containers false
externalRedis.host Host of the external redis nil
externalRedis.port Port of the external redis 6379
externalRedis.password Password for the external redis nil
externalRedis.sentinel Using sentinels false
externalRedis.databases.default Database to use by default 0
externalRedis.databases.cache Database to use by cache 1

See Dependencies for more.

Database parameters

Parameter Description Default
mariadb.enabled Deploy MariaDB container(s) true
mariadb.auth.rootPassword Password for the MariaDB root user random 10 character alphanumeric string
mariadb.auth.database Database name to create invoiceninja
mariadb.auth.username Database user to create invoiceninja
mariadb.auth.password Password for the database random 10 character alphanumeric string
externalDatabase.host Host of the external database nil
externalDatabase.user Existing username in the external db invoiceninja
externalDatabase.password Password for the above username nil
externalDatabase.database Name of the existing database invoiceninja
externalDatabase.port Database port number 3306
externalDatabase.existingSecret Name of the database existing Secret Object nil

See Dependencies for more.

Other parameters

Parameter Description Default
autoscaling.enabled Enable autoscaling for Invoice Ninja false
autoscaling.minReplicas Minimum number of Invoice Ninja replicas 1
autoscaling.maxReplicas Maximum number of Invoice Ninja replicas 11
autoscaling.targetCPU Target CPU utilization percentage nil
autoscaling.targetMemory Target Memory utilization percentage nil

Installing with Arguments

Specify each parameter using the --set key=value[,key=value] argument to helm install. For example,

helm install invoiceninja \
  --set appKey=changeit \
  --set replicaCount=3 \
  --set nginx.replicaCount=3 \
  --set redis.cluster.slaveCount=3 \
  --set redis.password=changeit \
  --set mariadb.auth.rootPassword=changeit \
  --set mariadb.auth.password=changeit \
  invoiceninja/invoiceninja

The above command sets the number of replicas to 3 for a highly available (HA) setup. Note that you would need to use an external DB such as MariaDB Galera for a full HA production setup.

Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example,

# values.yaml
appKey: changeit
replicaCount: 3
nginx:
  replicaCount: 3
redis:
  cluster:
    slaveCount: 3
  password: changeit
mariadb:
  auth:
    rootPassword: changeit
    password: changeit
helm install invoiceninja -f values.yaml invoiceninja/invoiceninja

Setting Environment Variables

Should you need to inject any environment variables such as those in here into the invoiceninja container, you can use the extraEnvVars option:

# ... values.yaml file
# In this example, we are setting the SMTP MAIL_HOST to be 'smtp.mailtrap.io'
extraEnvVars:
  - name: MAIL_HOST
    value: 'smtp.mailtrap.io' # all values must be strings, so other types must be surrounded in quotes

Alternatively you can provide the name of an existing configmap or secret object:

kubectl create configmap examplemap --from-literal=MAIL_HOST='smtp.mailtrap.io'
# ... values.yaml file
extraEnvVarsCM: examplemap

Upgrading

Nothing yet.