Compare commits

...

2 Commits

Author SHA1 Message Date
Ween Jiann
9f6e086633 Added Redis to Chart (#312)
* Added redis to chart

* Add snappdf config

* Updated configmap

* Updated appVersion
2021-03-29 22:20:33 +08:00
Ween Jiann
8df49feaf8 Update README.md 2021-03-29 00:54:57 +08:00
9 changed files with 280 additions and 34 deletions

View File

@@ -24,7 +24,7 @@ git clone https://github.com/invoiceninja/dockerfiles.git
cd dockerfiles cd dockerfiles
``` ```
Instead of defining our environment variables inside our docker-compose.yml file we now define this in the ```env``` file, open this file up and insert your APP_URL and your APP_KEY Instead of defining our environment variables inside our docker-compose.yml file we now define this in the `env` file, open this file up and insert your `APP_URL` and your `APP_KEY`
``` ```
APP_URL=http://in.localhost:8003/ APP_URL=http://in.localhost:8003/
@@ -39,32 +39,23 @@ DB_DATABASE1=ninja
PHANTOMJS_PDF_GENERATION=false PHANTOMJS_PDF_GENERATION=false
``` ```
The ```APP_KEY``` can be generated by running The `APP_KEY` can be generated by running
``` ```bash
docker run --rm -it invoiceninja/invoiceninja php artisan key:generate --show docker run --rm -it invoiceninja/invoiceninja php artisan key:generate --show
``` ```
Copy the entire string and insert in the env file at ```APP_KEY=base64....``` Copy the entire string and insert in the env file at `APP_KEY=base64....`
To ensure folder permissions are correct when the container comes up for the first time it is important that you set the correct folder permissions on the ```docker``` folder. To ensure folder permissions are correct when the container comes up for the first time it is important that you set the correct folder permissions on the `docker` folder.
From the terminal run From the terminal run
```sudo chown -R 1500:1500 docker/app```
## Updating the image when using `docker-compose`
As `docker-compose` does not support any form of version control, this git provide updates to `docker-compose.yml` directly.
To upgrade to a newer release image, please make sure to update the `docker-compose.yml` first by running
```bash ```bash
git pull chmod 755 docker/app/public
sudo chown -R 1500:1500 docker/app
``` ```
You may need to manually merge any changes that cannot be merged automatically by git.
### Note for people running the container locally on their PC ### ### Note for people running the container locally on their PC ###
If you are running the container locally, then the container will need to resolve the host, to support this you will want to insert your LAN IP address and the host name in the hosts file located in ```config/hosts``` If you are running the container locally, then the container will need to resolve the host, to support this you will want to insert your LAN IP address and the host name in the hosts file located in ```config/hosts```
@@ -84,6 +75,18 @@ All that is left to do now is bring up the container
**Note: When performing the setup, the Database host is ```db``` **Note: When performing the setup, the Database host is ```db```
## Updating the Image when using `docker-compose`
As `docker-compose` does not support any form of version control, this git provide updates to `docker-compose.yml` directly.
To upgrade to a newer release image, please make sure to update the `docker-compose.yml` first by running
```bash
git pull
```
You may need to manually merge any changes that cannot be merged automatically by git.
## Support ## Support
If you discover a bug, please create and issue, if you query is general in nature please visit us on our [Forum ](https://forum.invoiceninja.com/) If you discover a bug, please create and issue, if you query is general in nature please visit us on our [Forum ](https://forum.invoiceninja.com/)

View File

@@ -1,12 +1,15 @@
dependencies: dependencies:
- name: common - name: common
repository: https://charts.bitnami.com/bitnami repository: https://charts.bitnami.com/bitnami
version: 1.4.1 version: 1.4.2
- name: nginx - name: nginx
repository: https://charts.bitnami.com/bitnami repository: https://charts.bitnami.com/bitnami
version: 8.8.0 version: 8.8.0
- name: mariadb - name: mariadb
repository: https://charts.bitnami.com/bitnami repository: https://charts.bitnami.com/bitnami
version: 9.3.5 version: 9.3.6
digest: sha256:d809702ee601a8a0019defb9ee3fc5a5b5332968e1038cca8b44d5332b14a275 - name: redis
generated: "2021-03-23T00:33:02.690189+08:00" repository: https://charts.bitnami.com/bitnami
version: 12.9.0
digest: sha256:008659600506cbc8dd5c9b8e96ce81430e4d8582368646469aa17a37441f5bbc
generated: "2021-03-29T18:41:17.978475+08:00"

View File

@@ -13,11 +13,11 @@ type: application
# This is the chart version. This version number should be incremented each time you make changes # This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version. # to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/) # Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.0 version: 0.2.0
# This is the version number of the application being deployed. This version number should be # This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to # incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using. # follow Semantic Versioning. They should reflect the version the application is using.
appVersion: 5.1.30 appVersion: 5.1.32
keywords: keywords:
- invoiceninja - invoiceninja
home: https://github.com/lwj5/invoiceninja-chart home: https://github.com/lwj5/invoiceninja-chart
@@ -37,6 +37,10 @@ dependencies:
name: mariadb name: mariadb
repository: https://charts.bitnami.com/bitnami repository: https://charts.bitnami.com/bitnami
version: 9.3.x version: 9.3.x
- condition: redis.enabled
name: redis
repository: https://charts.bitnami.com/bitnami
version: 12.9.x
maintainers: maintainers:
- email: lwj5@hotmail.com - email: lwj5@hotmail.com
name: lwj5 name: lwj5

View File

@@ -78,6 +78,12 @@ The following table shows the configuration options for the Invoiceninja helm ch
| `serviceAccountName` | Name of a service account for the Invoiceninja pods | `default` | | `serviceAccountName` | Name of a service account for the Invoiceninja pods | `default` |
| `debug` | Turn on debug mode on Invoiceninja | `false` | | `debug` | Turn on debug mode on Invoiceninja | `false` |
| `appKey` | Laravel Application Key | _random 32 character alphanumeric string_ | | `appKey` | Laravel Application Key | _random 32 character alphanumeric string_ |
| `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` |
| `extraEnvVars` | Extra environment variables to be set on Invoiceninja container | `{}` | | `extraEnvVars` | Extra environment variables to be set on Invoiceninja container | `{}` |
| `extraEnvVarsCM` | Name of existing ConfigMap containing extra env vars | `nil` | | `extraEnvVarsCM` | Name of existing ConfigMap containing extra env vars | `nil` |
| `extraEnvVarsSecret` | Name of existing Secret containing extra env vars | `nil` | | `extraEnvVarsSecret` | Name of existing Secret containing extra env vars | `nil` |
@@ -150,15 +156,36 @@ The following table shows the configuration options for the Invoiceninja helm ch
| `persistence.storage.size` | PVC Storage Request | `5Gi` | | `persistence.storage.size` | PVC Storage Request | `5Gi` |
| `persistence.storage.dataSource` | PVC data source | `{}` | | `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 | `nil` |
| `redis.usePassword` | Use redis password | `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.databases.default` | Database to use by default | `0` |
| `externalRedis.databases.cache` | Database to use by cache | `1` |
> See [Dependencies](#dependencies) for more.
### Database parameters ### Database parameters
| Parameter | Description | Default | | Parameter | Description | Default |
| --------------------------- | ------------------------------------ | ----------------------------------------- | | --------------------------------- | ------------------------------------------- | ----------------------------------------- |
| `mariadb.enabled` | Deploy MariaDB container(s) | `true` | | `mariadb.enabled` | Deploy MariaDB container(s) | `true` |
| `mariadb.auth.rootPassword` | Password for the MariaDB `root` user | _random 10 character alphanumeric string_ | | `mariadb.auth.rootPassword` | Password for the MariaDB `root` user | _random 10 character alphanumeric string_ |
| `mariadb.auth.database` | Database name to create | `invoiceninja` | | `mariadb.auth.database` | Database name to create | `invoiceninja` |
| `mariadb.auth.username` | Database user to create | `invoiceninja` | | `mariadb.auth.username` | Database user to create | `invoiceninja` |
| `mariadb.auth.password` | Password for the database | _random 10 character alphanumeric string_ | | `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](#dependencies) for more. > See [Dependencies](#dependencies) for more.

View File

@@ -28,6 +28,15 @@ We truncate at 63 chars because some Kubernetes name fields are limited to this
{{- printf "%s-%s" .Release.Name "nginx" | trunc 63 | trimSuffix "-" -}} {{- printf "%s-%s" .Release.Name "nginx" | trunc 63 | trimSuffix "-" -}}
{{- end -}} {{- end -}}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
*/}}
{{- define "invoiceninja.redis.fullname" -}}
{{- printf "%s-%s" .Release.Name "redis" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/* {{/*
Create the name of the service account to use Create the name of the service account to use
*/}} */}}
@@ -125,3 +134,58 @@ Return the MariaDB Secret Name
{{- printf "%s" (include "invoiceninja.mariadb.fullname" .) -}} {{- printf "%s" (include "invoiceninja.mariadb.fullname" .) -}}
{{- end -}} {{- end -}}
{{- end -}} {{- end -}}
{{/*
Return the Redis Hostname
*/}}
{{- define "invoiceninja.redisHost" -}}
{{- if .Values.redis.enabled }}
{{- printf "%s-%s" (include "invoiceninja.redis.fullname" .) "master" | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s" .Values.externalRedis.host -}}
{{- end -}}
{{- end -}}
{{/*
Return the Redis Port
*/}}
{{- define "invoiceninja.redisPort" -}}
{{- if .Values.redis.enabled }}
{{- printf "6379" -}}
{{- else -}}
{{- printf "%d" (.Values.externalRedis.port | int ) -}}
{{- end -}}
{{- end -}}
{{/*
Return the Redis Database
*/}}
{{- define "invoiceninja.redisDatabase" -}}
{{- if .Values.redis.enabled }}
{{- printf "0" -}}
{{- else -}}
{{- printf "%s" .Values.externalRedis.databases.default -}}
{{- end -}}
{{- end -}}
{{/*
Return the Redis Database
*/}}
{{- define "invoiceninja.redisCacheDatabase" -}}
{{- if .Values.redis.enabled }}
{{- printf "1" -}}
{{- else -}}
{{- printf "%s" .Values.externalRedis.databases.cache -}}
{{- end -}}
{{- end -}}
{{/*
Return the Redis Secret Name
*/}}
{{- define "invoiceninja.redisSecretName" -}}
{{- if .Values.externalRedis.existingSecret -}}
{{- printf "%s" .Values.externalRedis.existingSecret -}}
{{- else -}}
{{- printf "%s" (include "invoiceninja.redis.fullname" .) -}}
{{- end -}}
{{- end -}}

View File

@@ -12,10 +12,41 @@ metadata:
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }} {{- end }}
data: data:
{{- if .Values.nginx.ingress.enabled }}
APP_URL: "http://{{ .Values.nginx.ingress.hostname }}/"
{{- else }}
APP_URL: "http://{{ include "common.names.fullname" . }}/" APP_URL: "http://{{ include "common.names.fullname" . }}/"
{{- end }}
APP_DEBUG: {{ .Values.debug | quote }} APP_DEBUG: {{ .Values.debug | quote }}
MULTI_DB_ENABLED: "false"
DB_HOST1: {{ include "invoiceninja.databaseHost" . | quote }} DB_HOST1: {{ include "invoiceninja.databaseHost" . | quote }}
DB_PORT1: {{ include "invoiceninja.databasePort" . | quote }} DB_PORT1: {{ include "invoiceninja.databasePort" . | quote }}
DB_USERNAME1: {{ include "invoiceninja.databaseUser" . | quote }} DB_USERNAME1: {{ include "invoiceninja.databaseUser" . | quote }}
DB_DATABASE1: {{ include "invoiceninja.databaseName" . | quote }} DB_DATABASE1: {{ include "invoiceninja.databaseName" . | quote }}
{{- if not (empty .Values.logChannel) }}
LOG_CHANNEL: {{ .Values.logChannel | quote }}
{{- end }}
{{- if not (empty .Values.broadcastDriver) }}
BROADCAST_DRIVER: {{ .Values.broadcastDriver | quote }}
{{- else if or .Values.redis.enabled (not (empty .Values.externalRedis.host)) }}
BROADCAST_DRIVER: redis
{{- end }}
{{- if not (empty .Values.cacheDriver) }}
CACHE_DRIVER: {{ .Values.cacheDriver | quote }}
{{- else if or .Values.redis.enabled (not (empty .Values.externalRedis.host)) }}
CACHE_DRIVER: redis
{{- end }}
{{- if not (empty .Values.sessionDriver) }}
SESSION_DRIVER: {{ .Values.sessionDriver | quote }}
{{- else if or .Values.redis.enabled (not (empty .Values.externalRedis.host)) }}
SESSION_DRIVER: redis
{{- end }}
{{- if not (empty .Values.queueConnection) }}
QUEUE_CONNECTION: {{ .Values.queueConnection | quote }}
{{- else if or .Values.redis.enabled (not (empty .Values.externalRedis.host)) }}
QUEUE_CONNECTION: redis
{{- end }}
PHANTOMJS_PDF_GENERATION: {{ not .Values.snappdf | quote}}
REDIS_HOST: {{ include "invoiceninja.redisHost" . | quote }}
REDIS_PORT: {{ include "invoiceninja.redisPort" . | quote }}
REDIS_DB: {{ include "invoiceninja.redisDatabase" . | quote }}
REDIS_CACHE_DB: {{ include "invoiceninja.redisCacheDatabase" . | quote }}

View File

@@ -54,6 +54,36 @@ spec:
{{- end }} {{- end }}
securityContext: securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }} {{- toYaml .Values.podSecurityContext | nindent 8 }}
initContainers:
- name: wait-db
image: {{ include "invoiceninja.image" . }}
imagePullPolicy: {{ .Values.image.pullPolicy }}
command:
- /bin/sh
- -cx
- |
COUNTER=0;
while [ $COUNTER -lt 120 ]; do
if mysqladmin ping -h "$DB_HOST1" -P $DB_PORT1 --silent; then
exit 0;
fi;
let COUNTER=COUNTER+1;
echo "Waiting for DB ($DB_HOST1:$DB_PORT1)"
sleep 2;
done;
echo "Did NOT see a database after 240 secs!";
exit 1;
securityContext:
{{- toYaml .Values.containerSecurityContext | nindent 12 }}
{{- if .Values.resources }}
resources: {{- toYaml .Values.resources | nindent 12 }}
{{- end }}
envFrom:
- configMapRef:
name: {{ include "common.names.fullname" . }}
{{- if .Values.initContainers }}
{{- include "common.tplvalues.render" (dict "value" .Values.initContainers "context" $) | nindent 8 }}
{{- end }}
containers: containers:
- name: {{ .Chart.Name }} - name: {{ .Chart.Name }}
securityContext: securityContext:
@@ -98,13 +128,18 @@ spec:
name: {{ include "common.tplvalues.render" (dict "value" .Values.extraEnvVarsSecret "context" $) }} name: {{ include "common.tplvalues.render" (dict "value" .Values.extraEnvVarsSecret "context" $) }}
{{- end }} {{- end }}
env: env:
- name: IS_DOCKER
value: "true"
- name: DB_PASSWORD1 - name: DB_PASSWORD1
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: {{ include "invoiceninja.databaseSecretName" . }} name: {{ include "invoiceninja.databaseSecretName" . }}
key: mariadb-password key: mariadb-password
{{- if not (and .Values.redis.enabled (not .Values.redis.usePassword)) }}
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: {{ include "invoiceninja.redisSecretName" . }}
key: redis-password
{{- end }}
{{- if .Values.extraEnvVars }} {{- if .Values.extraEnvVars }}
{{- include "common.tplvalues.render" (dict "value" .Values.extraEnvVars "context" $) | nindent 12 }} {{- include "common.tplvalues.render" (dict "value" .Values.extraEnvVars "context" $) | nindent 12 }}
{{- end }} {{- end }}

View File

@@ -16,6 +16,27 @@ type: Opaque
data: data:
mariadb-password: {{ .Values.externalDatabase.password | b64enc | quote }} mariadb-password: {{ .Values.externalDatabase.password | b64enc | quote }}
{{- end }} {{- end }}
---
{{- if not (or .Values.redis.enabled .Values.externalDatabase.existingSecret) }}
apiVersion: v1
kind: Secret
metadata:
name: {{ include "invoiceninja.redis.fullname" . }}
labels:
{{- include "common.labels.standard" $ | nindent 4 }}
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations:
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
type: Opaque
data:
redis-password: {{ .Values.externalRedis.password | b64enc | quote }}
{{- end }}
--- ---
apiVersion: v1 apiVersion: v1
kind: Secret kind: Secret

View File

@@ -18,7 +18,7 @@
image: image:
registry: docker.io registry: docker.io
repository: invoiceninja/invoiceninja repository: invoiceninja/invoiceninja
tag: 5.1.31 tag: 5.1.32
## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
## ##
@@ -38,6 +38,30 @@ debug: false
## ##
appKey: "" appKey: ""
## Name of log channel to use
##
logChannel: ""
## Name of broadcast driver to use
##
broadcastDriver: ""
## Name of cache driver to use
##
cacheDriver: ""
## Name of session driver to use
##
sessionDriver: ""
## Name of queue connection to use
##
queueConnection: ""
## Use local or Phantom JS PDF generation
##
snappdf: true
## String to partially override fullname template (will maintain the release name) ## String to partially override fullname template (will maintain the release name)
## ##
# nameOverride: # nameOverride:
@@ -306,6 +330,40 @@ autoscaling:
targetCPUUtilizationPercentage: 80 targetCPUUtilizationPercentage: 80
# targetMemoryUtilizationPercentage: 80 # targetMemoryUtilizationPercentage: 80
## Redis chart configuration
## ref: https://github.com/bitnami/charts/blob/master/bitnami/redis/values.yaml
##
redis:
enabled: true
usePassword: false
cluster:
enabled: false
## External Redis Configuration
##
## All of these values are only used when redis.enabled is set to false
##
externalRedis:
## Redis host
##
host: ""
## Redis port number
##
port: 6379
## Redis password
##
password: ""
## Use existing secret (ignores previous password)
## must contain key `redis-password`
## NOTE: When it's set, the `externalRedis.password` parameter is ignored
##
# existingSecret:
## Redis databases
##
databases:
default: "0"
cache: "1"
## MariaDB chart configuration ## MariaDB chart configuration
## ref: https://github.com/bitnami/charts/blob/master/bitnami/mariadb/values.yaml ## ref: https://github.com/bitnami/charts/blob/master/bitnami/mariadb/values.yaml
## ##
@@ -333,7 +391,7 @@ mariadb:
externalDatabase: externalDatabase:
## Database host ## Database host
## ##
host: localhost host: ""
## non-root Username for Invoiceninja Database ## non-root Username for Invoiceninja Database
## ##
user: invoiceninja user: invoiceninja