* Automatically set serverblock from IN chart * Automatically set nginx PVC * Bump chart version * Upgrade dependencies * Updated k8s test versions
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.