Fix Redis password in Chart (#320)

* Fix NOTES.txt

* Added Redis password

* Updated README.md
This commit is contained in:
Ween Jiann
2021-04-07 22:42:42 +08:00
committed by GitHub
parent 11c8901fe4
commit b445cf0402
9 changed files with 64 additions and 38 deletions

View File

@@ -1,6 +1,8 @@
![Docker images](https://github.com/invoiceninja/dockerfiles/workflows/Docker%20images/badge.svg) ![Docker images](https://github.com/invoiceninja/dockerfiles/workflows/Docker%20images/badge.svg)
[![Docker image, latest](https://img.shields.io/docker/image-size/invoiceninja/invoiceninja/latest?label=latest)](https://hub.docker.com/r/invoiceninja/invoiceninja) [![Docker image, latest](https://img.shields.io/docker/image-size/invoiceninja/invoiceninja/latest?label=latest)](https://hub.docker.com/r/invoiceninja/invoiceninja)
[![Docker image, alpine](https://img.shields.io/docker/image-size/invoiceninja/invoiceninja/alpine?label=alpine)](https://hub.docker.com/r/invoiceninja/invoiceninja) [![Docker image, alpine](https://img.shields.io/docker/image-size/invoiceninja/invoiceninja/alpine?label=alpine)](https://hub.docker.com/r/invoiceninja/invoiceninja)
[![Artifact HUB](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/invoiceninja)](https://artifacthub.io/packages/search?repo=invoiceninja)
# Docker for [Invoice Ninja](https://www.invoiceninja.com/) # Docker for [Invoice Ninja](https://www.invoiceninja.com/)
@@ -8,14 +10,19 @@
:lock: Automatic HTTPS (:heart: [Caddy](https://caddyserver.com/)) :lock: Automatic HTTPS (:heart: [Caddy](https://caddyserver.com/))
:fire: NGINX webserver support [NGINX](https://nginx.org/) :fire: NGINX webserver support [NGINX](https://nginx.org/)
:hammer: Fully production-ready through docker-compose :hammer: Fully production-ready through Helm Chart
:pencil: Adjustable to your needs via environment variable :pencil: Adjustable to your needs via environment variable
## You want some Kubernetes + Helm with that? ## Get some Kubernetes + Helm with that!
[Helm Chat](https://github.com/Saddamus/invoiceninja-helm) by @Saddamus
[Kubernetes](https://github.com/invoiceninja/dockerfiles/issues/94) by @spacepluk
## Quickstart V5 Launch Introducing our very own [Helm Chart](https://github.com/invoiceninja/dockerfiles/tree/master/charts/invoiceninja) that helps you launch a simple standalone app to a production-ready, highly available Invoice Ninja setup. All you need to do is initialise Kubernetes (available with Docker Desktop), install [Helm](https://helm.sh/docs/intro/install/), and spin up Invoice Ninja using the steps provided [here](https://github.com/invoiceninja/dockerfiles/tree/master/charts/invoiceninja#installing-the-chart).
Other resources:
[Helm Chart](https://github.com/Saddamus/invoiceninja-helm) by @Saddamus
[K8s Manifest](https://github.com/invoiceninja/dockerfiles/issues/94) by @spacepluk
## Alternatively get started with Docker Compose
The dockerfile has been revamped to make it easier to get started, by default the base image selected is 5 which will pull in the latest v5 stable image. The dockerfile has been revamped to make it easier to get started, by default the base image selected is 5 which will pull in the latest v5 stable image.
@@ -79,7 +86,7 @@ All that is left to do now is bring up the container
When deploying on an ARM64 system, you need to comment out the `image: mysql:5` line and uncomment `image: mariadb:10.4` in the `docker-compose.yml` file. When deploying on an ARM64 system, you need to comment out the `image: mysql:5` line and uncomment `image: mariadb:10.4` in the `docker-compose.yml` file.
## Updating the Image when using `docker-compose` ### 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. As `docker-compose` does not support any form of version control, this git provide updates to `docker-compose.yml` directly.

View File

@@ -4,12 +4,12 @@ dependencies:
version: 1.4.2 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.1
- name: mariadb - name: mariadb
repository: https://charts.bitnami.com/bitnami repository: https://charts.bitnami.com/bitnami
version: 9.3.6 version: 9.3.6
- name: redis - name: redis
repository: https://charts.bitnami.com/bitnami repository: https://charts.bitnami.com/bitnami
version: 12.9.0 version: 12.9.2
digest: sha256:008659600506cbc8dd5c9b8e96ce81430e4d8582368646469aa17a37441f5bbc digest: sha256:fd3577637e412f553b3300f0c174ea7282073e0971da621d2f5c0e43b8f2fdfc
generated: "2021-03-29T18:41:17.978475+08:00" generated: "2021-04-07T20:59:19.568334+08:00"

View File

@@ -13,7 +13,7 @@ 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.3.0 version: 0.3.1
# 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.

View File

@@ -12,6 +12,7 @@ Please read [Upgrading](#upgrading) section before upgrading MAJOR versions.
- The Bitnami [common](https://github.com/bitnami/charts/tree/master/bitnami/common) helm chart - The Bitnami [common](https://github.com/bitnami/charts/tree/master/bitnami/common) helm chart
- The Bitnami [mariadb](https://github.com/bitnami/charts/tree/master/bitnami/mariadb) helm chart - The Bitnami [mariadb](https://github.com/bitnami/charts/tree/master/bitnami/mariadb) helm chart
- The Bitnami [nginx](https://github.com/bitnami/charts/tree/master/bitnami/nginx) helm chart - The Bitnami [nginx](https://github.com/bitnami/charts/tree/master/bitnami/nginx) helm chart
- The Bitnami [redis](https://github.com/bitnami/charts/tree/master/bitnami/redis) helm chart
- Tested on Kubernetes 1.17+ - Tested on Kubernetes 1.17+
## Installing the Chart ## Installing the Chart
@@ -41,6 +42,8 @@ The command removes all the Kubernetes components associated with the chart and
The following table lists the configurable parameters of the Invoiceninja chart and their default values. The following table lists the configurable parameters of the Invoiceninja 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](https://github.com/lwj5/dockerfiles/tree/redis-pw/charts/invoiceninja#installing-with-arguments)
### Global Configuration ### Global Configuration
The following table shows the configuration options for the Invoiceninja helm chart: The following table shows the configuration options for the Invoiceninja helm chart:
@@ -158,19 +161,18 @@ The following table shows the configuration options for the Invoiceninja helm ch
### Redis parameters ### Redis parameters
| Parameter | Description | Default | | Parameter | Description | Default |
| --------------------------------- | -------------------------------------------- | ------- | | --------------------------------- | -------------------------------------------- | ----------------------------------------- |
| `redis.enabled` | If external redis is used, set it to `false` | `true` | | `redis.enabled` | If external redis is used, set it to `false` | `true` |
| `redis.password` | Redis password | `nil` | | `redis.password` | Redis password | _random 10 character alphanumeric string_ |
| `redis.usePassword` | Use redis password | `false` | | `redis.sentinel.enabled` | Enable sentinel containers | `true` |
| `redis.sentinel.enabled` | Enable sentinel containers | `true` | | `redis.sentinel.usePassword` | Use password for sentinel containers | `false` |
| `redis.sentinel.usePassword` | Use password for sentinel containers | `false` | | `externalRedis.host` | Host of the external redis | `nil` |
| `externalRedis.host` | Host of the external redis | `nil` | | `externalRedis.port` | Port of the external redis | `6379` |
| `externalRedis.port` | Port of the external redis | `6379` | | `externalRedis.password` | Password for the external redis | `nil` |
| `externalRedis.password` | Password for the external redis | `nil` | | `externalRedis.sentinel` | Using sentinels | `false` |
| `externalRedis.sentinel` | Using sentinels | `false` | | `externalRedis.databases.default` | Database to use by default | `0` |
| `externalRedis.databases.default` | Database to use by default | `0` | | `externalRedis.databases.cache` | Database to use by cache | `1` |
| `externalRedis.databases.cache` | Database to use by cache | `1` |
> See [Dependencies](#dependencies) for more. > See [Dependencies](#dependencies) for more.
@@ -208,11 +210,17 @@ Specify each parameter using the `--set key=value[,key=value]` argument to `helm
```bash ```bash
helm install invoiceninja \ helm install invoiceninja \
--set replicaCount=3,livenessProbe.initialDelaySeconds=90 \ --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 invoiceninja/invoiceninja
``` ```
The above command sets the number of replicas to 4, and the liveness probe delay to 90 seconds. 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](https://helm.sh/docs/helm/helm_install/) the chart. For example, Alternatively, a YAML file that specifies the values for the parameters can be provided while [installing](https://helm.sh/docs/helm/helm_install/) the chart. For example,

View File

@@ -16,18 +16,18 @@ Externally through the following DNS name:
-- OR -- -- OR --
{{ end }} {{ end }}
{{- if contains "NodePort" .Values.service.type }} {{- if contains "NodePort" .Values.nginx.service.type }}
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "common.names.fullname" . }}) export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "invoiceninja.nginx.fullname" . }})
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT echo http://$NODE_IP:$NODE_PORT
{{- else if contains "LoadBalancer" .Values.service.type }} {{- else if contains "LoadBalancer" .Values.nginx.service.type }}
NOTE: It may take a few minutes for the LoadBalancer IP to be available. NOTE: It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "common.names.fullname" . }}' You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "invoiceninja.nginx.fullname" . }}'
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "common.names.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "invoiceninja.nginx.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
echo http://$SERVICE_IP:{{ .Values.service.port }} echo http://$SERVICE_IP:{{ .Values.service.port }}
{{- else if contains "ClusterIP" .Values.service.type }} {{- else if contains "ClusterIP" .Values.nginx.service.type }}
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "common.names.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") export SVC_NAME=$(kubectl get svc --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name=nginx,app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") export SVC_PORT=$(kubectl get svc --namespace {{ .Release.Namespace }} $SVC_NAME -o jsonpath="{.spec.ports[0].port}")
echo "Visit http://127.0.0.1:8080 to use your application" echo "Visit http://127.0.0.1:8080 to use your application"
kubectl -n {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT kubectl -n {{ .Release.Namespace }} port-forward svc/$SVC_NAME 8080:$SVC_PORT
{{- end }} {{- end }}

View File

@@ -221,7 +221,7 @@ Return the Cache Connection Name
{{- end -}} {{- end -}}
{{/* {{/*
Return the Broadcast Driver Name Return the Queue Connection Name
*/}} */}}
{{- define "invoiceninja.redisQueueConnection" -}} {{- define "invoiceninja.redisQueueConnection" -}}
{{- if or (and .Values.redis.enabled .Values.redis.sentinel.enabled) (and .Values.externalRedis.host .Values.externalRedis.sentinel) }} {{- if or (and .Values.redis.enabled .Values.redis.sentinel.enabled) (and .Values.externalRedis.host .Values.externalRedis.sentinel) }}
@@ -230,3 +230,14 @@ Return the Broadcast Driver Name
{{- printf "default" -}} {{- printf "default" -}}
{{- end -}} {{- end -}}
{{- end -}} {{- end -}}
{{/*
Return the Session Connection Name
*/}}
{{- define "invoiceninja.redisSessionConnection" -}}
{{- if or (and .Values.redis.enabled .Values.redis.sentinel.enabled) (and .Values.externalRedis.host .Values.externalRedis.sentinel) }}
{{- printf "sentinel-default" -}}
{{- else -}}
{{- printf "default" -}}
{{- end -}}
{{- end -}}

View File

@@ -55,3 +55,4 @@ data:
REDIS_BROADCAST_CONNECTION: {{ include "invoiceninja.redisBroadcastConnection" . | quote }} REDIS_BROADCAST_CONNECTION: {{ include "invoiceninja.redisBroadcastConnection" . | quote }}
REDIS_CACHE_CONNECTION: {{ include "invoiceninja.redisCacheConnection" . | quote }} REDIS_CACHE_CONNECTION: {{ include "invoiceninja.redisCacheConnection" . | quote }}
REDIS_QUEUE_CONNECTION: {{ include "invoiceninja.redisQueueConnection" . | quote }} REDIS_QUEUE_CONNECTION: {{ include "invoiceninja.redisQueueConnection" . | quote }}
SESSION_CONNECTION: {{ include "invoiceninja.redisSessionConnection" . | quote }}

View File

@@ -133,7 +133,7 @@ spec:
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)) }} {{- if or (and .Values.redis.enabled .Values.redis.usePassword) (or .Values.externalRedis.password .Values.externalRedis.existingSecret) }}
- name: REDIS_PASSWORD - name: REDIS_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -335,7 +335,6 @@ autoscaling:
## ##
redis: redis:
enabled: true enabled: true
usePassword: false
sentinel: sentinel:
enabled: true enabled: true
usePassword: false usePassword: false