Nextcloud
Changelog
see RELEASENOTES.md
A Helm chart for Nextcloud on Kubernetes
TL;DR
helm repo add groundhog2k https://groundhog2k.github.io/helm-charts/
helm install my-release groundhog2k/nextcloud
Introduction
This chart uses the original Nextcloud from Docker to deploy Nextcloud in Kubernetes.
It fully supports deployment of the multi-architecture docker image.
Prerequisites
- Kubernetes 1.12+
- Helm 3.x
- PV provisioner support in the underlying infrastructure
Installing the Chart
To install the chart with the release name my-release
:
helm install my-release groundhog2k/nextcloud
Upgrading the Chart
To upgrade the chart or Nextcloud version with the release name my-release
:
helm upgrade my-release groundhog2k/nextcloud
Post-upgrade steps
After some Nextcloud version upgrades it's necessary to update database indicies of Nextcloud too. Therefor an post-upgrade step was prepared in this helm chart.
The post upgrade will be started during the Nextcloud/chart upgrade after a delay, which is configurable by setting postUpgradeHook.delay
. The default value is 30 seconds.
helm upgrade my-release groundhog2k/nextcloud --set postUpgradeHook.delay=120
Custom *.config.php files
The chart supports adding multiple Nextcloud configuration files by setting file name and value in the customConfigs:
section.
Example:
customConfigs:
region.config.php: |
<?php
$CONFIG = array (
'default_phone_region' => 'DE',
);
The custom *.config.php files will be copied during a post-install/upgrade hook that can be configured by customConfigsHook:
section.
Uninstalling the Chart
To uninstall/delete the my-release
deployment:
helm uninstall my-release
Requirements
Repository | Name | Version |
---|---|---|
@groundhog2k | mariadb | 0.3.14 |
@groundhog2k | postgres | 0.4.6 |
@groundhog2k | redis | 0.6.14 |
Common parameters
Key | Type | Default | Description |
---|---|---|---|
fullnameOverride | string | "" |
Fully override the deployment name |
nameOverride | string | "" |
Partially override the deployment name |
Deployment parameters
Key | Type | Default | Description |
---|---|---|---|
image.pullPolicy | string | "IfNotPresent" |
Image pull policy |
image.registry | string | "docker.io" |
Image registry |
image.repository | string | "nextcloud" |
Image name |
image.tag | string | "" |
Image tag |
imagePullSecrets | list | [] |
Image pull secrets |
strategy.type | object | "RollingUpdate" |
Pod deployment strategy |
livenessProbe | object | see values.yaml |
Liveness probe configuration |
startupProbe | object | see values.yaml |
Startup probe configuration |
readinessProbe | object | see values.yaml |
Readiness probe configuration |
customLivenessProbe | object | {} |
Custom liveness probe (overwrites default liveness probe configuration) |
customStartupProbe | object | {} |
Custom startup probe (overwrites default startup probe configuration) |
customReadinessProbe | object | {} |
Custom readiness probe (overwrites default readiness probe configuration) |
resources | object | {} |
Resource limits and requests |
nodeSelector | object | {} |
Deployment node selector |
podAnnotations | object | {} |
Additional pod annotations |
podSecurityContext | object | see values.yaml |
Pod security context |
securityContext | object | see values.yaml |
Container security context |
env | list | [] |
Additional container environmment variables |
args | list | [] |
Additional container command arguments |
serviceAccount.create | bool | false |
Enable service account creation |
serviceAccount.name | string | "" |
Optional name of the service account |
serviceAccount.annotations | object | {} |
Additional service account annotations |
affinity | object | {} |
Affinity for pod assignment |
tolerations | list | [] |
Tolerations for pod assignment |
containerPort | int | 8000 |
Internal http container port |
replicaCount | int | 1 |
Number of replicas |
initImage.pullPolicy | string | "IfNotPresent" |
Init container image pull policy |
initImage.registry | string | "docker.io" |
Image registry |
initImage.repository | string | "busybox" |
Default init container image |
initImage.tag | string | "latest" |
Init container image tag |
postUpgradeHook.enabled | bool | true |
Enable post upgrade hook |
postUpgradeHook.delay | int | 30 |
Delay in seconds before post-upgrade steps are initiated |
postUpgradeSteps | list | see values.yaml |
Script with post upgrade steps |
customConfigsHook.enabled | bool | true |
Enable custom configuration copy hook |
customConfigsHook.waitBeforeRetry | int | 10 | Delay before retrying to copy *.config.php files |
customConfigsHook.retries | int | 10 | Max. number of retries before job fails |
revisionHistoryLimit | int | nil |
Maximum number of revisions maintained in revision history |
podDisruptionBudget | object | {} |
Pod disruption budget |
podDisruptionBudget.minAvailable | int | nil |
Minimum number of pods that must be available after eviction |
podDisruptionBudget.maxUnavailable | int | nil |
Maximum number of pods that can be unavailable after eviction |
Cron jobs
Key | Type | Default | Description |
---|---|---|---|
defaultCronJobs | list | '[1]' | Internal planned default cron job |
defaultCronJobs[1].name | string | "cronphp" |
Name of the default cron job |
defaultCronJobs[1].schedule | string | "*/5 * * * *" |
Schedule for the default cron job (5 minutes) |
defaultCronJobs[1].command | string | "php -f /var/www/html/cron.php" |
Command for default cron.php job |
cronJobs | list | [] |
List of additional planned cron jobs |
cronJobs[].name | string | nil |
Name of the cron job |
cronJobs[].schedule | string | nil |
Schedule for the cron job |
cronJobs[].command | string | nil |
Command for planned execution |
cronJobs[].affinity | object | {} |
Affinity for pod assignment |
cronJobs[].tolerations | list | [] |
Tolerations for pod assignment |
cronJobs[].nodeSelector | object | {} |
Deployment node selector |
cronJobs[].resources | object | {} |
Resource limits and requests |
Service paramters
Key | Type | Default | Description |
---|---|---|---|
service.port | int | 80 |
Commento HTTP service port |
service.type | string | "ClusterIP" |
Service type |
service.nodePort | int | nil |
The node port (only relevant for type LoadBalancer or NodePort) |
service.clusterIP | string | nil |
The cluster ip address (only relevant for type LoadBalancer or NodePort) |
service.loadBalancerIP | string | nil |
The load balancer ip address (only relevant for type LoadBalancer) |
service.annotations | object | {} |
Additional service annotations |
Ingress parameters
Key | Type | Default | Description |
---|---|---|---|
ingress.enabled | bool | false |
Enable ingress for Nextcloud service |
ingress.annotations | string | nil |
Additional annotations for ingress |
ingress.hosts[0].host | string | "" |
Hostname for the ingress endpoint |
ingress.tls | list | [] |
Ingress TLS parameters |
ingress.maxBodySize | string | "512m" |
Maximum body size for post requests |
Redis session cache
Key | Type | Default | Description |
---|---|---|---|
externalCache.enabled | bool | false |
Enable external Redis cache |
externalCache.host | string | nil |
External Redis host |
externalCache.password | string | nil |
External Redis password |
externalCache.port | int | 6379 |
External Redis port |
redis.enabled | bool | false |
Enable Redis cache deployment (will disable external cache settings) |
redis.storage | string | nil |
Redis storage settings |
Database settings
Key | Type | Default | Description |
---|---|---|---|
externalDatabase.host | string | nil |
External database host |
externalDatabase.name | string | "nextcloud" |
External database name |
externalDatabase.user | string | nil |
External database user name |
externalDatabase.password | string | nil |
External database user password |
externalDatabase.type | string | "sqlite" |
External database type (mariadb/mysql or postgres - default: sqlite) |
mariadb.enabled | bool | false |
Enable MariaDB deployment (will disable external database settings) |
mariadb.settings.arguments[0] | string | "--character-set-server=utf8mb4" |
Enable MariaDB UTF8MB4 character set |
mariadb.settings.arguments[1] | string | "--collation-server=utf8mb4_unicode_ci" |
Enable UTF8MB4 unicode |
mariadb.settings.rootPassword | string | nil |
MariaDB root user password |
mariadb.storage | string | nil |
MariaDB storage settings |
mariadb.userDatabase.name | string | nil |
MariaDB nextcloud database name |
mariadb.userDatabase.password | string | nil |
MariaDB nextcloud database user |
mariadb.userDatabase.user | string | nil |
MariaDB nextcloud database user password |
postgres.enabled | bool | false |
Enable PostgreSQL deployment (will disable external database settings) |
postgres.settings.superuserPassword | string | nil |
PostgreSQL superuser password |
postgres.storage | string | nil |
PostgreSQL storage settings |
postgres.userDatabase.name | string | nil |
PostgreSQL nextcloud database name |
postgres.userDatabase.user | string | nil |
PostgreSQL nextcloud database user |
postgres.userDatabase.password | string | nil |
PostgreSQL nextcloud database user password |
Nextcloud parameters
Key | Type | Default | Description |
---|---|---|---|
apacheDefaultSiteConfig | string | nil |
Overwrite default apache 000-default.conf |
apachePortsConfig | string | nil |
Overwrite default apache ports.conf |
customPhpConfig | string | nil |
Additional PHP custom.ini |
customConfigs | object | nil |
Custom nextcloud *.config.php files that will be copied when customConfigHook is enabled (see example in values.yaml ) |
settings.admin.name | string | nil |
Nextcloud administrator user |
settings.admin.password | string | nil |
Nextcloud admin user password |
settings.update | bool | false |
Enable update (Only necessary if custom command is used) |
settings.maxFileUploadSize | string | 512M |
Maximum file upload size |
settings.memoryLimit | string | 512M |
PHP memory limit |
settings.disableRewriteIP | bool | false |
Disable rewriting IP address |
settings.trustedDomains | string | "" |
List of trusted domains separated by blank space |
settings.trustedProxies | string | "10.0.0.0/8" |
Trusted proxies |
settings.smtp.enabled | bool | false |
Enable SMTP |
settings.smtp.authType | string | "LOGIN" |
SMTP auth type (default: LOGIN) |
settings.smtp.domain | string | nil |
SMTP domain |
settings.smtp.from | string | nil |
SMTP from address |
settings.smtp.host | string | nil |
SMTP host |
settings.smtp.port | int | 465 |
SMTP port |
settings.smtp.name | string | nil |
SMTP user name |
settings.smtp.password | string | nil |
SMTP password |
settings.smtp.secure | bool | true |
Use secure SMTP |
Storage parameters
Key | Type | Default | Description |
---|---|---|---|
storage.nextcloud | object | {} |
Nextcloud internal storage |
storage.nextcloud.accessModes[0] | string | "ReadWriteOnce" |
Storage access mode |
storage.nextcloud.persistentVolumeClaimName | string | nil |
PVC name when existing storage volume should be used |
storage.nextcloud.requestedSize | string | nil |
Size for new PVC, when no existing PVC is used |
storage.nextcloud.className | string | nil |
Storage class name |
storage.nextcloud.keepPvc | bool | false |
Keep a created Persistent volume claim when uninstalling the helm chart |
storage.nextcloudData | object | {} |
Nextcloud user data storage |
storage.nextcloudData.accessModes[0] | string | "ReadWriteOnce" |
Storage access mode |
storage.nextcloudData.persistentVolumeClaimName | string | nil |
PVC name when existing storage volume should be used |
storage.nextcloudData.requestedSize | string | nil |
Size for new PVC, when no existing PVC is used |
storage.nextcloudData.className | string | nil |
Storage class name |
storage.nextcloudData.keepPvc | bool | false |
Keep a created Persistent volume claim when uninstalling the helm chart |