Merge branch 'node_production_chart' of github.com:tompizmor/charts-1 into node_production_chart
@@ -11,8 +11,10 @@ $ helm search bitnami-incubator
|
||||
|
||||
## Stable charts (contributed to [kubernetes/charts](https://github.com/kubernetes/charts))
|
||||
|
||||
- [Dokuwiki](https://github.com/kubernetes/charts/tree/master/stable/dokuwiki)
|
||||
- [Drupal](https://github.com/kubernetes/charts/tree/master/stable/drupal)
|
||||
- [Ghost](https://github.com/kubernetes/charts/tree/master/stable/ghost)
|
||||
- [JasperReports](https://github.com/kubernetes/charts/tree/master/stable/jasperreports)
|
||||
- [Joomla!](https://github.com/kubernetes/charts/tree/master/stable/joomla)
|
||||
- [Magento](https://github.com/kubernetes/charts/tree/master/stable/magento)
|
||||
- [MariaDB](https://github.com/kubernetes/charts/tree/master/stable/mariadb)
|
||||
@@ -39,7 +41,6 @@ $ helm search bitnami-incubator
|
||||
## Incubator charts
|
||||
|
||||
- [Apache](https://github.com/bitnami/charts/tree/master/incubator/apache)
|
||||
- [Dokuwiki](https://github.com/kubernetes/charts/tree/master/stable/dokuwiki)
|
||||
- [Elasticsearch](https://github.com/bitnami/charts/tree/master/incubator/elasticsearch)
|
||||
- [JasperReports Server](https://github.com/kubernetes/charts/tree/master/stable/jasperreports)
|
||||
- [Jenkins](https://github.com/bitnami/charts/tree/master/incubator/jenkins)
|
||||
|
||||
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
@@ -8,4 +8,4 @@ keywords:
|
||||
name: crypto
|
||||
sources:
|
||||
- https://github.com/kubeless/functions
|
||||
version: 0.0.1
|
||||
version: 0.0.2
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
apiVersion: k8s.io/v1
|
||||
apiVersion: kubeless.io/v1beta1
|
||||
kind: Function
|
||||
metadata:
|
||||
name: crypto
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: apache
|
||||
version: 0.3.7
|
||||
version: 0.3.8
|
||||
description: Chart for Apache HTTP Server
|
||||
keywords:
|
||||
- apache
|
||||
|
||||
@@ -19,7 +19,7 @@ spec:
|
||||
spec:
|
||||
containers:
|
||||
- name: {{ template "fullname" . }}
|
||||
image: "bitnami/apache:{{ .Values.imageTag }}"
|
||||
image: "{{ .Values.image }}"
|
||||
imagePullPolicy: {{ default "" .Values.imagePullPolicy | quote }}
|
||||
ports:
|
||||
- name: http
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
## Bitnami Apache image version
|
||||
## ref: https://hub.docker.com/r/bitnami/apache/tags/
|
||||
##
|
||||
imageTag: 2.4.23-r12
|
||||
image: bitnami/apache:2.4.23-r12
|
||||
|
||||
## Specify a imagePullPolicy
|
||||
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: elasticsearch
|
||||
version: 0.1.1
|
||||
version: 0.1.2
|
||||
appVersion: 5.5.2
|
||||
description: A highly scalable open-source full-text search and analytics engine
|
||||
keywords:
|
||||
|
||||
@@ -43,15 +43,15 @@ spec:
|
||||
{{- end }}
|
||||
initContainers:
|
||||
- name: sysctl
|
||||
image: "{{ .Values.image.name }}:{{ .Values.image.tag }}"
|
||||
imagePullPolicy: "{{ .Values.image.pullPolicy }}"
|
||||
image: "{{ .Values.image }}"
|
||||
imagePullPolicy: "{{ .Values.pullPolicy }}"
|
||||
command: ["sysctl", "-w", "vm.max_map_count=262144"]
|
||||
securityContext:
|
||||
privileged: true
|
||||
containers:
|
||||
- name: "elasticsearch"
|
||||
image: "{{ .Values.image.name }}:{{ .Values.image.tag }}"
|
||||
imagePullPolicy: "{{ .Values.image.pullPolicy }}"
|
||||
image: "{{ .Values.image }}"
|
||||
imagePullPolicy: "{{ .Values.pullPolicy }}"
|
||||
env:
|
||||
- name: SERVICE
|
||||
value: "{{ template "master.fullname" . }}"
|
||||
|
||||
@@ -44,15 +44,15 @@ spec:
|
||||
{{- end }}
|
||||
initContainers:
|
||||
- name: sysctl
|
||||
image: "{{ .Values.image.name }}:{{ .Values.image.tag }}"
|
||||
imagePullPolicy: "{{ .Values.image.pullPolicy }}"
|
||||
image: "{{ .Values.image }}"
|
||||
imagePullPolicy: "{{ .Values.pullPolicy }}"
|
||||
command: ["sysctl", "-w", "vm.max_map_count=262144"]
|
||||
securityContext:
|
||||
privileged: true
|
||||
containers:
|
||||
- name: "elasticsearch"
|
||||
image: "{{ .Values.image.name }}:{{ .Values.image.tag }}"
|
||||
imagePullPolicy: "{{ .Values.image.pullPolicy }}"
|
||||
image: "{{ .Values.image }}"
|
||||
imagePullPolicy: "{{ .Values.pullPolicy }}"
|
||||
env:
|
||||
- name: SERVICE
|
||||
value: "{{ template "master.fullname" . }}"
|
||||
|
||||
@@ -43,15 +43,15 @@ spec:
|
||||
{{- end }}
|
||||
initContainers:
|
||||
- name: sysctl
|
||||
image: "{{ .Values.image.name }}:{{ .Values.image.tag }}"
|
||||
imagePullPolicy: "{{ .Values.image.pullPolicy }}"
|
||||
image: "{{ .Values.image }}"
|
||||
imagePullPolicy: "{{ .Values.pullPolicy }}"
|
||||
command: ["sysctl", "-w", "vm.max_map_count=262144"]
|
||||
securityContext:
|
||||
privileged: true
|
||||
containers:
|
||||
- name: "elasticsearch"
|
||||
image: "{{ .Values.image.name }}:{{ .Values.image.tag }}"
|
||||
imagePullPolicy: "{{ .Values.image.pullPolicy }}"
|
||||
image: "{{ .Values.image }}"
|
||||
imagePullPolicy: "{{ .Values.pullPolicy }}"
|
||||
env:
|
||||
- name: SERVICE
|
||||
value: "{{ template "master.fullname" . }}"
|
||||
|
||||
@@ -3,15 +3,14 @@
|
||||
##
|
||||
name: elastic
|
||||
|
||||
image:
|
||||
## Elasticsearch image
|
||||
## ref: https://hub.docker.com/r/bitnami/elasticsearch/tags/
|
||||
name: bitnami/elasticsearch
|
||||
tag: 5.5.2-r1
|
||||
## Specify a imagePullPolicy
|
||||
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
|
||||
##
|
||||
pullPolicy: IfNotPresent
|
||||
## Elasticsearch image
|
||||
## ref: https://hub.docker.com/r/bitnami/elasticsearch/tags/
|
||||
image: bitnami/elasticsearch:5.5.2-r1
|
||||
|
||||
## Specify a imagePullPolicy
|
||||
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
|
||||
##
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
|
||||
## The serviceAccountName to be used, required by the elasticsearch-cloud-kubernetes plugin
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: jenkins
|
||||
version: 0.4.62
|
||||
appVersion: 2.107.0
|
||||
version: 0.4.65
|
||||
appVersion: 2.109.0
|
||||
description: The leading open source automation server
|
||||
keywords:
|
||||
- jenkins
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
## Bitnami Jenkins image version
|
||||
## ref: https://hub.docker.com/r/bitnami/jenkins/tags/
|
||||
##
|
||||
image: bitnami/jenkins:2.107.0-r0
|
||||
image: bitnami/jenkins:2.109.0-r0
|
||||
|
||||
## Specify a imagePullPolicy
|
||||
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: mariadb-cluster
|
||||
version: 0.5.0
|
||||
version: 0.5.1
|
||||
appVersion: 10.1.28
|
||||
description: Chart to create a Highly available MariaDB cluster
|
||||
keywords:
|
||||
|
||||
@@ -43,8 +43,8 @@ spec:
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: "mariadb"
|
||||
image: "{{ .Values.image.name }}:{{ .Values.image.tag }}"
|
||||
imagePullPolicy: "{{ .Values.image.pullPolicy }}"
|
||||
image: "{{ .Values.image }}"
|
||||
imagePullPolicy: "{{ .Values.pullPolicy }}"
|
||||
env:
|
||||
- name: MARIADB_ROOT_PASSWORD
|
||||
valueFrom:
|
||||
|
||||
@@ -43,8 +43,8 @@ spec:
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: "mariadb"
|
||||
image: "{{ .Values.image.name }}:{{ .Values.image.tag }}"
|
||||
imagePullPolicy: "{{ .Values.image.pullPolicy }}"
|
||||
image: "{{ .Values.image }}"
|
||||
imagePullPolicy: "{{ .Values.pullPolicy }}"
|
||||
env:
|
||||
- name: MARIADB_ROOT_PASSWORD
|
||||
valueFrom:
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
## Bitnami MariaDB image
|
||||
image:
|
||||
name: bitnami/mariadb
|
||||
tag: 10.1.28-r2
|
||||
pullPolicy: IfNotPresent
|
||||
image: bitnami/mariadb:10.1.28-r2
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
service:
|
||||
## Kubernetes service type
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: memcached
|
||||
version: 0.4.23
|
||||
appVersion: 1.5.5
|
||||
version: 0.4.26
|
||||
appVersion: 1.5.6
|
||||
description: Chart for Memcached
|
||||
keywords:
|
||||
- memcached
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
## Bitnami Memcached image version
|
||||
## ref: https://hub.docker.com/r/bitnami/memcached/tags/
|
||||
##
|
||||
image: bitnami/memcached:1.5.5-r0
|
||||
image: bitnami/memcached:1.5.6-r1
|
||||
|
||||
## Specify a imagePullPolicy
|
||||
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: nginx
|
||||
version: 0.4.0
|
||||
version: 0.4.1
|
||||
appVersion: 1.10.2
|
||||
description: Chart for the nginx server
|
||||
keywords:
|
||||
|
||||
@@ -19,7 +19,7 @@ spec:
|
||||
spec:
|
||||
containers:
|
||||
- name: {{ template "fullname" . }}
|
||||
image: "bitnami/nginx:{{ .Values.imageTag }}"
|
||||
image: "{{ .Values.image }}"
|
||||
imagePullPolicy: {{ default "" .Values.imagePullPolicy | quote }}
|
||||
ports:
|
||||
- name: http
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
## Bitnami NGINX image version
|
||||
## ref: https://hub.docker.com/r/bitnami/nginx/tags/
|
||||
##
|
||||
imageTag: 1.10.2-r3
|
||||
image: bitnami/nginx:1.10.2-r3
|
||||
|
||||
## Specify a imagePullPolicy
|
||||
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: node
|
||||
version: 0.2.8
|
||||
appVersion: 6.13.0
|
||||
version: 0.2.12
|
||||
appVersion: 6.13.1
|
||||
description: Event-driven I/O server-side JavaScript environment based on V8
|
||||
keywords:
|
||||
- node
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: postgresql
|
||||
version: 0.4.18
|
||||
appVersion: 10.2.0
|
||||
version: 0.4.22
|
||||
appVersion: 10.3.0
|
||||
description: Chart for PostgreSQL
|
||||
keywords:
|
||||
- postgresql
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
## Bitnami PostgreSQL image version
|
||||
## ref: https://hub.docker.com/r/bitnami/postgresql/tags/
|
||||
##
|
||||
image: bitnami/postgresql:10.2.0-r0
|
||||
image: bitnami/postgresql:10.3.0-r2
|
||||
|
||||
## Specify a imagePullPolicy
|
||||
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: tensorflow-inception
|
||||
version: 0.0.5
|
||||
version: 0.0.7
|
||||
appVersion: 1.5.0
|
||||
description: Open-source software library for serving machine learning models
|
||||
keywords:
|
||||
|
||||
@@ -9,7 +9,7 @@ server:
|
||||
## ref: https://hub.docker.com/r/bitnami/tensorflow-inception/tags/
|
||||
##
|
||||
client:
|
||||
image: bitnami/tensorflow-inception:1.5.0-r0
|
||||
image: bitnami/tensorflow-inception:1.5.0-r2
|
||||
|
||||
## Specify a imagePullPolicy
|
||||
## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: tomcat
|
||||
version: 0.4.18
|
||||
appVersion: 8.5.28
|
||||
version: 0.4.21
|
||||
appVersion: 8.5.29
|
||||
description: Chart for Apache Tomcat
|
||||
keywords:
|
||||
- tomcat
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
## Bitnami Tomcat image version
|
||||
## ref: https://hub.docker.com/r/bitnami/tomcat/tags/
|
||||
##
|
||||
image: bitnami/tomcat:8.5.28-r0
|
||||
image: bitnami/tomcat:8.5.29-r0
|
||||
|
||||
## Specify a imagePullPolicy
|
||||
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
name: wildfly
|
||||
version: 0.4.9
|
||||
version: 0.4.11
|
||||
appVersion: 11.0.0
|
||||
description: Chart for Wildfly
|
||||
keywords:
|
||||
- wildfly
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
## Bitnami WildFly image version
|
||||
## ref: https://hub.docker.com/r/bitnami/wildfly/tags/
|
||||
##
|
||||
image: bitnami/wildfly:11.0.0-r4
|
||||
image: bitnami/wildfly:11.0.0-r6
|
||||
|
||||
## Specify a imagePullPolicy
|
||||
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
.git
|
||||
@@ -0,0 +1,17 @@
|
||||
name: dokuwiki
|
||||
version: 0.2.1
|
||||
description: DokuWiki is a standards-compliant, simple to use wiki optimized for creating
|
||||
documentation. It is targeted at developer teams, workgroups, and small companies.
|
||||
All data is stored in plain text files, so no database is required.
|
||||
keywords:
|
||||
- dokuwiki
|
||||
- wiki
|
||||
- php
|
||||
home: http://www.dokuwiki.org/
|
||||
sources:
|
||||
- https://github.com/bitnami/bitnami-docker-dokuwiki
|
||||
maintainers:
|
||||
- name: Bitnami
|
||||
email: containers@bitnami.com
|
||||
engine: gotpl
|
||||
icon: https://bitnami.com/assets/stacks/dokuwiki/img/dokuwiki-stack-110x117.png
|
||||
@@ -0,0 +1,8 @@
|
||||
approvers:
|
||||
- prydonius
|
||||
- tompizmor
|
||||
- sameersbn
|
||||
reviewers:
|
||||
- prydonius
|
||||
- tompizmor
|
||||
- sameersbn
|
||||
@@ -0,0 +1,90 @@
|
||||
# DokuWiki
|
||||
|
||||
[DokuWiki](https://www.dokuwiki.org) DokuWiki is a standards-compliant, simple to use wiki optimized for creating documentation. It is targeted at developer teams, workgroups, and small companies. All data is stored in plain text files, so no database is required.
|
||||
|
||||
## TL;DR;
|
||||
|
||||
```console
|
||||
$ helm install stable/dokuwiki
|
||||
```
|
||||
|
||||
## Introduction
|
||||
|
||||
This chart bootstraps a [DokuWiki](https://github.com/bitnami/bitnami-docker-dokuwiki) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Kubernetes 1.4+ with Beta APIs enabled
|
||||
- PV provisioner support in the underlying infrastructure
|
||||
|
||||
## Installing the Chart
|
||||
|
||||
To install the chart with the release name `my-release`:
|
||||
|
||||
```console
|
||||
$ helm install --name my-release stable/dokuwiki
|
||||
```
|
||||
|
||||
The command deploys DokuWiki on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation.
|
||||
|
||||
> **Tip**: List all releases using `helm list`
|
||||
|
||||
## Uninstalling the Chart
|
||||
|
||||
To uninstall/delete the `my-release` deployment:
|
||||
|
||||
```console
|
||||
$ helm delete my-release
|
||||
```
|
||||
|
||||
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||
|
||||
## Configuration
|
||||
|
||||
The following tables lists the configurable parameters of the DokuWiki chart and their default values.
|
||||
|
||||
| Parameter | Description | Default |
|
||||
|-------------------------------------|-----------------------------------------|---------------------------------------------------------|
|
||||
| `image` | DokuWiki image | `bitnami/dokuwiki:{VERSION}` |
|
||||
| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` |
|
||||
| `dokuwikiUsername` | User of the application | `user` |
|
||||
| `dokuwikiFullName` | User's full name | `Full Name` |
|
||||
| `dokuwikiPassword` | Application password | _random 10 character alphanumeric string_ |
|
||||
| `dokuwikiEmail` | User email | `user@example.com` |
|
||||
| `dokuwikiWikiName` | Wiki name | `My Wiki` |
|
||||
| `serviceType` | Kubernetes Service type | `LoadBalancer` |
|
||||
| `persistence.enabled` | Enable persistence using PVC | `true` |
|
||||
| `persistence.apache.storageClass` | PVC Storage Class for apache volume | `nil` (uses alpha storage class annotation) |
|
||||
| `persistence.apache.accessMode` | PVC Access Mode for apache volume | `ReadWriteOnce` |
|
||||
| `persistence.apache.size` | PVC Storage Request for apache volume | `1Gi` |
|
||||
| `persistence.dokuwiki.storageClass` | PVC Storage Class for DokuWiki volume | `nil` (uses alpha storage class annotation) |
|
||||
| `persistence.dokuwiki.accessMode` | PVC Access Mode for DokuWiki volume | `ReadWriteOnce` |
|
||||
| `persistence.dokuwiki.size` | PVC Storage Request for DokuWiki volume | `8Gi` |
|
||||
| `resources` | CPU/Memory resource requests/limits | Memory: `512Mi`, CPU: `300m` |
|
||||
|
||||
The above parameters map to the env variables defined in [bitnami/dokuwiki](http://github.com/bitnami/bitnami-docker-dokuwiki). For more information please refer to the [bitnami/dokuwiki](http://github.com/bitnami/bitnami-docker-dokuwiki) image documentation.
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
||||
|
||||
```console
|
||||
$ helm install --name my-release \
|
||||
--set dokuwikiUsername=admin,dokuwikiPassword=password \
|
||||
stable/dokuwiki
|
||||
```
|
||||
|
||||
The above command sets the DokuWiki administrator account username and password to `admin` and `password` respectively.
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
|
||||
|
||||
```console
|
||||
$ helm install --name my-release -f values.yaml stable/dokuwiki
|
||||
```
|
||||
|
||||
> **Tip**: You can use the default [values.yaml](values.yaml)
|
||||
|
||||
## Persistence
|
||||
|
||||
The [Bitnami DokuWiki](https://github.com/bitnami/bitnami-docker-dokuwiki) image stores the DokuWiki data and configurations at the `/bitnami/dokuwiki` and `/bitnami/apache` paths of the container.
|
||||
|
||||
Persistent Volume Claims are used to keep the data across deployments. This is known to work in GCE, AWS, and minikube.
|
||||
See the [Configuration](#configuration) section to configure the PVC or to disable persistence.
|
||||
@@ -0,0 +1,29 @@
|
||||
|
||||
** Please be patient while the chart is being deployed **
|
||||
|
||||
1. Get the DokuWiki URL by running:
|
||||
|
||||
{{- if contains "NodePort" .Values.serviceType }}
|
||||
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "dokuwiki.fullname" . }})
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
echo http://$NODE_IP:$NODE_PORT/
|
||||
|
||||
{{- else if contains "LoadBalancer" .Values.serviceType }}
|
||||
|
||||
** Please ensure an external IP is associated to the {{ template "dokuwiki.fullname" . }} service before proceeding **
|
||||
** Watch the status using: kubectl get svc --namespace {{ .Release.Namespace }} -w {{ template "dokuwiki.fullname" . }} **
|
||||
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "dokuwiki.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||
echo http://$SERVICE_IP/
|
||||
{{- else if contains "ClusterIP" .Values.serviceType }}
|
||||
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "dokuwiki.fullname" . }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
echo http://127.0.0.1:8080/
|
||||
kubectl port-forward $POD_NAME 8080:80
|
||||
{{- end }}
|
||||
|
||||
2. Login with the following credentials
|
||||
|
||||
echo Username: {{ .Values.dokuwikiUsername }}
|
||||
echo Password: $(kubectl get secret --namespace {{ .Release.Namespace }} {{ template "dokuwiki.fullname" . }} -o jsonpath="{.data.dokuwiki-password}" | base64 --decode)
|
||||
@@ -0,0 +1,16 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "dokuwiki.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- 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 "dokuwiki.fullname" -}}
|
||||
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,24 @@
|
||||
{{- if .Values.persistence.enabled -}}
|
||||
kind: PersistentVolumeClaim
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: {{ template "dokuwiki.fullname" . }}-apache
|
||||
labels:
|
||||
app: {{ template "dokuwiki.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .Values.persistence.apache.accessMode | quote }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.persistence.apache.size | quote }}
|
||||
{{- if .Values.persistence.apache.storageClass }}
|
||||
{{- if (eq "-" .Values.persistence.apache.storageClass) }}
|
||||
storageClassName: ""
|
||||
{{- else }}
|
||||
storageClassName: "{{ .Values.persistence.apache.storageClass }}"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,74 @@
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "dokuwiki.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "dokuwiki.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
spec:
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ template "dokuwiki.fullname" . }}
|
||||
spec:
|
||||
containers:
|
||||
- name: {{ template "dokuwiki.fullname" . }}
|
||||
image: "{{ .Values.image }}"
|
||||
imagePullPolicy: {{ default "" .Values.imagePullPolicy | quote }}
|
||||
env:
|
||||
- name: DOKUWIKI_USERNAME
|
||||
value: {{ default "" .Values.dokuwikiUsername | quote }}
|
||||
- name: DOKUWIKI_FULL_NAME
|
||||
value: {{ default "" .Values.dokuwikiFullName | quote }}
|
||||
- name: DOKUWIKI_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ template "dokuwiki.fullname" . }}
|
||||
key: dokuwiki-password
|
||||
- name: DOKUWIKI_EMAIL
|
||||
value: {{ default "" .Values.dokuwikiEmail | quote }}
|
||||
- name: DOKUWIKI_WIKI_NAME
|
||||
value: {{ default "" .Values.dokuwikiWikiName | quote }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 80
|
||||
- name: https
|
||||
containerPort: 443
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /doku.php
|
||||
port: http
|
||||
initialDelaySeconds: 120
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 6
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /doku.php
|
||||
port: http
|
||||
initialDelaySeconds: 30
|
||||
timeoutSeconds: 3
|
||||
periodSeconds: 5
|
||||
resources:
|
||||
{{ toYaml .Values.resources | indent 10 }}
|
||||
volumeMounts:
|
||||
- name: dokuwiki-data
|
||||
mountPath: /bitnami/dokuwiki
|
||||
- name: apache-data
|
||||
mountPath: /bitnami/apache
|
||||
volumes:
|
||||
- name: dokuwiki-data
|
||||
{{- if .Values.persistence.enabled }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ template "dokuwiki.fullname" . }}-dokuwiki
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
- name: apache-data
|
||||
{{- if .Values.persistence.enabled }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ template "dokuwiki.fullname" . }}-apache
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,24 @@
|
||||
{{- if .Values.persistence.enabled -}}
|
||||
kind: PersistentVolumeClaim
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: {{ template "dokuwiki.fullname" . }}-dokuwiki
|
||||
labels:
|
||||
app: {{ template "dokuwiki.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .Values.persistence.dokuwiki.accessMode | quote }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.persistence.dokuwiki.size | quote }}
|
||||
{{- if .Values.persistence.dokuwiki.storageClass }}
|
||||
{{- if (eq "-" .Values.persistence.dokuwiki.storageClass) }}
|
||||
storageClassName: ""
|
||||
{{- else }}
|
||||
storageClassName: "{{ .Values.persistence.dokuwiki.storageClass }}"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,16 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ template "dokuwiki.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "dokuwiki.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
type: Opaque
|
||||
data:
|
||||
{{ if .Values.dokuwikiPassword }}
|
||||
dokuwiki-password: {{ default "" .Values.dokuwikiPassword | b64enc | quote }}
|
||||
{{ else }}
|
||||
dokuwiki-password: {{ randAlphaNum 10 | b64enc | quote }}
|
||||
{{ end }}
|
||||
@@ -0,0 +1,20 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "dokuwiki.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "dokuwiki.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
spec:
|
||||
type: {{ .Values.serviceType }}
|
||||
ports:
|
||||
- name: http
|
||||
port: 80
|
||||
targetPort: http
|
||||
- name: https
|
||||
port: 443
|
||||
targetPort: https
|
||||
selector:
|
||||
app: {{ template "dokuwiki.fullname" . }}
|
||||
@@ -0,0 +1,76 @@
|
||||
## Bitnami DokuWiki image version
|
||||
## ref: https://hub.docker.com/r/bitnami/dokuwiki/tags/
|
||||
##
|
||||
image: bitnami/dokuwiki:20160626a-r9
|
||||
|
||||
## Specify a imagePullPolicy
|
||||
## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
|
||||
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
|
||||
##
|
||||
# imagePullPolicy:
|
||||
|
||||
## User of the application
|
||||
## ref: https://github.com/bitnami/bitnami-docker-dokuwiki#environment-variables
|
||||
##
|
||||
dokuwikiUsername: user
|
||||
|
||||
## Application password
|
||||
## Defaults to a random 10-character alphanumeric string if not set
|
||||
## ref: https://github.com/bitnami/bitnami-docker-dokuwiki#environment-variables
|
||||
# dokuwikiPassword:
|
||||
|
||||
## Admin email
|
||||
## ref: https://github.com/bitnami/bitnami-docker-dokuwiki#environment-variables
|
||||
##
|
||||
dokuwikiEmail: user@example.com
|
||||
|
||||
## User's Full Name
|
||||
## ref: https://github.com/bitnami/bitnami-docker-dokuwiki#environment-variables
|
||||
##
|
||||
dokuwikiFullName: Full Name
|
||||
|
||||
## Name of the Wiki
|
||||
## ref: https://github.com/bitnami/bitnami-docker-dokuwiki#environment-variables
|
||||
##
|
||||
dokuwikiWikiName: My Wiki
|
||||
|
||||
## Kubernetes configuration
|
||||
## For minikube, set this to NodePort, elsewhere use LoadBalancer
|
||||
##
|
||||
serviceType: LoadBalancer
|
||||
|
||||
## Enable persistence using Persistent Volume Claims
|
||||
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
|
||||
##
|
||||
persistence:
|
||||
enabled: true
|
||||
apache:
|
||||
## apache data Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
accessMode: ReadWriteOnce
|
||||
size: 1Gi
|
||||
dokuwiki:
|
||||
## dokuwiki data Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
accessMode: ReadWriteOnce
|
||||
size: 8Gi
|
||||
|
||||
## Configure resource requests and limits
|
||||
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
|
||||
##
|
||||
resources:
|
||||
requests:
|
||||
memory: 512Mi
|
||||
cpu: 300m
|
||||
@@ -0,0 +1,3 @@
|
||||
.git
|
||||
# OWNERS file for Kubernetes
|
||||
OWNERS
|
||||
@@ -0,0 +1,20 @@
|
||||
name: drupal
|
||||
version: 0.11.10
|
||||
appVersion: 8.5.0
|
||||
description: One of the most versatile open source content management systems.
|
||||
keywords:
|
||||
- drupal
|
||||
- cms
|
||||
- blog
|
||||
- http
|
||||
- web
|
||||
- application
|
||||
- php
|
||||
home: http://www.drupal.org/
|
||||
icon: https://bitnami.com/assets/stacks/drupal/img/drupal-stack-220x234.png
|
||||
sources:
|
||||
- https://github.com/bitnami/bitnami-docker-drupal
|
||||
maintainers:
|
||||
- name: bitnami-bot
|
||||
email: containers@bitnami.com
|
||||
engine: gotpl
|
||||
@@ -0,0 +1,8 @@
|
||||
approvers:
|
||||
- prydonius
|
||||
- tompizmor
|
||||
- sameersbn
|
||||
reviewers:
|
||||
- prydonius
|
||||
- tompizmor
|
||||
- sameersbn
|
||||
@@ -0,0 +1,154 @@
|
||||
# Drupal
|
||||
|
||||
[Drupal](https://www.drupal.org/) is one of the most versatile open source content management systems on the market.
|
||||
|
||||
## TL;DR;
|
||||
|
||||
```console
|
||||
$ helm install stable/drupal
|
||||
```
|
||||
|
||||
## Introduction
|
||||
|
||||
This chart bootstraps a [Drupal](https://github.com/bitnami/bitnami-docker-drupal) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
|
||||
|
||||
It also packages the [Bitnami MariaDB chart](https://github.com/kubernetes/charts/tree/master/stable/mariadb) which is required for bootstrapping a MariaDB deployment for the database requirements of the Drupal application.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Kubernetes 1.4+ with Beta APIs enabled
|
||||
- PV provisioner support in the underlying infrastructure
|
||||
|
||||
## Installing the Chart
|
||||
|
||||
To install the chart with the release name `my-release`:
|
||||
|
||||
```console
|
||||
$ helm install --name my-release stable/drupal
|
||||
```
|
||||
|
||||
The command deploys Drupal on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation.
|
||||
|
||||
> **Tip**: List all releases using `helm list`
|
||||
|
||||
## Uninstalling the Chart
|
||||
|
||||
To uninstall/delete the `my-release` deployment:
|
||||
|
||||
```console
|
||||
$ helm delete my-release
|
||||
```
|
||||
|
||||
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||
|
||||
## Configuration
|
||||
|
||||
The following tables lists the configurable parameters of the Drupal chart and their default values.
|
||||
|
||||
| Parameter | Description | Default |
|
||||
| --------------------------------- | ------------------------------------- | --------------------------------------------------------- |
|
||||
| `image` | Drupal image | `bitnami/drupal:{VERSION}` |
|
||||
| `imagePullSecrets` | Specify image pull secrets | `nil` (does not add image pull secrets to deployed pods) |
|
||||
| `imagePullPolicy` | Image pull policy | `IfNotPresent` |
|
||||
| `drupalUsername` | User of the application | `user` |
|
||||
| `drupalPassword` | Application password | _random 10 character long alphanumeric string_ |
|
||||
| `drupalEmail` | Admin email | `user@example.com` |
|
||||
| `allowEmptyPassword` | Allow DB blank passwords | `yes` |
|
||||
| `extraVars` | Extra environment variables | `nil` |
|
||||
| `ingress.annotations` | Specify ingress class | `kubernetes.io/ingress.class: nginx` |
|
||||
| `ingress.enabled` | Enable ingress controller resource | `false` |
|
||||
| `ingress.hostname` | URL for your Drupal installation | `drupal.local` |
|
||||
| `ingress.tls` | Ingress TLS configuration | `[]` |
|
||||
| `externalDatabase.host` | Host of the external database | `nil` |
|
||||
| `externalDatabase.user` | Existing username in the external db | `bn_drupal` |
|
||||
| `externalDatabase.password` | Password for the above username | `nil` |
|
||||
| `externalDatabase.database` | Name of the existing databse | `bitnami_drupal` |
|
||||
| `mariadb.enabled` | Use or not the mariadb chart | `true` |
|
||||
| `mariadb.mariadbRootPassword` | MariaDB admin password | `nil` |
|
||||
| `mariadb.mariadbDatabase` | Database name to create | `bitnami_drupal` |
|
||||
| `mariadb.mariadbUser` | Database user to create | `bn_drupal` |
|
||||
| `mariadb.mariadbPassword` | Password for the database | _random 10 character long alphanumeric string_ |
|
||||
| `serviceType` | Kubernetes Service type | `LoadBalancer` |
|
||||
| `persistence.enabled` | Enable persistence using PVC | `true` |
|
||||
| `persistence.apache.storageClass` | PVC Storage Class for Apache volume | `nil` (uses alpha storage class annotation) |
|
||||
| `persistence.apache.accessMode` | PVC Access Mode for Apache volume | `ReadWriteOnce` |
|
||||
| `persistence.apache.size` | PVC Storage Request for Apache volume | `1Gi` |
|
||||
| `persistence.drupal.storageClass` | PVC Storage Class for Drupal volume | `nil` (uses alpha storage class annotation) |
|
||||
| `persistence.drupal.accessMode` | PVC Access Mode for Drupal volume | `ReadWriteOnce` |
|
||||
| `persistence.drupal.existingClaim`| An Existing PVC name | `nil` |
|
||||
| `persistence.drupal.hostPath` | Host mount path for Drupal volume | `nil` (will not mount to a host path) |
|
||||
| `persistence.drupal.size` | PVC Storage Request for Drupal volume | `8Gi` |
|
||||
| `resources` | CPU/Memory resource requests/limits | Memory: `512Mi`, CPU: `300m` |
|
||||
| `volumeMounts.drupal.mountPath` | Drupal data volume mount path | `/bitnami/drupal` |
|
||||
| `volumeMounts.apache.mountPath` | Apache data volume mount path | `/bitnami/apache` |
|
||||
|
||||
The above parameters map to the env variables defined in [bitnami/drupal](http://github.com/bitnami/bitnami-docker-drupal). For more information please refer to the [bitnami/drupal](http://github.com/bitnami/bitnami-docker-drupal) image documentation.
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
||||
|
||||
```console
|
||||
$ helm install --name my-release \
|
||||
--set drupalUsername=admin,drupalPassword=password,mariadb.mariadbRootPassword=secretpassword \
|
||||
stable/drupal
|
||||
```
|
||||
|
||||
The above command sets the Drupal administrator account username and password to `admin` and `password` respectively. Additionally it sets the MariaDB `root` user password to `secretpassword`.
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
|
||||
|
||||
```console
|
||||
$ helm install --name my-release -f values.yaml stable/drupal
|
||||
```
|
||||
|
||||
> **Tip**: You can use the default [values.yaml](values.yaml)
|
||||
|
||||
## Image
|
||||
|
||||
The `image` parameter allows specifying which image will be pulled for the chart.
|
||||
|
||||
### Private registry
|
||||
|
||||
If you configure the `image` value to one in a private registry, you will need to [specify an image pull secret](https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod).
|
||||
|
||||
1. Manually create image pull secret(s) in the namespace. See [this YAML example reference](https://kubernetes.io/docs/concepts/containers/images/#creating-a-secret-with-a-docker-config). Consult your image registry's documentation about getting the appropriate secret.
|
||||
1. Note that the `imagePullSecrets` configuration value cannot currently be passed to helm using the `--set` parameter, so you must supply these using a `values.yaml` file, such as:
|
||||
```yaml
|
||||
imagePullSecrets:
|
||||
- name: SECRET_NAME
|
||||
```
|
||||
1. Install the chart
|
||||
```console
|
||||
helm install --name my-release -f values.yaml stable/drupal
|
||||
```
|
||||
|
||||
## Persistence
|
||||
The configured image must store Drupal data and Apache configurations in separate paths of the container.
|
||||
|
||||
The [Bitnami Drupal](https://github.com/bitnami/bitnami-docker-drupal) image stores the Drupal data and Apache configurations at the `/bitnami/drupal` and `/bitnami/apache` paths of the container. If you wish to override the `image` value, and your image stores this data and configurations in different paths, you may specify these paths with `volumeMounts.drupal.mountPath` and `volumeMounts.apache.mountPath`.
|
||||
|
||||
Persistent Volume Claims are used to keep the data across deployments. This is known to work in GCE, AWS, and minikube.
|
||||
See the [Configuration](#configuration) section to configure the PVC or to disable persistence.
|
||||
|
||||
### Existing PersistentVolumeClaim
|
||||
|
||||
1. Create the PersistentVolume
|
||||
1. Create the PersistentVolumeClaim
|
||||
1. Install the chart
|
||||
```bash
|
||||
$ helm install --name my-release --set persistence.drupal.existingClaim=PVC_NAME stable/drupal
|
||||
```
|
||||
|
||||
### Host path
|
||||
|
||||
#### System compatibility
|
||||
- The local filesystem accessibility to a container in a pod with `hostPath` has been tested on OSX/MacOS with xhyve, and Linux with VirtualBox.
|
||||
- Windows has not been tested with the supported VM drivers. Minikube does however officially support [Mounting Host Folders](https://github.com/kubernetes/minikube/blob/master/docs/host_folder_mount.md) per pod. Or you may manually sync your container whenever host files are changed with tools like [docker-sync](https://github.com/EugenMayer/docker-sync) or [docker-bg-sync](https://github.com/cweagans/docker-bg-sync).
|
||||
|
||||
#### Mounting steps
|
||||
1. The specified `hostPath` directory must already exist (create one if it does not).
|
||||
1. Install the chart
|
||||
```bash
|
||||
$ helm install --name my-release --set persistence.drupal.hostPath=/PATH/TO/HOST/MOUNT stable/drupal
|
||||
```
|
||||
This will mount the `drupal-data` volume into the `hostPath` directory, if the site has not already been initialized. If it has, your host machine changes will persist.
|
||||
1. Because the container can not control the host machine’s directory permissions, you must set the Drupal file directory permissions yourself and disable or clear Drupal cache. See Drupal Core’s [INSTALL.txt](http://cgit.drupalcode.org/drupal/tree/core/INSTALL.txt?h=8.3.x#n152) for setting file permissions, and see [Drupal handbook page](https://www.drupal.org/node/2598914) to disable cache, or [Drush handbook](https://drushcommands.com/drush-8x/cache/cache-rebuild/) to clear cache.
|
||||
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: mariadb
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
version: 1.0.5
|
||||
digest: sha256:784a2dfb3f8c0a334cfb6dd31381ea39bd5a3834f12d95f24aa074be558388e1
|
||||
generated: 2017-12-05T17:15:55.281989+01:00
|
||||
@@ -0,0 +1,5 @@
|
||||
dependencies:
|
||||
- name: mariadb
|
||||
version: 1.0.5
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
condition: mariadb.enabled
|
||||
@@ -0,0 +1,41 @@
|
||||
|
||||
*******************************************************************
|
||||
*** PLEASE BE PATIENT: Drupal may take a few minutes to install ***
|
||||
*******************************************************************
|
||||
|
||||
1. Get the Drupal URL:
|
||||
|
||||
{{- if .Values.ingress.hostname }}
|
||||
|
||||
You should be able to access your new Drupal installation through
|
||||
|
||||
http://{{- .Values.ingress.hostname }}/
|
||||
|
||||
{{- else if contains "LoadBalancer" .Values.serviceType }}
|
||||
|
||||
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||
Watch the status with: 'kubectl get svc --namespace {{ .Release.Namespace }} -w {{ template "drupal.fullname" . }}'
|
||||
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "drupal.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||
echo http://$SERVICE_IP/
|
||||
{{- else if contains "ClusterIP" .Values.serviceType }}
|
||||
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "drupal.fullname" . }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
echo http://127.0.0.1:8080/
|
||||
kubectl port-forward $POD_NAME 8080:80
|
||||
{{- end }}
|
||||
|
||||
{{- if contains "NodePort" .Values.serviceType }}
|
||||
|
||||
Or running:
|
||||
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "drupal.fullname" . }})
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
echo http://$NODE_IP:$NODE_PORT/
|
||||
|
||||
{{- end }}
|
||||
|
||||
2. Login with the following credentials
|
||||
|
||||
echo Username: {{ .Values.drupalUsername }}
|
||||
echo Password: $(kubectl get secret --namespace {{ .Release.Namespace }} {{ template "drupal.fullname" . }} -o jsonpath="{.data.drupal-password}" | base64 --decode)
|
||||
@@ -0,0 +1,24 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "drupal.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- 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 "drupal.fullname" -}}
|
||||
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- 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 "drupal.mariadb.fullname" -}}
|
||||
{{- printf "%s-%s" .Release.Name "mariadb" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,24 @@
|
||||
{{- if and .Values.persistence.enabled .Values.volumeMounts.apache.mountPath -}}
|
||||
kind: PersistentVolumeClaim
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: {{ template "drupal.fullname" . }}-apache
|
||||
labels:
|
||||
app: {{ template "drupal.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .Values.persistence.apache.accessMode | quote }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.persistence.apache.size | quote }}
|
||||
{{- if .Values.persistence.apache.storageClass }}
|
||||
{{- if (eq "-" .Values.persistence.apache.storageClass) }}
|
||||
storageClassName: ""
|
||||
{{- else }}
|
||||
storageClassName: "{{ .Values.persistence.apache.storageClass }}"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,107 @@
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "drupal.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "drupal.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ template "drupal.fullname" . }}
|
||||
spec:
|
||||
containers:
|
||||
- name: {{ template "drupal.fullname" . }}
|
||||
image: "{{ .Values.image }}"
|
||||
imagePullPolicy: {{ default "" .Values.imagePullPolicy | quote }}
|
||||
env:
|
||||
- name: ALLOW_EMPTY_PASSWORD
|
||||
{{- if .Values.allowEmptyPassword }}
|
||||
value: "yes"
|
||||
{{- else }}
|
||||
value: "no"
|
||||
{{- end }}
|
||||
- name: MARIADB_HOST
|
||||
{{- if .Values.mariadb.enabled }}
|
||||
value: {{ template "drupal.mariadb.fullname" . }}
|
||||
{{- else }}
|
||||
value: {{ default "" .Values.externalDatabase.host | quote }}
|
||||
{{- end }}
|
||||
- name: MARIADB_PORT_NUMBER
|
||||
value: "3306"
|
||||
- name: DRUPAL_DATABASE_NAME
|
||||
{{- if .Values.mariadb.enabled }}
|
||||
value: {{ default "" .Values.mariadb.mariadbDatabase | quote }}
|
||||
{{- else }}
|
||||
value: {{ default "" .Values.externalDatabase.database | quote }}
|
||||
{{- end }}
|
||||
- name: DRUPAL_DATABASE_USER
|
||||
{{- if .Values.mariadb.enabled }}
|
||||
value: {{ default "" .Values.mariadb.mariadbUser | quote }}
|
||||
{{- else }}
|
||||
value: {{ default "" .Values.externalDatabase.user | quote }}
|
||||
{{- end }}
|
||||
- name: DRUPAL_DATABASE_PASSWORD
|
||||
{{- if .Values.mariadb.enabled }}
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ template "drupal.mariadb.fullname" . }}
|
||||
key: mariadb-password
|
||||
{{- else }}
|
||||
value: {{ default "" .Values.externalDatabase.password | quote }}
|
||||
{{- end }}
|
||||
- name: DRUPAL_USERNAME
|
||||
value: {{ default "" .Values.drupalUsername | quote }}
|
||||
- name: DRUPAL_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ template "drupal.fullname" . }}
|
||||
key: drupal-password
|
||||
- name: DRUPAL_EMAIL
|
||||
value: {{ default "" .Values.drupalEmail | quote }}
|
||||
{{- if .Values.extraVars }}
|
||||
{{ toYaml .Values.extraVars | indent 8 }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 80
|
||||
- name: https
|
||||
containerPort: 443
|
||||
livenessProbe:
|
||||
{{ toYaml .Values.livenessProbe | indent 10 }}
|
||||
readinessProbe:
|
||||
{{ toYaml .Values.readinessProbe | indent 10 }}
|
||||
resources:
|
||||
{{ toYaml .Values.resources | indent 10 }}
|
||||
volumeMounts:
|
||||
- name: drupal-data
|
||||
mountPath: {{ .Values.volumeMounts.drupal.mountPath }}
|
||||
{{- if .Values.volumeMounts.apache.mountPath }}
|
||||
- name: apache-data
|
||||
mountPath: {{ .Values.volumeMounts.apache.mountPath }}
|
||||
{{- end }}
|
||||
{{- if .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{ toYaml .Values.imagePullSecrets | indent 8 }}
|
||||
{{- end }}
|
||||
volumes:
|
||||
- name: drupal-data
|
||||
{{- if .Values.persistence.enabled }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ .Values.persistence.drupal.existingClaim | default (printf "%s-drupal" (include "drupal.fullname" .)) }}
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
{{- if .Values.volumeMounts.apache.mountPath }}
|
||||
- name: apache-data
|
||||
{{- if .Values.persistence.enabled }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ template "drupal.fullname" . }}-apache
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,13 @@
|
||||
{{- if and .Values.persistence.enabled .Values.persistence.drupal.hostPath (not .Values.persistence.drupal.existingClaim) -}}
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: {{ template "drupal.fullname" . }}-drupal
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .Values.persistence.drupal.accessMode | quote }}
|
||||
capacity:
|
||||
storage: {{ .Values.persistence.drupal.size | quote }}
|
||||
hostPath:
|
||||
path: {{ .Values.persistence.drupal.hostPath | quote }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,27 @@
|
||||
{{- if and .Values.persistence.enabled (not .Values.persistence.drupal.existingClaim) -}}
|
||||
kind: PersistentVolumeClaim
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: {{ template "drupal.fullname" . }}-drupal
|
||||
labels:
|
||||
app: {{ template "drupal.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
spec:
|
||||
{{- if .Values.persistence.drupal.hostPath }}
|
||||
storageClassName: ""
|
||||
{{- end }}
|
||||
accessModes:
|
||||
- {{ .Values.persistence.drupal.accessMode | quote }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.persistence.drupal.size | quote }}
|
||||
{{- if and .Values.persistence.drupal.storageClass (not .Values.persistence.drupal.hostPath) -}}
|
||||
{{- if (eq "-" .Values.persistence.drupal.storageClass) }}
|
||||
storageClassName: ""
|
||||
{{- else }}
|
||||
storageClassName: "{{ .Values.persistence.drupal.storageClass }}"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,28 @@
|
||||
{{- if .Values.ingress.enabled -}}
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: {{ template "drupal.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "drupal.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
annotations:
|
||||
{{- range $key, $value := .Values.ingress.annotations }}
|
||||
{{ $key }}: {{ $value | quote }}
|
||||
{{- end }}
|
||||
spec:
|
||||
rules:
|
||||
- host: {{ .Values.ingress.hostname }}
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
backend:
|
||||
serviceName: {{ template "drupal.fullname" . }}
|
||||
servicePort: 80
|
||||
{{- if .Values.ingress.tls }}
|
||||
tls:
|
||||
{{ toYaml .Values.ingress.tls | indent 4 }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,16 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ template "drupal.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "drupal.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
type: Opaque
|
||||
data:
|
||||
{{ if .Values.drupalPassword }}
|
||||
drupal-password: {{ default "" .Values.drupalPassword | b64enc | quote }}
|
||||
{{ else }}
|
||||
drupal-password: {{ randAlphaNum 10 | b64enc | quote }}
|
||||
{{ end }}
|
||||
@@ -0,0 +1,20 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "drupal.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "drupal.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
spec:
|
||||
type: {{ .Values.serviceType }}
|
||||
ports:
|
||||
- name: http
|
||||
port: 80
|
||||
targetPort: http
|
||||
- name: https
|
||||
port: 443
|
||||
targetPort: https
|
||||
selector:
|
||||
app: {{ template "drupal.fullname" . }}
|
||||
@@ -0,0 +1,208 @@
|
||||
## Bitnami Drupal image version
|
||||
## ref: https://hub.docker.com/r/bitnami/drupal/tags/
|
||||
##
|
||||
image: bitnami/drupal:8.5.0-r0
|
||||
|
||||
## Optionally specify an array of imagePullSecrets.
|
||||
## Secrets must be manually created in the namespace.
|
||||
## ref: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod
|
||||
##
|
||||
# imagePullSecrets:
|
||||
# - name: myRegistryKeySecretName
|
||||
|
||||
## Specify a imagePullPolicy
|
||||
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
|
||||
##
|
||||
imagePullPolicy: IfNotPresent
|
||||
|
||||
## User of the application
|
||||
## ref: https://github.com/bitnami/bitnami-docker-drupal#configuration
|
||||
##
|
||||
drupalUsername: user
|
||||
|
||||
## Application password
|
||||
## Defaults to a random 10-character alphanumeric string if not set
|
||||
## ref: https://github.com/bitnami/bitnami-docker-drupal#configuration
|
||||
##
|
||||
# drupalPassword:
|
||||
|
||||
## Admin email
|
||||
## ref: https://github.com/bitnami/bitnami-docker-drupal#configuration
|
||||
##
|
||||
drupalEmail: user@example.com
|
||||
|
||||
## Set to `yes` to allow the container to be started with blank passwords
|
||||
## ref: https://github.com/bitnami/bitnami-docker-wordpress#environment-variables
|
||||
allowEmptyPassword: yes
|
||||
|
||||
##
|
||||
## External database configuration
|
||||
##
|
||||
externalDatabase:
|
||||
## Database host
|
||||
# host:
|
||||
|
||||
## Database user
|
||||
# user: bn_drupal
|
||||
|
||||
## Database password
|
||||
# password:
|
||||
|
||||
## Database name
|
||||
# database: bitnami_drupal
|
||||
|
||||
##
|
||||
## MariaDB chart configuration
|
||||
##
|
||||
mariadb:
|
||||
## Whether to use the database specified as a requirement or not. For example, to configure the chart with an existing database server.
|
||||
enabled: true
|
||||
|
||||
## MariaDB admin password
|
||||
## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#setting-the-root-password-on-first-run
|
||||
##
|
||||
# mariadbRootPassword:
|
||||
|
||||
## Create a database
|
||||
## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#creating-a-database-on-first-run
|
||||
##
|
||||
mariadbDatabase: bitnami_drupal
|
||||
|
||||
## Create a database user
|
||||
## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#creating-a-database-user-on-first-run
|
||||
##
|
||||
mariadbUser: bn_drupal
|
||||
|
||||
## Password for mariadbUser
|
||||
## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#creating-a-database-user-on-first-run
|
||||
##
|
||||
# mariadbPassword:
|
||||
|
||||
## Enable persistence using Persistent Volume Claims
|
||||
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
|
||||
##
|
||||
persistence:
|
||||
enabled: true
|
||||
## mariadb data Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
accessMode: ReadWriteOnce
|
||||
size: 8Gi
|
||||
|
||||
## Kubernetes configuration
|
||||
## For minikube, set this to NodePort, elsewhere use LoadBalancer
|
||||
## Use ClusterIP if your setup includes ingress controller
|
||||
##
|
||||
serviceType: LoadBalancer
|
||||
|
||||
## Configure Ingress resource that allow you to access the Drupal installation
|
||||
## Set up the URL
|
||||
## ref: http://kubernetes.io/docs/user-guide/ingress/
|
||||
##
|
||||
ingress:
|
||||
enabled: false
|
||||
# Used to create Ingress record (should used with ServiceType: ClusterIP).
|
||||
# hostname: drupal.local
|
||||
|
||||
## Ingress annotations
|
||||
##
|
||||
# annotations:
|
||||
# kubernetes.io/ingress.class: nginx
|
||||
|
||||
## Ingress TLS configuration
|
||||
## Secrets must be manually created in the namespace
|
||||
##
|
||||
# tls:
|
||||
# - secretName: wordpress.local-tls
|
||||
# hosts:
|
||||
# - drupal.local
|
||||
|
||||
## Enable persistence using Persistent Volume Claims
|
||||
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
|
||||
##
|
||||
persistence:
|
||||
enabled: true
|
||||
apache:
|
||||
## apache data Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
accessMode: ReadWriteOnce
|
||||
size: 1Gi
|
||||
drupal:
|
||||
## drupal data Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
accessMode: ReadWriteOnce
|
||||
size: 8Gi
|
||||
|
||||
## A manually managed Persistent Volume Claim
|
||||
## Requires persistence.enabled: true
|
||||
## If defined, PVC must be created manually before volume will be bound
|
||||
##
|
||||
# existingClaim:
|
||||
|
||||
## If defined, the drupal-data volume will mount to the specified hostPath.
|
||||
## Requires persistence.enabled: true
|
||||
## Requires persistence.existingClaim: nil|false
|
||||
## Default: nil.
|
||||
##
|
||||
# hostPath:
|
||||
|
||||
## Configure resource requests and limits
|
||||
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
|
||||
##
|
||||
resources:
|
||||
requests:
|
||||
memory: 512Mi
|
||||
cpu: 300m
|
||||
|
||||
## Configure volume mounts. This is useful for images whose data mount paths are
|
||||
## different than the default.
|
||||
## Setting volumeMounts.apache.mountPath to "" prevents Apache config mount.
|
||||
##
|
||||
volumeMounts:
|
||||
drupal:
|
||||
mountPath: /bitnami/drupal
|
||||
apache:
|
||||
mountPath: /bitnami/apache
|
||||
|
||||
## Pass extra environment variables to the Drupal container.
|
||||
##
|
||||
# extraVars:
|
||||
# - name: EXTRA_VAR_1
|
||||
# value: extra-var-value-1
|
||||
# - name: EXTRA_VAR_2
|
||||
# value: extra-var-value-2
|
||||
|
||||
## Configure liveness and readiness probes.
|
||||
## Drupal core exposes /user/login to unauthenticated requests, making it a good
|
||||
## default liveness and readiness path. However, that may not always be the
|
||||
## case. For example, if the image value is overridden to an image containing a
|
||||
## module that alters that route, or an image that does not auto-install Drupal.
|
||||
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/
|
||||
#
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /user/login
|
||||
port: http
|
||||
initialDelaySeconds: 120
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /user/login
|
||||
port: http
|
||||
initialDelaySeconds: 30
|
||||
@@ -0,0 +1 @@
|
||||
.git
|
||||
@@ -0,0 +1,21 @@
|
||||
name: ghost
|
||||
version: 2.1.16
|
||||
appVersion: 1.21.5
|
||||
description: A simple, powerful publishing platform that allows you to share your
|
||||
stories with the world
|
||||
keywords:
|
||||
- ghost
|
||||
- blog
|
||||
- http
|
||||
- web
|
||||
- application
|
||||
- nodejs
|
||||
- javascript
|
||||
home: http://www.ghost.org/
|
||||
icon: https://bitnami.com/assets/stacks/ghost/img/ghost-stack-220x234.png
|
||||
sources:
|
||||
- https://github.com/bitnami/bitnami-docker-ghost
|
||||
maintainers:
|
||||
- name: Bitnami
|
||||
email: containers@bitnami.com
|
||||
engine: gotpl
|
||||
@@ -0,0 +1,8 @@
|
||||
approvers:
|
||||
- prydonius
|
||||
- tompizmor
|
||||
- sameersbn
|
||||
reviewers:
|
||||
- prydonius
|
||||
- tompizmor
|
||||
- sameersbn
|
||||
@@ -0,0 +1,124 @@
|
||||
# Ghost
|
||||
|
||||
[Ghost](https://ghost.org/) is one of the most versatile open source content management systems on the market.
|
||||
|
||||
## TL;DR;
|
||||
|
||||
```console
|
||||
$ helm install stable/ghost
|
||||
```
|
||||
|
||||
## Introduction
|
||||
|
||||
This chart bootstraps a [Ghost](https://github.com/bitnami/bitnami-docker-ghost) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
|
||||
|
||||
It also packages the [Bitnami MariaDB chart](https://github.com/kubernetes/charts/tree/master/stable/mariadb) which is required for bootstrapping a MariaDB deployment for the database requirements of the Ghost application.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Kubernetes 1.4+ with Beta APIs enabled
|
||||
- PV provisioner support in the underlying infrastructure
|
||||
|
||||
## Installing the Chart
|
||||
|
||||
To install the chart with the release name `my-release`:
|
||||
|
||||
```console
|
||||
$ helm install --name my-release stable/ghost
|
||||
```
|
||||
|
||||
The command deploys Ghost on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation.
|
||||
|
||||
> **Tip**: List all releases using `helm list`
|
||||
|
||||
## Uninstalling the Chart
|
||||
|
||||
To uninstall/delete the `my-release` deployment:
|
||||
|
||||
```console
|
||||
$ helm delete my-release
|
||||
```
|
||||
|
||||
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||
|
||||
## Configuration
|
||||
|
||||
The following tables lists the configurable parameters of the Ghost chart and their default values.
|
||||
|
||||
| Parameter | Description | Default |
|
||||
|-------------------------------|---------------------------------------------------------------|----------------------------------------------------------|
|
||||
| `image` | Ghost image | `bitnami/ghost:{VERSION}` |
|
||||
| `imagePullPolicy` | Image pull policy | `Always` if `image` tag is `latest`, else `IfNotPresent` |
|
||||
| `ghostHost` | Ghost host to create application URLs | `nil` |
|
||||
| `ghostPort` | Ghost port to create application URLs along with host | `80` |
|
||||
| `ghostLoadBalancerIP` | `loadBalancerIP` for the Ghost Service | `nil` |
|
||||
| `ghostUsername` | User of the application | `user@example.com` |
|
||||
| `ghostPassword` | Application password | Randomly generated |
|
||||
| `ghostEmail` | Admin email | `user@example.com` |
|
||||
| `ghostBlogTitle` | Ghost Blog name | `User's Blog` |
|
||||
| `allowEmptyPassword` | Allow DB blank passwords | `yes` |
|
||||
| `externalDatabase.host` | Host of the external database | `nil` |
|
||||
| `externalDatabase.user` | Existing username in the external db | `bn_ghost` |
|
||||
| `externalDatabase.password` | Password for the above username | `nil` |
|
||||
| `externalDatabase.database` | Name of the existing database | `bitnami_ghost` |
|
||||
| `mariadb.enabled` | Whether or not to install MariaDB (disable if using external) | `true` |
|
||||
| `mariadb.mariadbRootPassword` | MariaDB admin password | `nil` |
|
||||
| `mariadb.mariadbDatabase` | MariaDB Database name to create | `bitnami_ghost` |
|
||||
| `mariadb.mariadbUser` | MariaDB Database user to create | `bn_ghost` |
|
||||
| `mariadb.mariadbPassword` | MariaDB Password for user | _random 10 character long alphanumeric string_ |
|
||||
| `serviceType` | Kubernetes Service type | `LoadBalancer` |
|
||||
| `persistence.enabled` | Enable persistence using PVC | `true` |
|
||||
| `persistence.storageClass` | PVC Storage Class for Ghost volume | `nil` (uses alpha storage annotation) |
|
||||
| `persistence.accessMode` | PVC Access Mode for Ghost volume | `ReadWriteOnce` |
|
||||
| `persistence.size` | PVC Storage Request for Ghost volume | `8Gi` |
|
||||
| `resources` | CPU/Memory resource requests/limits | Memory: `512Mi`, CPU: `300m` |
|
||||
|
||||
The above parameters map to the env variables defined in [bitnami/ghost](http://github.com/bitnami/bitnami-docker-ghost). For more information please refer to the [bitnami/ghost](http://github.com/bitnami/bitnami-docker-ghost) image documentation.
|
||||
|
||||
> **Note**:
|
||||
>
|
||||
> For the Ghost application function correctly, you should specify the `ghostHost` parameter to specify the FQDN (recommended) or the public IP address of the Ghost service.
|
||||
>
|
||||
> Optionally, you can specify the `ghostLoadBalancerIP` parameter to assign a reserved IP address to the Ghost service of the chart. However please note that this feature is only available on a few cloud providers (f.e. GKE).
|
||||
>
|
||||
> To reserve a public IP address on GKE:
|
||||
>
|
||||
> ```bash
|
||||
> $ gcloud compute addresses create ghost-public-ip
|
||||
> ```
|
||||
>
|
||||
> The reserved IP address can be associated to the Ghost service by specifying it as the value of the `ghostLoadBalancerIP` parameter while installing the chart.
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
||||
|
||||
```console
|
||||
$ helm install --name my-release \
|
||||
--set ghostUsername=admin,ghostPassword=password,mariadb.mariadbRootPassword=secretpassword \
|
||||
stable/ghost
|
||||
```
|
||||
|
||||
The above command sets the Ghost administrator account username and password to `admin` and `password` respectively. Additionally it sets the MariaDB `root` user password to `secretpassword`.
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
|
||||
|
||||
```console
|
||||
$ helm install --name my-release -f values.yaml stable/ghost
|
||||
```
|
||||
|
||||
> **Tip**: You can use the default [values.yaml](values.yaml)
|
||||
|
||||
## Using an existing database
|
||||
|
||||
Sometimes you may want to have Ghost connect to an external database rather than installing one inside your cluster, e.g. to use a managed database service, or use run a single database server for all your applications. To do this, the chart allows you to specify credentials for an external database under the [`externalDatabase` parameter](#configuration). You should also disable the MariaDB installation with the `mariadb.enabled` option. For example:
|
||||
|
||||
```console
|
||||
$ helm install stable/ghost \
|
||||
--set mariadb.enabled=false,externalDatabase.host=myexternalhost,externalDatabase.user=myuser,externalDatabase.password=mypassword,externalDatabase.database=mydatabase
|
||||
```
|
||||
|
||||
## Persistence
|
||||
|
||||
The [Bitnami Ghost](https://github.com/bitnami/bitnami-docker-ghost) image stores the Ghost data and configurations at the `/bitnami/ghost` and `/bitnami/apache` paths of the container.
|
||||
|
||||
Persistent Volume Claims are used to keep the data across deployments. This is known to work in GCE, AWS, and minikube.
|
||||
See the [Configuration](#configuration) section to configure the PVC or to disable persistence.
|
||||
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: mariadb
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
version: 0.7.0
|
||||
digest: sha256:f59f68030aa5c50b9e776b813804875fac911f91c2aa384e991f37a795c5ae34
|
||||
generated: 2017-11-27T16:40:56.867665764Z
|
||||
@@ -0,0 +1,5 @@
|
||||
dependencies:
|
||||
- name: mariadb
|
||||
version: 0.7.0
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
condition: mariadb.enabled
|
||||
@@ -0,0 +1,54 @@
|
||||
{{- if empty (include "ghost.host" .) -}}
|
||||
###############################################################################
|
||||
### ERROR: You did not provide an external host in your 'helm install' call ###
|
||||
###############################################################################
|
||||
|
||||
This deployment will be incomplete until you configure Ghost with a resolvable
|
||||
host. To configure Ghost with the URL of your service:
|
||||
|
||||
1. Get the Ghost URL by running:
|
||||
|
||||
{{- if contains "NodePort" .Values.serviceType }}
|
||||
|
||||
export APP_HOST=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
|
||||
{{- else if contains "LoadBalancer" .Values.serviceType }}
|
||||
|
||||
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||
Watch the status with: 'kubectl get svc --namespace {{ .Release.Namespace }} -w {{ template "ghost.fullname" . }}'
|
||||
|
||||
export APP_HOST=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "ghost.fullname" . }} --template "{{ "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}" }}")
|
||||
{{- end }}
|
||||
|
||||
2. Complete your Ghost deployment by running:
|
||||
|
||||
helm upgrade {{ .Release.Name }} \
|
||||
--set serviceType={{ .Values.serviceType }},ghostHost=$APP_HOST stable/ghost
|
||||
{{- else -}}
|
||||
1. Get the Ghost URL by running:
|
||||
|
||||
{{- if eq .Values.serviceType "ClusterIP" }}
|
||||
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "ghost.fullname" . }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
echo Blog URL : http://127.0.0.1:{{ default "80" .Values.ghostPort }}/
|
||||
echo Admin URL : http://127.0.0.1:{{ default "80" .Values.ghostPort }}/ghost
|
||||
kubectl port-forward $POD_NAME {{ default "80" .Values.ghostPort }}:2368
|
||||
|
||||
{{- else if eq .Values.serviceType "NodePort" }}
|
||||
export APP_HOST=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
export APP_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "fullname" . }})
|
||||
|
||||
echo Blog URL : http://$APP_HOST:$APP_PORT/
|
||||
echo Admin URL : http://$APP_HOST:$APP_PORT/ghost
|
||||
|
||||
{{- else }}
|
||||
|
||||
echo Blog URL : http://{{ include "ghost.host" . }}/
|
||||
echo Admin URL : http://{{ include "ghost.host" . }}/ghost
|
||||
{{- end }}
|
||||
|
||||
2. Get your Ghost login credentials by running:
|
||||
|
||||
echo Email: {{ .Values.ghostEmail }}
|
||||
echo Password: $(kubectl get secret --namespace {{ .Release.Namespace }} {{ template "ghost.fullname" . }} -o jsonpath="{.data.ghost-password}" | base64 --decode)
|
||||
{{- end }}
|
||||
@@ -0,0 +1,45 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "ghost.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- 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 "ghost.fullname" -}}
|
||||
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- 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 "ghost.mariadb.fullname" -}}
|
||||
{{- printf "%s-%s" .Release.Name "mariadb" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Get the user defined LoadBalancerIP for this release.
|
||||
Note, returns 127.0.0.1 if using ClusterIP.
|
||||
*/}}
|
||||
{{- define "ghost.serviceIP" -}}
|
||||
{{- if eq .Values.serviceType "ClusterIP" -}}
|
||||
127.0.0.1
|
||||
{{- else -}}
|
||||
{{- index .Values (printf "%sLoadBalancerIP" .Chart.Name) | default "" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Gets the host to be used for this application.
|
||||
If not using ClusterIP, or if a host or LoadBalancerIP is not defined, the value will be empty.
|
||||
*/}}
|
||||
{{- define "ghost.host" -}}
|
||||
{{- $host := index .Values (printf "%sHost" .Chart.Name) | default "" -}}
|
||||
{{- default (include "ghost.serviceIP" .) $host -}}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,130 @@
|
||||
{{- if include "ghost.host" . -}}
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "ghost.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "ghost.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ template "ghost.fullname" . }}
|
||||
spec:
|
||||
initContainers:
|
||||
- name: volume-permissions
|
||||
image: "{{ .Values.volumePermissions.image.name }}:{{ .Values.volumePermissions.image.tag }}"
|
||||
imagePullPolicy: {{ default "" .Values.volumePermissions.image.pullPolicy | quote }}
|
||||
command: ['sh', '-c', 'chmod -R g+rwX /bitnami']
|
||||
volumeMounts:
|
||||
- mountPath: /bitnami
|
||||
name: ghost-data
|
||||
containers:
|
||||
- name: {{ template "ghost.fullname" . }}
|
||||
image: "{{ .Values.image }}"
|
||||
imagePullPolicy: {{ default "" .Values.imagePullPolicy | quote }}
|
||||
env:
|
||||
- name: ALLOW_EMPTY_PASSWORD
|
||||
{{- if .Values.allowEmptyPassword }}
|
||||
value: "yes"
|
||||
{{- else }}
|
||||
value: "no"
|
||||
{{- end }}
|
||||
- name: MARIADB_HOST
|
||||
{{- if .Values.mariadb.enabled }}
|
||||
value: {{ template "ghost.mariadb.fullname" . }}
|
||||
{{- else }}
|
||||
value: {{ default "" .Values.externalDatabase.host | quote }}
|
||||
{{- end }}
|
||||
- name: MARIADB_PORT_NUMBER
|
||||
value: "3306"
|
||||
- name: GHOST_DATABASE_NAME
|
||||
{{- if .Values.mariadb.enabled }}
|
||||
value: {{ default "" .Values.mariadb.mariadbDatabase | quote }}
|
||||
{{- else }}
|
||||
value: {{ default "" .Values.externalDatabase.database | quote }}
|
||||
{{- end }}
|
||||
- name: GHOST_DATABASE_USER
|
||||
{{- if .Values.mariadb.enabled }}
|
||||
value: {{ default "" .Values.mariadb.mariadbUser | quote }}
|
||||
{{- else }}
|
||||
value: {{ default "" .Values.externalDatabase.user | quote }}
|
||||
{{- end }}
|
||||
- name: GHOST_DATABASE_PASSWORD
|
||||
{{- if .Values.mariadb.enabled }}
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ template "ghost.mariadb.fullname" . }}
|
||||
key: mariadb-password
|
||||
{{- else }}
|
||||
value: {{ default "" .Values.externalDatabase.password | quote }}
|
||||
{{- end }}
|
||||
- name: GHOST_HOST
|
||||
value: {{ include "ghost.host" . | quote }}
|
||||
- name: GHOST_PORT_NUMBER
|
||||
value: {{ default "80" .Values.ghostPort | quote }}
|
||||
- name: GHOST_USERNAME
|
||||
value: {{ default "" .Values.ghostUsername | quote }}
|
||||
- name: GHOST_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ template "ghost.fullname" . }}
|
||||
key: ghost-password
|
||||
- name: GHOST_EMAIL
|
||||
value: {{ default "" .Values.ghostEmail | quote }}
|
||||
- name: BLOG_TITLE
|
||||
value: {{ default "" .Values.ghostBlogTitle | quote }}
|
||||
- name: SMTP_HOST
|
||||
value: {{ default "" .Values.smtpHost | quote }}
|
||||
- name: SMTP_PORT
|
||||
value: {{ default "" .Values.smtpPort | quote }}
|
||||
- name: SMTP_USER
|
||||
value: {{ default "" .Values.smtpUser | quote }}
|
||||
- name: SMTP_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ template "ghost.fullname" . }}
|
||||
key: smtp-password
|
||||
- name: SMTP_SERVICE
|
||||
value: {{ default "" .Values.smtpService | quote }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 2368
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /ghost
|
||||
port: http
|
||||
httpHeaders:
|
||||
- name: Host
|
||||
value: {{ include "ghost.host" . | quote }}
|
||||
initialDelaySeconds: 120
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 6
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /ghost
|
||||
port: http
|
||||
httpHeaders:
|
||||
- name: Host
|
||||
value: {{ include "ghost.host" . | quote }}
|
||||
initialDelaySeconds: 30
|
||||
timeoutSeconds: 3
|
||||
periodSeconds: 5
|
||||
resources:
|
||||
{{ toYaml .Values.resources | indent 10 }}
|
||||
volumeMounts:
|
||||
- name: ghost-data
|
||||
mountPath: /bitnami/ghost
|
||||
volumes:
|
||||
- name: ghost-data
|
||||
{{- if .Values.persistence.enabled }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ template "ghost.fullname" . }}
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,24 @@
|
||||
{{- if .Values.persistence.enabled -}}
|
||||
kind: PersistentVolumeClaim
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: {{ template "ghost.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "ghost.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .Values.persistence.accessMode | quote }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.persistence.size | quote }}
|
||||
{{- if .Values.persistence.storageClass }}
|
||||
{{- if (eq "-" .Values.persistence.storageClass) }}
|
||||
storageClassName: ""
|
||||
{{- else }}
|
||||
storageClassName: "{{ .Values.persistence.storageClass }}"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,17 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ template "ghost.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "ghost.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
type: Opaque
|
||||
data:
|
||||
{{ if .Values.ghostPassword }}
|
||||
ghost-password: {{ .Values.ghostPassword | b64enc | quote }}
|
||||
{{ else }}
|
||||
ghost-password: {{ randAlphaNum 10 | b64enc | quote }}
|
||||
{{ end }}
|
||||
smtp-password: {{ default "" .Values.smtpPassword | b64enc | quote }}
|
||||
@@ -0,0 +1,20 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "ghost.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "ghost.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
spec:
|
||||
type: {{ .Values.serviceType }}
|
||||
{{- if eq .Values.serviceType "LoadBalancer" }}
|
||||
loadBalancerIP: {{ default "" .Values.ghostLoadBalancerIP }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: http
|
||||
port: {{ default "80" .Values.ghostPort }}
|
||||
targetPort: http
|
||||
selector:
|
||||
app: {{ template "ghost.fullname" . }}
|
||||
@@ -0,0 +1,155 @@
|
||||
## Bitnami Ghost image version
|
||||
## ref: https://hub.docker.com/r/bitnami/ghost/tags/
|
||||
##
|
||||
image: bitnami/ghost:1.21.5-r0
|
||||
|
||||
## Busybox image used to configure volume permissions
|
||||
##
|
||||
volumePermissions:
|
||||
image:
|
||||
name: busybox
|
||||
tag: 1.27.1
|
||||
# pullPolicy:
|
||||
|
||||
## Specify a imagePullPolicy
|
||||
## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
|
||||
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
|
||||
##
|
||||
# imagePullPolicy:
|
||||
|
||||
## Ghost host to create application URLs
|
||||
## ref: https://github.com/bitnami/bitnami-docker-ghost#configuration
|
||||
##
|
||||
# ghostHost:
|
||||
|
||||
## Ghost port to create application URLs along with host.
|
||||
## ref: https://github.com/bitnami/bitnami-docker-ghost#configuration
|
||||
##
|
||||
ghostPort: 80
|
||||
|
||||
## loadBalancerIP for the Ghost Service (optional, cloud specific)
|
||||
## ref: http://kubernetes.io/docs/user-guide/services/#type-loadbalancer
|
||||
##
|
||||
# ghostLoadBalancerIP:
|
||||
|
||||
## User of the application
|
||||
## ref: https://github.com/bitnami/bitnami-docker-ghost#configuration
|
||||
##
|
||||
ghostUsername: user@example.com
|
||||
|
||||
## Application password
|
||||
## Defaults to a random 10-character alphanumeric string if not set
|
||||
## ref: https://github.com/bitnami/bitnami-docker-ghost#configuration
|
||||
##
|
||||
# ghostPassword:
|
||||
|
||||
## Admin email
|
||||
## ref: https://github.com/bitnami/bitnami-docker-ghost#configuration
|
||||
##
|
||||
ghostEmail: user@example.com
|
||||
|
||||
## Ghost Blog name
|
||||
## ref: https://github.com/bitnami/bitnami-docker-ghost#environment-variables
|
||||
##
|
||||
ghostBlogTitle: User's Blog
|
||||
|
||||
## Set to `yes` to allow the container to be started with blank passwords
|
||||
## ref: https://github.com/bitnami/bitnami-docker-wordpress#environment-variables
|
||||
allowEmptyPassword: yes
|
||||
|
||||
## SMTP mail delivery configuration
|
||||
## ref: https://github.com/bitnami/bitnami-docker-redmine/#smtp-configuration
|
||||
##
|
||||
# smtpHost:
|
||||
# smtpPort:
|
||||
# smtpUser:
|
||||
# smtpPassword:
|
||||
# smtpService:
|
||||
|
||||
##
|
||||
## External database configuration
|
||||
##
|
||||
externalDatabase:
|
||||
## Database host
|
||||
# host:
|
||||
|
||||
## Database user
|
||||
# user: bn_ghost
|
||||
|
||||
## Database password
|
||||
# password:
|
||||
|
||||
## Database name
|
||||
# database: bitnami_ghost
|
||||
|
||||
##
|
||||
## MariaDB chart configuration
|
||||
##
|
||||
mariadb:
|
||||
## Whether to use the database specified as a requirement or not. For example, to configure the chart with an existing database server.
|
||||
enabled: true
|
||||
|
||||
## MariaDB admin password
|
||||
## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#setting-the-root-password-on-first-run
|
||||
##
|
||||
# mariadbRootPassword:
|
||||
## Create a database
|
||||
|
||||
## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#creating-a-database-on-first-run
|
||||
##
|
||||
mariadbDatabase: bitnami_ghost
|
||||
|
||||
## Create a database user
|
||||
## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#creating-a-database-user-on-first-run
|
||||
##
|
||||
mariadbUser: bn_ghost
|
||||
|
||||
## Password for mariadbUser
|
||||
## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#creating-a-database-user-on-first-run
|
||||
##
|
||||
# mariadbPassword:
|
||||
|
||||
## Enable persistence using Persistent Volume Claims
|
||||
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
|
||||
##
|
||||
persistence:
|
||||
enabled: true
|
||||
## mariadb data Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
accessMode: ReadWriteOnce
|
||||
size: 8Gi
|
||||
|
||||
## Kubernetes configuration
|
||||
## For minikube, set this to NodePort, elsewhere use LoadBalancer
|
||||
##
|
||||
serviceType: LoadBalancer
|
||||
|
||||
## Enable persistence using Persistent Volume Claims
|
||||
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
|
||||
##
|
||||
persistence:
|
||||
enabled: true
|
||||
## ghost data Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
accessMode: ReadWriteOnce
|
||||
size: 8Gi
|
||||
|
||||
## Configure resource requests and limits
|
||||
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
|
||||
##
|
||||
resources:
|
||||
requests:
|
||||
memory: 512Mi
|
||||
cpu: 300m
|
||||
@@ -0,0 +1 @@
|
||||
.git
|
||||
@@ -0,0 +1,21 @@
|
||||
name: jasperreports
|
||||
version: 0.3.0
|
||||
appVersion: 6.4.2
|
||||
description: The JasperReports server can be used as a stand-alone or embedded reporting
|
||||
and BI server that offers web-based reporting, analytic tools and visualization,
|
||||
and a dashboard feature for compiling multiple custom views
|
||||
keywords:
|
||||
- business intelligence
|
||||
- java
|
||||
- jasper
|
||||
- reporting
|
||||
- analytic
|
||||
- visualization
|
||||
home: http://community.jaspersoft.com/project/jasperreports-server
|
||||
sources:
|
||||
- https://github.com/bitnami/bitnami-docker-jasperreports
|
||||
maintainers:
|
||||
- name: bitnami-bot
|
||||
email: containers@bitnami.com
|
||||
engine: gotpl
|
||||
icon: https://bitnami.com/assets/stacks/jasperserver/img/jasperserver-stack-110x117.png
|
||||
@@ -0,0 +1,8 @@
|
||||
approvers:
|
||||
- prydonius
|
||||
- tompizmor
|
||||
- sameersbn
|
||||
reviewers:
|
||||
- prydonius
|
||||
- tompizmor
|
||||
- sameersbn
|
||||
@@ -0,0 +1,105 @@
|
||||
# JasperReports
|
||||
|
||||
[JasperReports](http://community.jaspersoft.com/project/jasperreports-server) The JasperReports server can be used as a stand-alone or embedded reporting and BI server that offers web-based reporting, analytic tools and visualization, and a dashboard feature for compiling multiple custom views
|
||||
|
||||
|
||||
## TL;DR;
|
||||
|
||||
```console
|
||||
$ helm install stable/jasperreports
|
||||
```
|
||||
|
||||
## Introduction
|
||||
|
||||
This chart bootstraps a [JasperReports](https://github.com/bitnami/bitnami-docker-jasperreports) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
|
||||
|
||||
It also packages the [Bitnami MariaDB chart](https://github.com/kubernetes/charts/tree/master/stable/mariadb) which is required for bootstrapping a MariaDB deployment for the database requirements of the JasperReports application.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Kubernetes 1.4+ with Beta APIs enabled
|
||||
- PV provisioner support in the underlying infrastructure
|
||||
|
||||
## Installing the Chart
|
||||
|
||||
To install the chart with the release name `my-release`:
|
||||
|
||||
```console
|
||||
$ helm install --name my-release stable/jasperreports
|
||||
```
|
||||
|
||||
The command deploys JasperReports on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation.
|
||||
|
||||
> **Tip**: List all releases using `helm list`
|
||||
|
||||
## Uninstalling the Chart
|
||||
|
||||
To uninstall/delete the `my-release` deployment:
|
||||
|
||||
```console
|
||||
$ helm delete my-release
|
||||
```
|
||||
|
||||
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||
|
||||
## Configuration
|
||||
|
||||
The following tables lists the configurable parameters of the JasperReports chart and their default values.
|
||||
|
||||
| Parameter | Description | Default |
|
||||
|-------------------------------|----------------------------------------------|----------------------------------------------------------|
|
||||
| `image` | JasperReports image | `bitnami/jasperreports:{VERSION}` |
|
||||
| `imagePullPolicy` | Image pull policy | `IfNotPresent` |
|
||||
| `jasperreportsUsername` | User of the application | `user` |
|
||||
| `jasperreportsPassword` | Application password | _random 10 character long alphanumeric string_ |
|
||||
| `jasperreportsEmail` | User email | `user@example.com` |
|
||||
| `smtpHost` | SMTP host | `nil` |
|
||||
| `smtpPort` | SMTP port | `nil` |
|
||||
| `smtpEmail` | SMTP email | `nil` |
|
||||
| `smtpUser` | SMTP user | `nil` |
|
||||
| `smtpPassword` | SMTP password | `nil` |
|
||||
| `smtpProtocol` | SMTP protocol [`ssl`, `none`] | `nil` |
|
||||
| `allowEmptyPassword` | Allow DB blank passwords | `yes` |
|
||||
| `externalDatabase.host` | Host of the external database | `nil` |
|
||||
| `externalDatabase.port` | Port of the external database | `3306` |
|
||||
| `externalDatabase.user` | Existing username in the external db | `bn_jasperreports` |
|
||||
| `externalDatabase.password` | Password for the above username | `nil` |
|
||||
| `externalDatabase.database` | Name of the existing databse | `bitnami_jasperreports` |
|
||||
| `mariadb.enabled` | Wheter to use or not the mariadb chart | `true` |
|
||||
| `mariadb.mariadbDatabase` | Database name to create | `bitnami_jasperreports` |
|
||||
| `mariadb.mariadbUser` | Database user to create | `bn_jasperreports` |
|
||||
| `mariadb.mariadbPassword` | Password for the database | `nil` |
|
||||
| `mariadb.mariadbRootPassword` | MariaDB admin password | `nil` |
|
||||
| `serviceType` | Kubernetes Service type | `LoadBalancer` |
|
||||
| `persistence.enabled` | Enable persistence using PVC | `true` |
|
||||
| `persistence.storageClass` | PVC Storage Class for JasperReports volume | `nil` (uses alpha storage annotation) |
|
||||
| `persistence.accessMode` | PVC Access Mode for JasperReports volume | `ReadWriteOnce` |
|
||||
| `persistence.size` | PVC Storage Request for JasperReports volume | `8Gi` |
|
||||
| `resources` | CPU/Memory resource requests/limits | Memory: `512Mi`, CPU: `300m` |
|
||||
|
||||
The above parameters map to the env variables defined in [bitnami/jasperreports](http://github.com/bitnami/bitnami-docker-jasperreports). For more information please refer to the [bitnami/jasperreports](http://github.com/bitnami/bitnami-docker-jasperreports) image documentation.
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
||||
|
||||
```console
|
||||
$ helm install --name my-release \
|
||||
--set jasperreportsUsername=admin,jasperreportsPassword=password,mariadb.mariadbRootPassword=secretpassword \
|
||||
stable/jasperreports
|
||||
```
|
||||
|
||||
The above command sets the JasperReports administrator account username and password to `admin` and `password` respectively. Additionally it sets the MariaDB `root` user password to `secretpassword`.
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
|
||||
|
||||
```console
|
||||
$ helm install --name my-release -f values.yaml stable/jasperreports
|
||||
```
|
||||
|
||||
> **Tip**: You can use the default [values.yaml](values.yaml)
|
||||
|
||||
## Persistence
|
||||
|
||||
The [Bitnami JasperReports](https://github.com/bitnami/bitnami-docker-jasperreports) image stores the JasperReports data and configurations at the `/bitnami/jasperreports` path of the container.
|
||||
|
||||
Persistent Volume Claims are used to keep the data across deployments. This is known to work in GCE, AWS, and minikube.
|
||||
See the [Configuration](#configuration) section to configure the PVC or to disable persistence.
|
||||
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: mariadb
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
version: 0.7.0
|
||||
digest: sha256:f59f68030aa5c50b9e776b813804875fac911f91c2aa384e991f37a795c5ae34
|
||||
generated: 2018-03-16T15:44:56.555248+01:00
|
||||
@@ -0,0 +1,5 @@
|
||||
dependencies:
|
||||
- name: mariadb
|
||||
version: 0.7.0
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
condition: mariadb.enabled
|
||||
@@ -0,0 +1,45 @@
|
||||
{{- if or .Values.mariadb.enabled .Values.externalDatabase.host -}}
|
||||
** Please be patient while the chart is being deployed **
|
||||
|
||||
1. Get the JasperReports URL by running:
|
||||
|
||||
{{- if contains "NodePort" .Values.serviceType }}
|
||||
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "jasperreports.fullname" . }})
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
echo http://$NODE_IP:$NODE_PORT/
|
||||
|
||||
{{- else if contains "LoadBalancer" .Values.serviceType }}
|
||||
|
||||
** Please ensure an external IP is associated to the {{ template "jasperreports.fullname" . }} service before proceeding **
|
||||
** Watch the status using: kubectl get svc --namespace {{ .Release.Namespace }} -w {{ template "jasperreports.fullname" . }} **
|
||||
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "jasperreports.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||
echo http://$SERVICE_IP/jasperserver/
|
||||
{{- else if contains "ClusterIP" .Values.serviceType }}
|
||||
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "jasperreports.fullname" . }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
echo http://127.0.0.1:8080/jasperserver/
|
||||
kubectl port-forward $POD_NAME 8080:8080
|
||||
{{- end }}
|
||||
|
||||
2. Login with the following credentials
|
||||
|
||||
echo Username: {{ .Values.jasperreportsUsername }}
|
||||
echo Password: $(kubectl get secret --namespace {{ .Release.Namespace }} {{ template "jasperreports.fullname" . }} -o jsonpath="{.data.jasperreports-password}" | base64 --decode)
|
||||
|
||||
{{- else -}}
|
||||
|
||||
########################################################################################
|
||||
### ERROR: You did not provide an external database host in your 'helm install' call ###
|
||||
########################################################################################
|
||||
|
||||
This deployment will be incomplete until you configure JasperReports with a resolvable database
|
||||
host. To configure JasperReports to use and external database host:
|
||||
|
||||
|
||||
1. Complete your JasperReports deployment by running:
|
||||
|
||||
helm upgrade {{ .Release.Name }} --set serviceType={{ .Values.serviceType }},mariadb.enabled=false,externalDatabase.host=YOUR_EXTERNAL_DATABASE_HOST stable/jasperreports
|
||||
|
||||
{{- end }}
|
||||
@@ -0,0 +1,24 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "jasperreports.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- 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 "jasperreports.fullname" -}}
|
||||
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- 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 "jasperreports.mariadb.fullname" -}}
|
||||
{{- printf "%s-%s" .Release.Name "mariadb" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,105 @@
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "jasperreports.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "jasperreports.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
spec:
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ template "jasperreports.fullname" . }}
|
||||
spec:
|
||||
containers:
|
||||
- name: {{ template "jasperreports.fullname" . }}
|
||||
image: "{{ .Values.image }}"
|
||||
imagePullPolicy: {{ .Values.imagePullPolicy | quote }}
|
||||
env:
|
||||
- name: ALLOW_EMPTY_PASSWORD
|
||||
value: {{ .Values.allowEmptyPassword | quote }}
|
||||
{{- if .Values.mariadb.enabled }}
|
||||
- name: MARIADB_HOST
|
||||
value: {{ template "jasperreports.mariadb.fullname" . }}
|
||||
- name: MARIADB_PORT_NUMBER
|
||||
value: "3306"
|
||||
- name: JASPERREPORTS_DATABASE_NAME
|
||||
value: {{ .Values.mariadb.mariadbDatabase | quote }}
|
||||
- name: JASPERREPORTS_DATABASE_USER
|
||||
value: {{ .Values.mariadb.mariadbUser | quote }}
|
||||
- name: JASPERREPORTS_DATABASE_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ template "jasperreports.mariadb.fullname" . }}
|
||||
key: mariadb-password
|
||||
{{- else }}
|
||||
- name: MARIADB_HOST
|
||||
value: {{ .Values.externalDatabase.host | quote }}
|
||||
- name: MARIADB_PORT_NUMBER
|
||||
value: {{ .Values.externalDatabase.port | quote }}
|
||||
- name: JASPERREPORTS_DATABASE_NAME
|
||||
value: {{ .Values.externalDatabase.database | quote }}
|
||||
- name: JASPERREPORTS_DATABASE_USER
|
||||
value: {{ .Values.externalDatabase.user | quote }}
|
||||
- name: JASPERREPORTS_DATABASE_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ printf "%s-%s" .Release.Name "externaldb" }}
|
||||
key: db-password
|
||||
{{- end }}
|
||||
- name: JASPERREPORTS_USERNAME
|
||||
value: {{ .Values.jasperreportsUsername | quote }}
|
||||
- name: JASPERREPORTS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ template "jasperreports.fullname" . }}
|
||||
key: jasperreports-password
|
||||
- name: JASPERREPORTS_EMAIL
|
||||
value: {{ .Values.jasperreportsEmail | quote }}
|
||||
- name: SMTP_HOST
|
||||
value: {{ .Values.smtpHost | quote }}
|
||||
- name: SMTP_PORT
|
||||
value: {{ .Values.smtpPort | quote }}
|
||||
- name: SMTP_EMAIL
|
||||
value: {{ .Values.smtpEmail| quote }}
|
||||
- name: SMTP_USER
|
||||
value: {{ .Values.smtpUser | quote }}
|
||||
- name: SMTP_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ template "jasperreports.fullname" . }}
|
||||
key: smtp-password
|
||||
- name: SMTP_PROTOCOL
|
||||
value: {{ .Values.smtpProtocol | quote }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8080
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /jasperserver/login.html
|
||||
port: http
|
||||
initialDelaySeconds: 300
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 6
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /jasperserver/login.html
|
||||
port: http
|
||||
initialDelaySeconds: 30
|
||||
timeoutSeconds: 3
|
||||
periodSeconds: 5
|
||||
resources:
|
||||
{{ toYaml .Values.resources | indent 10 }}
|
||||
volumeMounts:
|
||||
- name: jasperreports-data
|
||||
mountPath: /bitnami/jasperreports
|
||||
volumes:
|
||||
- name: jasperreports-data
|
||||
{{- if .Values.persistence.enabled }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ template "jasperreports.fullname" . }}
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,14 @@
|
||||
{{- if not .Values.mariadb.enabled }}
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ printf "%s-%s" .Release.Name "externaldb" }}
|
||||
labels:
|
||||
app: {{ printf "%s-%s" .Release.Name "externaldb" }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
type: Opaque
|
||||
data:
|
||||
db-password: {{ default "" .Values.externalDatabase.password | b64enc | quote }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,24 @@
|
||||
{{- if .Values.persistence.enabled -}}
|
||||
kind: PersistentVolumeClaim
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: {{ template "jasperreports.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "jasperreports.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .Values.persistence.accessMode | quote }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.persistence.size | quote }}
|
||||
{{- if .Values.persistence.storageClass }}
|
||||
{{- if (eq "-" .Values.persistence.storageClass) }}
|
||||
storageClassName: ""
|
||||
{{- else }}
|
||||
storageClassName: "{{ .Values.persistence.storageClass }}"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,17 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ template "jasperreports.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "jasperreports.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
type: Opaque
|
||||
data:
|
||||
{{ if .Values.jasperreportsPassword }}
|
||||
jasperreports-password: {{ default "" .Values.jasperreportsPassword | b64enc | quote }}
|
||||
{{ else }}
|
||||
jasperreports-password: {{ randAlphaNum 10 | b64enc | quote }}
|
||||
{{ end }}
|
||||
smtp-password: {{ default "" .Values.smtpPassword | b64enc | quote }}
|
||||
@@ -0,0 +1,17 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "jasperreports.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "jasperreports.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
spec:
|
||||
type: {{ .Values.serviceType }}
|
||||
ports:
|
||||
- name: http
|
||||
port: 80
|
||||
targetPort: http
|
||||
selector:
|
||||
app: {{ template "jasperreports.fullname" . }}
|
||||
@@ -0,0 +1,131 @@
|
||||
## Bitnami JasperReports image version
|
||||
## ref: https://hub.docker.com/r/bitnami/jasperreports/tags/
|
||||
##
|
||||
image: bitnami/jasperreports:6.4.2-r4
|
||||
|
||||
## Specify a imagePullPolicy
|
||||
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
|
||||
##
|
||||
imagePullPolicy: IfNotPresent
|
||||
|
||||
## User of the application
|
||||
## ref: https://github.com/bitnami/bitnami-docker-jasperreports#configuration
|
||||
##
|
||||
jasperreportsUsername: user
|
||||
|
||||
## Application password
|
||||
## Defaults to a random 10-character alphanumeric string if not set
|
||||
## ref: https://github.com/bitnami/bitnami-docker-jasperreports#configuration
|
||||
##
|
||||
# jasperreportsPassword:
|
||||
#
|
||||
## Application mail
|
||||
## ref: https://github.com/bitnami/bitnami-docker-jasperreports#configuration
|
||||
##
|
||||
jasperreportsEmail: user@example.com
|
||||
|
||||
## Set to `yes` to allow the container to be started with blank passwords
|
||||
## ref: https://github.com/bitnami/bitnami-docker-jasperreports#environment-variables
|
||||
allowEmptyPassword: "yes"
|
||||
|
||||
##
|
||||
## External database configuration
|
||||
##
|
||||
externalDatabase:
|
||||
## Database host
|
||||
host:
|
||||
|
||||
## Database host
|
||||
port: 3306
|
||||
|
||||
## Database user
|
||||
user: bn_jasperreports
|
||||
|
||||
## Database password
|
||||
password:
|
||||
|
||||
## Database name
|
||||
database: bitnami_jasperreports
|
||||
|
||||
|
||||
## SMTP mail delivery configuration
|
||||
## ref: https://github.com/bitnami/bitnami-docker-jasperreports#smtp-configuration
|
||||
##
|
||||
# smtpHost:
|
||||
# smtpPort:
|
||||
# smtpEmail:
|
||||
# smtpUser:
|
||||
# smtpPassword:
|
||||
# smtpProtocol:
|
||||
|
||||
##
|
||||
## MariaDB chart configuration
|
||||
##
|
||||
mariadb:
|
||||
## Whether to deploy a mariadb server to satisfy the applications database requirements. To use an external database set this to false and configure the externalDatabase parameters
|
||||
enabled: true
|
||||
|
||||
## Create a database
|
||||
## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#creating-a-database-on-first-run
|
||||
##
|
||||
mariadbDatabase: bitnami_jasperreports
|
||||
|
||||
## Create a database user
|
||||
## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#creating-a-database-user-on-first-run
|
||||
##
|
||||
mariadbUser: bn_jasperreports
|
||||
|
||||
## Password for mariadbUser
|
||||
## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#creating-a-database-user-on-first-run
|
||||
##
|
||||
# mariadbPassword:
|
||||
|
||||
## MariaDB admin password
|
||||
## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#setting-the-root-password-on-first-run
|
||||
##
|
||||
# mariadbRootPassword:
|
||||
|
||||
## Enable persistence using Persistent Volume Claims
|
||||
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
|
||||
##
|
||||
persistence:
|
||||
enabled: true
|
||||
## mariadb data Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
accessMode: ReadWriteOnce
|
||||
size: 8Gi
|
||||
|
||||
## Kubernetes configuration
|
||||
## For minikube, set this to NodePort, elsewhere use LoadBalancer
|
||||
##
|
||||
serviceType: LoadBalancer
|
||||
|
||||
## Enable persistence using Persistent Volume Claims
|
||||
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
|
||||
##
|
||||
persistence:
|
||||
enabled: true
|
||||
## database data Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
accessMode: ReadWriteOnce
|
||||
size: 8Gi
|
||||
|
||||
## Configure resource requests and limits
|
||||
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
|
||||
##
|
||||
resources:
|
||||
requests:
|
||||
memory: 512Mi
|
||||
cpu: 300m
|
||||
@@ -0,0 +1 @@
|
||||
.git
|
||||
@@ -0,0 +1,18 @@
|
||||
name: joomla
|
||||
version: 0.6.0
|
||||
appVersion: 3.8.6
|
||||
description: PHP content management system (CMS) for publishing web content
|
||||
keywords:
|
||||
- joomla
|
||||
- cms
|
||||
- blog
|
||||
- http
|
||||
- php
|
||||
home: http://www.joomla.org/
|
||||
icon: https://bitnami.com/assets/stacks/joomla/img/joomla-stack-220x234.png
|
||||
sources:
|
||||
- https://github.com/bitnami/bitnami-docker-joomla
|
||||
maintainers:
|
||||
- name: Bitnami
|
||||
email: containers@bitnami.com
|
||||
engine: gotpl
|
||||
@@ -0,0 +1,8 @@
|
||||
approvers:
|
||||
- prydonius
|
||||
- tompizmor
|
||||
- sameersbn
|
||||
reviewers:
|
||||
- prydonius
|
||||
- tompizmor
|
||||
- sameersbn
|
||||
@@ -0,0 +1,107 @@
|
||||
# Joomla!
|
||||
|
||||
[Joomla!](http://www.joomla.org/) is a PHP content management system (CMS) for publishing web content. It includes features such as page caching, RSS feeds, printable versions of pages, news flashes, blogs, search, and support for language international.
|
||||
|
||||
## TL;DR;
|
||||
|
||||
```console
|
||||
$ helm install stable/joomla
|
||||
```
|
||||
|
||||
## Introduction
|
||||
|
||||
This chart bootstraps a [Joomla!](https://github.com/bitnami/bitnami-docker-joomla) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
|
||||
|
||||
It also packages the [Bitnami MariaDB chart](https://github.com/kubernetes/charts/tree/master/stable/mariadb) which is required for bootstrapping a MariaDB deployment for the database requirements of the Joomla! application.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Kubernetes 1.4+ with Beta APIs enabled
|
||||
- PV provisioner support in the underlying infrastructure
|
||||
|
||||
## Installing the Chart
|
||||
|
||||
To install the chart with the release name `my-release`:
|
||||
|
||||
```console
|
||||
$ helm install --name my-release stable/joomla
|
||||
```
|
||||
|
||||
The command deploys Joomla! on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation.
|
||||
|
||||
> **Tip**: List all releases using `helm list`
|
||||
|
||||
## Uninstalling the Chart
|
||||
|
||||
To uninstall/delete the `my-release` deployment:
|
||||
|
||||
```console
|
||||
$ helm delete my-release
|
||||
```
|
||||
|
||||
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||
|
||||
## Configuration
|
||||
|
||||
The following tables lists the configurable parameters of the Joomla! chart and their default values.
|
||||
|
||||
| Parameter | Description | Default |
|
||||
| --------------------------------- | ------------------------------------- | --------------------------------------------------------- |
|
||||
| `image` | Joomla! image | `bitnami/joomla:{VERSION}` |
|
||||
| `imagePullPolicy` | Image pull policy | `Always` if `image` tag is `latest`, else `IfNotPresent` |
|
||||
| `joomlaUsername` | User of the application | `user` |
|
||||
| `joomlaPassword` | Application password | Randomly generated |
|
||||
| `joomlaEmail` | Admin email | `user@example.com` |
|
||||
| `smtpHost` | SMTP host | `nil` |
|
||||
| `smtpPort` | SMTP port | `nil` |
|
||||
| `smtpUser` | SMTP user | `nil` |
|
||||
| `smtpPassword` | SMTP password | `nil` |
|
||||
| `smtpUsername` | User name for SMTP emails | `nil` |
|
||||
| `smtpProtocol` | SMTP protocol [`tls`, `ssl`] | `nil` |
|
||||
| `allowEmptyPassword` | Allow DB blank passwords | `yes` |
|
||||
| `externalDatabase.host` | Host of the external database | `nil` |
|
||||
| `externalDatabase.port` | Port of the external database | `3306` |
|
||||
| `externalDatabase.user` | Existing username in the external db | `bn_joomla` |
|
||||
| `externalDatabase.password` | Password for the above username | `nil` |
|
||||
| `externalDatabase.database` | Name of the existing databse | `bitnami_joomla` |
|
||||
| `mariadb.enabled` | Wheter to use or not the mariadb chart | `true` |
|
||||
| `mariadb.mariadbDatabase` | Database name to create | `bitnami_joomla` |
|
||||
| `mariadb.mariadbUser` | Database user to create | `bn_joomla` |
|
||||
| `mariadb.mariadbPassword` | Password for the database | `nil` |
|
||||
| `mariadb.mariadbRootPassword` | MariaDB admin password | `nil` |
|
||||
| `serviceType` | Kubernetes Service type | `LoadBalancer` |
|
||||
| `persistence.enabled` | Enable persistence using PVC | `true` |
|
||||
| `persistence.apache.storageClass` | PVC Storage Class for Apache volume | `nil` (uses alpha storage annotation) |
|
||||
| `persistence.apache.accessMode` | PVC Access Mode for Apache volume | `ReadWriteOnce` |
|
||||
| `persistence.apache.size` | PVC Storage Request for Apache volume | `1Gi` |
|
||||
| `persistence.joomla.storageClass` | PVC Storage Class for Joomla! volume | `nil` (uses alpha storage annotation) |
|
||||
| `persistence.joomla.accessMode` | PVC Access Mode for Joomla! volume | `ReadWriteOnce` |
|
||||
| `persistence.joomla.size` | PVC Storage Request for Joomla! volume | `8Gi` |
|
||||
| `resources` | CPU/Memory resource requests/limits | Memory: `512Mi`, CPU: `300m` |
|
||||
|
||||
The above parameters map to the env variables defined in [bitnami/joomla](http://github.com/bitnami/bitnami-docker-joomla). For more information please refer to the [bitnami/joomla](http://github.com/bitnami/bitnami-docker-joomla) image documentation.
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
||||
|
||||
```console
|
||||
$ helm install --name my-release \
|
||||
--set joomlaUsername=admin,joomlaPassword=password,mariadb.mariadbRootPassword=secretpassword \
|
||||
stable/joomla
|
||||
```
|
||||
|
||||
The above command sets the Joomla! administrator account username and password to `admin` and `password` respectively. Additionally it sets the MariaDB `root` user password to `secretpassword`.
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
|
||||
|
||||
```console
|
||||
$ helm install --name my-release -f values.yaml stable/joomla
|
||||
```
|
||||
|
||||
> **Tip**: You can use the default [values.yaml](values.yaml)
|
||||
|
||||
## Persistence
|
||||
|
||||
The [Bitnami Joomla!](https://github.com/bitnami/bitnami-docker-joomla) image stores the Joomla! data and configurations at the `/bitnami/joomla` and `/bitnami/apache` paths of the container.
|
||||
|
||||
Persistent Volume Claims are used to keep the data across deployments. This is known to work in GCE, AWS, and minikube.
|
||||
See the [Configuration](#configuration) section to configure the PVC or to disable persistence.
|
||||
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: mariadb
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
version: 0.7.0
|
||||
digest: sha256:f59f68030aa5c50b9e776b813804875fac911f91c2aa384e991f37a795c5ae34
|
||||
generated: 2018-03-14T18:31:19.031367+01:00
|
||||
@@ -0,0 +1,5 @@
|
||||
dependencies:
|
||||
- name: mariadb
|
||||
version: 0.7.0
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
condition: mariadb.enabled
|
||||
@@ -0,0 +1,43 @@
|
||||
{{- if or .Values.mariadb.enabled .Values.externalDatabase.host -}}
|
||||
1. Get the Joomla! URL by running:
|
||||
|
||||
{{- if contains "NodePort" .Values.serviceType }}
|
||||
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "joomla.fullname" . }})
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
echo http://$NODE_IP:$NODE_PORT/
|
||||
|
||||
{{- else if contains "LoadBalancer" .Values.serviceType }}
|
||||
|
||||
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||
Watch the status with: 'kubectl get svc --namespace {{ .Release.Namespace }} -w {{ template "joomla.fullname" . }}'
|
||||
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "joomla.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||
echo http://$SERVICE_IP/
|
||||
{{- else if contains "ClusterIP" .Values.serviceType }}
|
||||
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "joomla.fullname" . }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
echo http://127.0.0.1:8080/
|
||||
kubectl port-forward $POD_NAME 8080:80
|
||||
{{- end }}
|
||||
|
||||
2. Get your Joomla! login credentials by running:
|
||||
|
||||
echo Username: {{ .Values.joomlaUsername }}
|
||||
echo Password: $(kubectl get secret --namespace {{ .Release.Namespace }} {{ template "joomla.fullname" . }} -o jsonpath="{.data.joomla-password}" | base64 --decode)
|
||||
|
||||
{{- else -}}
|
||||
|
||||
########################################################################################
|
||||
### ERROR: You did not provide an external database host in your 'helm install' call ###
|
||||
########################################################################################
|
||||
|
||||
This deployment will be incomplete until you configure Joomla! with a resolvable database
|
||||
host. To configure Joomla! to use and external database host:
|
||||
|
||||
|
||||
1. Complete your Joomla! deployment by running:
|
||||
|
||||
helm upgrade {{ .Release.Name }} --set serviceType={{ .Values.serviceType }},mariadb.enabled=false,externalDatabase.host=YOUR_EXTERNAL_DATABASE_HOST stable/joomla
|
||||
|
||||
{{- end }}
|
||||
@@ -0,0 +1,24 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "joomla.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- 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 "joomla.fullname" -}}
|
||||
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- 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 "joomla.mariadb.fullname" -}}
|
||||
{{- printf "%s-%s" .Release.Name "mariadb" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||