182 lines
11 KiB
Markdown
182 lines
11 KiB
Markdown
|
# LimeSurvey
|
||
|
|
||
|
[LimeSurvey](https://limesurvey.org/) is the number one open-source survey software.
|
||
|
|
||
|
## TL;DR
|
||
|
|
||
|
```console
|
||
|
helm repo add martialblog https://martialblog.github.io/helm-charts
|
||
|
helm repo update
|
||
|
|
||
|
helm install my-release \
|
||
|
--set mariadb.enabled=true \
|
||
|
--set mariadb.auth.rootPassword=CHANGE-ME \
|
||
|
--set mariadb.auth.password=CHANGE-ME \
|
||
|
martialblog/limesurvey
|
||
|
```
|
||
|
|
||
|
## Introduction
|
||
|
|
||
|
This chart bootstraps LimeSurvey deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
|
||
|
|
||
|
It also packages the [Bitnami MariaDB chart](https://artifacthub.io/packages/helm/bitnami/mariadb) which is required for bootstrapping a MariaDB deployment for the database requirements of the application. You can also provide your own database instance.
|
||
|
|
||
|
## Prerequisites
|
||
|
|
||
|
- Kubernetes 1.13+
|
||
|
- Helm 3+
|
||
|
- PV provisioner support in the underlying infrastructure
|
||
|
|
||
|
## Parameters
|
||
|
|
||
|
### Global parameters
|
||
|
|
||
|
| Name | Description | Value |
|
||
|
| ------------------------- | ----------------------------------------------- | ----- |
|
||
|
| `global.imageRegistry` | Global Docker image registry | `nil` |
|
||
|
|
||
|
### LimeSurvey Image parameters
|
||
|
|
||
|
| Name | Description | Value |
|
||
|
| ------------------- | ---------------------------------------------------- | --------------------- |
|
||
|
| `image.registry` | LimeSurvey image registry | `docker.io` |
|
||
|
| `image.repository` | LimeSurvey image repository | `martialblog/limesurvey` |
|
||
|
| `image.tag` | LimeSurvey image tag (immutable tags are recommended) | `5-apache` |
|
||
|
| `image.pullPolicy` | LimeSurvey image pull policy | `IfNotPresent` |
|
||
|
| `image.pullSecrets` | LimeSurvey image pull secrets | `[]` |
|
||
|
|
||
|
### LimeSurvey Configuration parameters
|
||
|
|
||
|
| Name | Description | Value |
|
||
|
| -------------------------------------- | ----------------------------------------------- | ------------------ |
|
||
|
| `limesurvey.admin.user` | LimeSurvey initial Admin Username | `admin` |
|
||
|
| `limesurvey.admin.password` | LimeSurvey initial Admin Password | `nil` |
|
||
|
| `limesurvey.admin.name` | LimeSurvey initial Admin Full Name | `Administrator` |
|
||
|
| `limesurvey.admin.email` | LimeSurvey initial Admin Email | `admin@example.com` |
|
||
|
| `limesurvey.listenPort` | LimeSurvey Container port for webserver | `8080` |
|
||
|
| `limesurvey.publicUrl` | LimeSurvey Public URL for public scripts | `nil` |
|
||
|
| `limesurvey.baseUrl` | LimeSurvey Application Base URL | `nil` |
|
||
|
| `limesurvey.mysqlEngine` | MySQL engine used for survey tables (MyISAM or InnoDB) | `MyISAM` |
|
||
|
| `limesurvey.urlFormat` | LimeSurvey URL Format (path|get) | `nil` |
|
||
|
| `limesurvey.showScriptName` | LimeSurvey Script name in URL (true|false) | `true` |
|
||
|
| `limesurvey.tablePrefix` | LimeSurvey Database table prefix; set this to a single whitespace if you don't want a table prefix. | `lime_` |
|
||
|
| `limesurvey.tableSession` | LimeSurvey Table sessions; For storing sessions in the database | `false` |
|
||
|
| `limesurvey.debug` | LimeSurvey Debug level (0, 1, 2) | `0` |
|
||
|
| `limesurvey.debugSql` | LimeSurvey SQL Debug level (0, 1, 2) | `0` |
|
||
|
| `limesurvey.encrypt.keypair` | LimeSurvey Data encryption keypair | `nil` |
|
||
|
| `limesurvey.encrypt.publicKey` | LimeSurvey Data encryption public key | `nil` |
|
||
|
| `limesurvey.encrypt.secretKey` | LimeSurvey Data encryption secret key | `nil` |
|
||
|
| `limesurvey.encrypt.nonce` | LimeSurvey Data encryption nonce | `nil` |
|
||
|
| `limesurvey.encrypt.secretBoxKey` | LimeSurvey Data encryption secret box key | `nil` |
|
||
|
|
||
|
### Persistence Parameters
|
||
|
|
||
|
| Name | Description | Value |
|
||
|
| --------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------- |
|
||
|
| `persistence.enabled` | Enable persistence using Persistent Volume Claims | `true` |
|
||
|
| `persistence.accessModes` | Persistent Volume access modes | `[ReadWriteOnce]` |
|
||
|
| `persistence.size` | Persistent Volume size | `5Gi` |
|
||
|
| `persistence.storageClassName` | Persistent Volume storage class name | `nil` |
|
||
|
| `persistence.subPath` | Persistent Volume sub path | `nil` |
|
||
|
| `persistence.finalizers` | Persistent Volume finalizers | `[kubernetes.io/pvc-protection]` |
|
||
|
| `persistence.selectorLabels` | Persistent Volume selector labels | `{}` |
|
||
|
| `persistence.annotations` | persistent volume claim annotations | `{}` |
|
||
|
| `persistence.existingClaim` | The name of an existing PVC to use for persistence | `nil` |
|
||
|
|
||
|
### Traffic Exposure Parameters
|
||
|
|
||
|
| Name | Description | Value |
|
||
|
| ------------------------- | ----------------------------------------------- | ----- |
|
||
|
| `service.type` | LimeSurvey service type | `ClusterIP` |
|
||
|
| `service.port` | LimeSurvey service port | `80` |
|
||
|
| `ingress.enabled` | Enable ingress record generation for LimeSurvey | `false` |
|
||
|
| `ingress.className` | IngressClass that will be be used to implement the Ingress | `""` |
|
||
|
| `ingress.hosts` | An array with hosts for the Ingress | `limesurvey.local` |
|
||
|
| `ingress.annotations` | Additional annotations for the Ingress resource. To enable certificate autogeneration, place here your cert-manager annotations. | `{}` |
|
||
|
| `ingress.tls` | Enable TLS configuration for the host defined at `ingress.hostname` parameter | `false` |
|
||
|
|
||
|
### Other parameters
|
||
|
|
||
|
| Name | Description | Value |
|
||
|
| ------------------------- | ------------------------------------------------ | ----- |
|
||
|
| `imagePullSecrets` | Docker registry secret names as an array | `[]` |
|
||
|
| `nameOverride` | String to override the Chart Name | `nil` |
|
||
|
| `fullnameOverride` | String to fully override the Chart Name | `nil` |
|
||
|
| `extraVolumeMounts` | Additional volumes as an array | `[]` |
|
||
|
| `extraEmptyDirMounts` | Additional emptyDir volumes as an array | `[]` |
|
||
|
| `nodeSelector` | Node labels for pod assignment | `{}` |
|
||
|
| `tolerations` | Tolerations for pod assignment | `{}` |
|
||
|
| `affinity` | Affinity for pod assignment | `{}` |
|
||
|
| `podAnnotations` | Annotations for LimeSurvey pods | `[]` |
|
||
|
| `updateStrategy.type` | Deployment strategy type | `RollingUpdate` |
|
||
|
| `updateStrategy.rollingUpdate` | Deployment rolling update configuration parameters | `{}` |
|
||
|
| `replicaCount` | Number of LimeSurvey replicas to deploy | `1` |
|
||
|
| `autoscaling.enabled` | Enable Horizontal POD autoscaling for LimeSurvey | `false` |
|
||
|
| `autoscaling.minReplicas` | Minimum number of LimeSurvey replicas | `1` |
|
||
|
| `autoscaling.maxReplicas` | Maximum number of LimeSurvey replicas | `11` |
|
||
|
| `autoscaling.targetCPUUtilizationPercentage` | Target CPU utilization percentage | `80` |
|
||
|
| `podSecurityContext.fsGroup` | Set LimeSurvey pod's Security Context fsGroup | `33` |
|
||
|
| `podSecurityContext.runAsUser` | Set LimeSurvey pod's Security Context runAsUser | `33` |
|
||
|
| `podSecurityContext.runAsGroup` | Set LimeSurvey pod's Security Context runAsGroup | `33` |
|
||
|
| `containerSecurityContext.enabled` | Enable LimeSurvey containers' Security Context | `true` |
|
||
|
| `containerSecurityContext.allowPrivilegeEscalation` | Default LimeSurvey containers' Security Context | `true` |
|
||
|
|
||
|
### Database Parameters
|
||
|
|
||
|
LimeSurvey requires a [MySQL- or PostgreSQL-compatible database](https://manual.limesurvey.org/Installation_-_LimeSurvey_CE#Create_a_database_user).
|
||
|
|
||
|
You can either provide your own:
|
||
|
```yaml
|
||
|
externalDatabase:
|
||
|
host: hostname.example
|
||
|
database: limesurvey-db
|
||
|
username: limesurvey
|
||
|
password: "your-super-secret-password"
|
||
|
```
|
||
|
|
||
|
or you can let the Helm chart provision one for you (based on [Bitnami MariaDB Helm chart](https://artifacthub.io/packages/helm/bitnami/mariadb)):
|
||
|
```yaml
|
||
|
mariadb:
|
||
|
enabled: true
|
||
|
auth:
|
||
|
rootPassword: "please-change-me"
|
||
|
database: limesurvey
|
||
|
username: limesurvey
|
||
|
password: "please-change-me"
|
||
|
```
|
||
|
|
||
|
In both cases the application will automatically be configured to use these credentials.
|
||
|
Please refer to the [values.yaml](./values.yaml) for all possible configuration values.
|
||
|
|
||
|
## Configuration and installation details
|
||
|
|
||
|
### LimeSurvey Administrator Password
|
||
|
|
||
|
If the initial Admin Password `limesurvey.admin.password` is not provided it will be set to a random string. You can extract the password from the Secret:
|
||
|
|
||
|
```bash
|
||
|
kubectl get secrets --template={{.data.limesurvey-admin-password}} | base64 -d
|
||
|
```
|
||
|
|
||
|
## Upgrading
|
||
|
|
||
|
### To 0.6.0
|
||
|
|
||
|
This release bumps the Bitnami MariaDB to 10.6. Follow the official instructions [official instructions](https://mariadb.com/kb/en/upgrading-from-mariadb-105-to-mariadb-106/).
|
||
|
|
||
|
## Testing
|
||
|
|
||
|
This Helm chart is tested with [helm unittest](https://github.com/quintush/helm-unittest) ([test format spec](https://github.com/quintush/helm-unittest/blob/master/DOCUMENT.md)).
|
||
|
You can find the test specifications in the `./tests/` directory.
|
||
|
Tests are automatically run in CI.
|
||
|
|
||
|
To run the tests locally, use the following command:
|
||
|
|
||
|
```
|
||
|
# Required for pulling the MariaDB chart
|
||
|
helm repo add bitnami https://charts.bitnami.com/bitnami
|
||
|
helm dependency build
|
||
|
|
||
|
podman run --rm -v "${PWD}:/apps" docker.io/quintush/helm-unittest:3.7.1-0.2.8 --helm3 .
|
||
|
````
|