├── .helmignore ├── Chart.yaml ├── LICENSE ├── README.md ├── README_ru.md ├── docs └── Values.md ├── templates ├── _helpers.tpl ├── config-env.yaml ├── config │ └── .keep ├── deployments │ ├── appwrite │ │ ├── core.yaml │ │ ├── maintenance.yaml │ │ ├── realtime.yaml │ │ ├── shedule.yaml │ │ └── workers │ │ │ ├── audits.yaml │ │ │ ├── certificates.yaml │ │ │ ├── deletes.yaml │ │ │ ├── functions.yaml │ │ │ ├── mails.yaml │ │ │ ├── tasks.yaml │ │ │ ├── usage.yaml │ │ │ └── webhooks.yaml │ ├── influxdb.yaml │ ├── mariadb.yaml │ ├── redis.yaml │ └── telegraf.yaml ├── ingress │ ├── core.yaml │ └── realtime.yaml ├── secret-env.yaml ├── secrets │ └── .keep ├── services │ ├── appwrite │ │ ├── core.yaml │ │ └── realtime.yaml │ ├── influxdb.yaml │ ├── mariadb.yaml │ ├── redis.yaml │ └── telegraf.yaml └── volumes │ ├── appwrite │ ├── cache.yaml │ ├── certificates.yaml │ ├── config.yaml │ ├── functions.yaml │ └── uploads.yaml │ ├── influxdb.yaml │ ├── mariadb.yaml │ └── redis.yaml └── values.yaml /.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | docs/ 25 | -------------------------------------------------------------------------------- /Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: appwrite-helm 3 | description: Appwrite Helm chart 4 | type: application 5 | version: 1.0.0 6 | appVersion: "0.11.0" 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2019 Appwrite (https://appwrite.io) and individual contributors. 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 5 | 6 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 7 | 8 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 9 | 10 | 3. Neither the name Appwrite nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 11 | 12 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Appwrite.io Helm chart 2 | 3 | ## ⚠️ ATTENTION: This is experimental installation method, no official support. 4 | 5 | Used Appwrite version: `0.11.0` 6 | 7 | Current chart version: `1.0.0` 8 | 9 | 10 | 11 | ## Requirements 12 | 13 | - Configured StorageClass with RWX support in file mode (like CephFS) 14 | - Configured IngressClass 15 | - `cert-manager` for TLS support in Ingress 16 | 17 | ## Chart info 18 | 19 | ### Chart configuration 20 | 21 | See detailed description [here](docs/Values.md) 22 | -------------------------------------------------------------------------------- /README_ru.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k3env/appwrite-helm/2a6143940b934c9a7d81a812bf67cc19ec0ed8d8/README_ru.md -------------------------------------------------------------------------------- /docs/Values.md: -------------------------------------------------------------------------------- 1 | # Chart variables 2 | 3 | ## Appwrite 4 | 5 | | Parameter | Description | Type | Available values | Default value | 6 | | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | --------------------------- | -------------------- | 7 | | `appwrite.env` | Set your server running environment. | `string` | `production`, `development` | `production` | 8 | | `appwrite.locale` | Set your Appwrite's locale. | `string` | any supported locale | `en` | 9 | | `appwrite.sslKey` | This is your server private secret key that is used to encrypt all sensitive data on your server. Appwrite server encrypts all secret data on your server like webhooks, HTTP passwords, user sessions, and storage files. | `string` | any non-empty string | **Mandatory** | 10 | | `appwrite.domain` | Your Appwrite domain address. | `string` | any non-empty string | `localhost` | 11 | | `appwrite.options.abuse` | Allows you to disable abuse checks and API rate limiting. | `boolean` | `true`, `false` | `true` | 12 | | `appwrite.options.forceHttps` | Allows you to force HTTPS connection to your API. This feature redirects any HTTP call to HTTPS and adds the 'Strict-Transport-Security' header to all HTTP responses. **This feature will work only when your ports are set to default 80 and 443.** | `boolean` | `true`, `false` | `false` | 13 | | `appwrite.console.whitelist.root` | This option allows you to disable the creation of new users on the Appwrite console. When enabled only 1 user will be able to use the registration form. New users can be added by inviting them to your project. | `boolean` | `true`, `false` | `true` | 14 | | `appwrite.console.whitelist.emails` | This option allows you to limit creation of new users on the Appwrite console. This option is very useful for small teams or sole developers. | `string[]` | any non-empty string | `[]` | 15 | | `appwrite.console.whitelist.ips` | This last option allows you to limit creation of users in Appwrite console for users sharing the same set of IP addresses. This option is very useful for team working with a VPN service or a company IP. | `string[]` | any non-empty string | `[]` | 16 | | `appwrite.system.email.name` | This is the sender name value that will appear on email messages sent to developers from the Appwrite console. You can use url encoded strings for spaces and special chars. | `string` | any non-empty string | `"Appwrite"` | 17 | | `appwrite.system.email.addr` | This is the sender email address that will appear on email messages sent to developers from the Appwrite console. You should choose an email address that is allowed to be used from your SMTP server to avoid the server email ending in the users' SPAM folders. | `string` | any non-empty string | `"team@appwrite.io"` | 18 | | `appwrite.system.responseFormat` | Use this environment variable to set the default Appwrite HTTP response format to support an older version of Appwrite. This option is useful to overcome breaking changes between versions. You can also use the X-Appwrite-Response-Format HTTP request header to overwrite the response for a specific request. This variable accepts any valid Appwrite version. To use the current version format, leave the value of the variable empty. | `string` | --- | `empty` | 19 | | `appwrite.system.securityAddress` | This is the email address used to issue SSL certificates for custom domains or the user agent in your webhooks payload. | `string` | any valid e-mail address | **Mandatory** | 20 | | `appwrite.usageStats` | This variable allows you to disable the collection and displaying of usage stats. When disabled, it's recommended to turn off the Worker Usage, InfluxDB and Telegraf containers for better resource usage. | `boolean` | `true`, `false` | `true` | 21 | 22 | ## Redis 23 | 24 | | Parameter | Description | Type | Available values | Default value | 25 | | ------------ | ---------------------- | -------- | ----------------------------------------------- | ------------- | 26 | | `redis.port` | Redis server TCP port. | `number` | any number in range 1-65535 [^privileged-ports] | `6379` | 27 | | `redis.user` | Redis server user. | `string` | any string, may be empty | `empty` | 28 | | `redis.pass` | Redis server password. | `string` | any string, may be empty | `empty` | 29 | 30 | ## MariaDB 31 | 32 | | Parameter | Description | Type | Available values | Default value | 33 | | ------------- | ------------------------------- | -------- | ----------------------------------------------- | -------------------- | 34 | | `db.port` | MariaDB server TCP port. | `number` | any number in range 1-65535 [^privileged-ports] | `3306` | 35 | | `db.schema` | MariaDB server database schema. | `string` | any valid db name | `appwrite` | 36 | | `db.user` | MariaDB server user name. | `string` | any valid username | `user` | 37 | | `db.password` | MariaDB server user password. | `string` | any non-empty string | `password` | 38 | | `db.rootPass` | MariaDB server root password. | `string` | any non-empty string | `rootsecretpassword` | 39 | 40 | ## InfluxDB 41 | 42 | | Parameter | Description | Type | Available values | Default value | 43 | | --------------- | ------------------------- | -------- | ----------------------------------------------- | ------------- | 44 | | `influxdb.port` | InfluxDB server TCP port. | `number` | any number in range 1-65535 [^privileged-ports] | `8086` | 45 | 46 | ## StatsD 47 | 48 | | Parameter | Description | Type | Available values | Default value | 49 | | ------------- | ----------------------- | -------- | ----------------------------------------------- | ------------- | 50 | | `statsd.port` | StatsD server UDP port. | `number` | any number in range 1-65535 [^privileged-ports] | `8125` | 51 | 52 | ## SMTP 53 | 54 | | Parameter | Description | Type | Available values | Default value | 55 | | ------------- | ----------------------------------------------------------------------------------------------- | -------- | ---------------- | ------------- | 56 | | `smtp.host` | SMTP server host name address. Use an empty string to disable all mail sending from the server. | `string` | any string | `empty` | 57 | | `smtp.port` | SMTP server TCP port. | `number` | any number | `0` | 58 | | `smtp.secure` | SMTP secure connection protocol. | `string` | any string | `empty` | 59 | | `smtp.user` | SMTP server user name. | `string` | any string | `empty` | 60 | | `smtp.pass` | SMTP server user password. | `string` | any string | `empty` | 61 | 62 | ## Storage 63 | 64 | | Parameter | Description | Type | Available values | Default value | 65 | | --------------------------- | -------------------------------------------------------------------------------- | --------- | -------------------------------- | ------------- | 66 | | `storage.limit` | Maximum file size allowed for file upload. The default value is 10MB limitation. | `number` | any number | `10Mi` | 67 | | `storage.antivirus.enabled` | This variable allows you to disable the internal anti-virus scans. | `boolean` | `true`[^antivirus-note], `false` | `false` | 68 | | `storage.antivirus.port` | ClamAV server TCP port. | `number` | any number | `3310` | 69 | 70 | ## Functions [^functions-note] 71 | 72 | | Parameter | Description | Type | Available values | Default value | 73 | | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | --------------------------------------- | --------------------------------------- | 74 | | `functions.timeout` | The maximum number of seconds allowed as a timeout value when creating a new function. | `number` | any number | 900 | 75 | | `functions.containers` | The maximum number of containers Appwrite is allowed to keep alive in the background for function environments. Running containers allow faster execution time as there is no need to recreate each container every time a function gets executed. | `number` | any number | 10 | 76 | | `functions.cpus` | The maximum number of CPU core a single cloud function is allowed to use. Please note that setting a value higher than available cores will result in a function error, which might result in an error. When it's empty, CPU limit will be disabled. | `number` | any number | 1 | 77 | | `functions.memory` | The maximum amount of memory a single cloud function is allowed to use in megabytes. When it's empty, memory limit will be disabled. | `number` | any number | 256Mb | 78 | | `functions.swap` | The maximum amount of swap memory a single cloud function is allowed to use in megabytes. The default value is empty. When it's empty, swap memory limit will be disabled. | `number` | any number | 256Mb | 79 | | `functions.runtimes` | This option allows you to limit the available environments for cloud functions. | `string[]` | see [here](#functions-and-environments) | see [here](#functions-and-environments) | 80 | | `functions.envs` | Deprecated with 0.8.0, use 'functions.runtimes' instead! | `string[]` | see [here](#functions-and-environments) | see [here](#functions-and-environments) | 81 | 82 | ## Chart-related variables 83 | 84 | ### Ingress 85 | 86 | | Parameter | Description | Type | Available values | Default value | 87 | | ------------------------------ | ------------------------------------- | --------- | ---------------- | ------------- | 88 | | `ingress..enabled` | Enables Ingress for service `` | `boolean` | `true`, `false` | `true` | 89 | | `ingress..externalPort` | Service port | `number` | | `80` | 90 | | `ingress..annotations` | Annotations, added to Ingress | `{}` | -- | `{}` | 91 | | `ingress..tls.enabled` | Enables TLS for Ingress | `boolean` | `true`, `false` | `true` | 92 | | `ingress..tls.secretName` | Used for certificate when TLS enabled | `string` | -- | `""` | 93 | 94 | where `svc` can be: 95 | 96 | | `` | Short description | 97 | | -------- | ------------------------------------- | 98 | | appwrite | Used for UI and API (except realtime) | 99 | | realtime | Used only for realtime subscriptions | 100 | 101 | ### Persistent storage 102 | 103 | Required access modes for services 104 | 105 | | Service | Access mode | Default PVC name | 106 | | ----------------------- | ----------- | ---------------------------- | 107 | | `mariadb` | RWO | `mysql-data` | 108 | | `redis` | RWO | `redis-data` | 109 | | `influxdb` | RWO | `influxdb-data` | 110 | | `appwrite.cache` | RWO | `appwrite-cache-data` | 111 | | `appwrite.certificates` | RWO | `appwrite-certificates-data` | 112 | | `appwrite.uploads` | RWO | `appwrite-uploads-data` | 113 | | `appwrite.config` | RWO | `appwrite-config-data` | 114 | | `appwrite.functions` | RWO | `appwrite-functions-data` | 115 | 116 | | Parameter | Description | Type | Available values | Default value | 117 | | ------------------------------ | ------------------------------------------- | -------------- | ------------------------------------------------------------------------- | ------------------ | 118 | | `volumes..enabled` | Enables persistent storage for service pods | `boolean` | `true`, `false` | `true` | 119 | | `volumes..create` | Enables automatic creation of PVC | `boolean` | `true`, `false` | `true` | 120 | | `volumes..storageClass` | StorageClass used for autoprovisioning PVC | `StorageClass` | Any compatible StorageClass (see required access modes for volumes above) | `""` | 121 | | `volumes..storageRequest` | Size of requested PV | `number` | `number` | `100Mi` | 122 | | `volumes..pvcName` | Name of PVC | `boolean` | `true`, `false` | depends on service | 123 | 124 | ## Environment variables matches 125 | 126 | | In `.env` | In chart values | 127 | | ------------------------------------ | ----------------------------------- | 128 | | `_APP_ENV` | `appwrite.env` | 129 | | `_APP_OPENSSL_KEY_V1` | `appwrite.sslKey` | 130 | | `_APP_LOCALE` | `appwrite.locale` | 131 | | `_APP_OPTIONS_ABUSE` | `appwrite.options.abuse` | 132 | | `_APP_OPTIONS_FORCE_HTTPS` | `appwrite.options.forceHttps` | 133 | | `_APP_DOMAIN` | `appwrite.domain` | 134 | | `_APP_DOMAIN_TARGET` | `appwrite.domain` | 135 | | `_APP_CONSOLE_WHITELIST_ROOT` | `appwrite.console.whitelist.root` | 136 | | `_APP_CONSOLE_WHITELIST_EMAILS` | `appwrite.console.whitelist.emails` | 137 | | `_APP_CONSOLE_WHITELIST_IPS` | `appwrite.console.whitelist.ips` | 138 | | `_APP_SYSTEM_EMAIL_NAME` | `appwrite.system.email.name` | 139 | | `_APP_SYSTEM_EMAIL_ADDRESS` | `appwrite.system.email.addr` | 140 | | `_APP_SYSTEM_RESPONSE_FORMAT` | `appwrite.system.responseFormat` | 141 | | `_APP_SYSTEM_SECURITY_EMAIL_ADDRESS` | `appwrite.system.securityAddress` | 142 | | `_APP_USAGE_STATS` | `appwrite.usageStats` | 143 | | `_APP_REDIS_HOST` | calculated on installation | 144 | | `_APP_REDIS_PORT` | `redis.port` | 145 | | `_APP_REDIS_USER` | `redis.user` | 146 | | `_APP_REDIS_PASS` | `redis.pass` | 147 | | `_APP_DB_HOST` | calculated on installation | 148 | | `_APP_DB_PORT` | `db.port` | 149 | | `_APP_DB_SCHEMA` | `db.schema` | 150 | | `_APP_DB_USER` | `db.user` | 151 | | `_APP_DB_PASS` | `db.password` | 152 | | `_APP_DB_ROOT_PASS` | `db.rootPass` | 153 | | `_APP_INFLUXDB_PORT` | `influxdb.port` | 154 | | `_APP_STATSD_PORT` | `statsd.port` | 155 | | `_APP_SMTP_HOST` | `smtp.host` | 156 | | `_APP_SMTP_PORT` | `smtp.port` | 157 | | `_APP_SMTP_SECURE` | `smtp.secure` | 158 | | `_APP_SMTP_USERNAME` | `smtp.user` | 159 | | `_APP_SMTP_PASSWORD` | `smtp.pass` | 160 | | `_APP_STORAGE_LIMIT` | `storage.limit` | 161 | | `_APP_STORAGE_ANTIVIRUS` | `storage.antivirus.enabled` | 162 | | `_APP_STORAGE_ANTIVIRUS_HOST` | `storage.antivirus.host` | 163 | | `_APP_STORAGE_ANTIVIRUS_PORT` | `storage.antivirus.port` | 164 | | `_APP_FUNCTIONS_TIMEOUT` | `functions.timeout` | 165 | | `_APP_FUNCTIONS_CONTAINERS` | `functions.containers` | 166 | | `_APP_FUNCTIONS_CPUS` | `functions.cpus` | 167 | | `_APP_FUNCTIONS_MEMORY` | `functions.memory` | 168 | | `_APP_FUNCTIONS_MEMORY_SWAP` | `functions.swap` | 169 | | `_APP_FUNCTIONS_RUNTIMES` | `functions.runtimes` | 170 | | `_APP_FUNCTIONS_ENVS` | `functions.envs` | 171 | 172 | ## Notes 173 | 174 | [^privileged-ports]: You can use port in range 1-1024 only in 'privileged' containers 175 | [^antivirus-note]: feature not implemented in chart version `1.0.0` 176 | [^functions-note]: functions not implemented in chart version `1.0.0` 177 | -------------------------------------------------------------------------------- /templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{- define "boolToStr" }} 2 | {{- if . -}} 3 | "enabled" 4 | {{- else -}} 5 | "disabled" 6 | {{- end -}} 7 | {{- end -}} 8 | 9 | {{- define "_arrayjoin"}} 10 | {{- range $i, $val := . }} 11 | {{- (print $val ",") -}} 12 | {{ end -}} 13 | {{- end -}} 14 | 15 | {{- define "array.join" }} 16 | {{- include "_arrayjoin" . | trimSuffix "," | quote -}} 17 | {{- end -}} 18 | 19 | {{- define "_sitoNum" }} 20 | {{- if hasSuffix "Gi" . -}} 21 | {{ mul (mul (mul (trimSuffix "Gi" . | atoi) 1024) 1024) 1024 }} 22 | {{- else if hasSuffix "Mi" . -}} 23 | {{ mul (mul (trimSuffix "Mi" . | atoi) 1024) 1024 }} 24 | {{- else if hasSuffix "Ki" . -}} 25 | {{ mul (trimSuffix "Ki" . | atoi) 1024 }} 26 | {{- end -}} 27 | {{- end -}} 28 | 29 | {{- define "si.toNum" }} 30 | {{- include "_sitoNum" . | quote -}} 31 | {{- end -}} 32 | 33 | {{- define "probeTcp" -}} 34 | livenessProbe: 35 | tcpSocket: 36 | port: {{ . }} 37 | initialDelaySeconds: 5 38 | periodSeconds: 10 39 | timeoutSeconds: 3 40 | failureThreshold: 3 41 | readinessProbe: 42 | tcpSocket: 43 | port: {{ . }} 44 | initialDelaySeconds: 15 45 | periodSeconds: 5 46 | timeoutSeconds: 3 47 | failureThreshold: 3 48 | startupProbe: 49 | tcpSocket: 50 | port: {{ . }} 51 | initialDelaySeconds: 60 52 | periodSeconds: 5 53 | timeoutSeconds: 3 54 | failureThreshold: 3 55 | {{- end -}} 56 | 57 | {{- define "probeHttp" -}} 58 | livenessProbe: 59 | httpGet: 60 | path: /health 61 | port: {{ . }} 62 | initialDelaySeconds: 5 63 | periodSeconds: 10 64 | timeoutSeconds: 3 65 | failureThreshold: 3 66 | readinessProbe: 67 | httpGet: 68 | path: /ping 69 | port: {{ . }} 70 | initialDelaySeconds: 15 71 | periodSeconds: 5 72 | timeoutSeconds: 3 73 | failureThreshold: 3 74 | startupProbe: 75 | httpGet: 76 | path: /ping 77 | port: {{ . }} 78 | initialDelaySeconds: 15 79 | periodSeconds: 5 80 | timeoutSeconds: 3 81 | failureThreshold: 3 82 | {{- end -}} 83 | 84 | # Place it to initContainers section 85 | {{- define "influxdbCheck" -}} 86 | - name: influxdb-check 87 | image: curlimages/curl:7.80.0 88 | command: [ 89 | "/usr/bin/curl", 90 | "http://{{ .Release.Name }}-influxdb.{{ .Release.Namespace }}:{{ .Values.influxdb.port }}/health" 91 | ] 92 | {{- end }} 93 | 94 | {{- define "dbCheck" -}} 95 | - name: db-check 96 | image: sami/mysql-client:3.4 97 | command: [ 98 | "mysqlshow", 99 | "--host=aw-test-db.appwrite", 100 | "--user=user", 101 | ] 102 | env: 103 | - name: MYSQL_PWD 104 | valueFrom: 105 | secretKeyRef: 106 | name: "{{ .Release.Name }}-env" 107 | key: _APP_DB_PASS 108 | {{- end }} 109 | 110 | {{- define "redisCheck" -}} 111 | - name: redis-check 112 | image: redis:6.0-alpine3.12 113 | command: [ 114 | '/usr/local/bin/redis-cli', 115 | "-h", "{{ .Release.Name }}-redis.{{ .Release.Namespace }}", "-p", "{{ .Values.redis.port }}", 116 | '-r', '3', '-i', '5', 117 | {{ if ne .Values.redis.user "" -}} 118 | "-u", "{{ .Values.redis.user }}", 119 | {{ end -}} 120 | {{ if ne .Values.redis.pass "" -}} 121 | '-a', '$REDIS_PASS', 122 | {{ end -}} 123 | ] 124 | {{ if ne .Values.redis.pass "" -}} 125 | env: 126 | - name: REDIS_PASS 127 | valueFrom: 128 | secretKeyRef: 129 | name: "{{ .Release.Name }}-env" 130 | key: _APP_REDIS_PASS 131 | {{ end -}} 132 | {{- end }} 133 | 134 | {{- define "redisEnv" -}} 135 | - name: _APP_REDIS_HOST 136 | value: "{{ .Release.Name }}-redis.{{ .Release.Namespace }}" 137 | - name: _APP_REDIS_PORT 138 | valueFrom: 139 | configMapKeyRef: 140 | name: "{{ .Release.Name }}-env" 141 | key: _APP_REDIS_PORT 142 | {{ if ne .Values.redis.user "" -}} 143 | - name: _APP_REDIS_USER 144 | valueFrom: 145 | secretKeyRef: 146 | name: "{{ .Release.Name }}-env" 147 | key: _APP_REDIS_USER 148 | {{ end -}} 149 | {{ if ne .Values.redis.pass "" -}} 150 | - name: _APP_REDIS_PASS 151 | valueFrom: 152 | secretKeyRef: 153 | name: "{{ .Release.Name }}-env" 154 | key: _APP_REDIS_PASS 155 | {{ end -}} 156 | {{- end }} 157 | 158 | {{- define "smtpEnv" -}} 159 | {{- with .Values.smtp }} 160 | {{- if and ( ne .host "" ) ( ne .port "" ) ( ne .user "" ) ( ne .pass "" ) -}} 161 | - name: _APP_SMTP_HOST 162 | valueFrom: 163 | configMapKeyRef: 164 | name: "{{ $.Release.Name }}-env" 165 | key: _APP_SMTP_HOST 166 | - name: _APP_SMTP_PORT 167 | valueFrom: 168 | configMapKeyRef: 169 | name: "{{ $.Release.Name }}-env" 170 | key: _APP_SMTP_PORT 171 | - name: _APP_SMTP_SECURE 172 | valueFrom: 173 | configMapKeyRef: 174 | name: "{{ $.Release.Name }}-env" 175 | key: _APP_SMTP_SECURE 176 | - name: _APP_SMTP_USERNAME 177 | valueFrom: 178 | secretKeyRef: 179 | name: "{{ $.Release.Name }}-env" 180 | key: _APP_SMTP_USERNAME 181 | - name: _APP_SMTP_PASSWORD 182 | valueFrom: 183 | secretKeyRef: 184 | name: "{{ $.Release.Name }}-env" 185 | key: _APP_SMTP_PASSWORD 186 | {{- end -}} 187 | {{- end -}} 188 | {{- end }} 189 | 190 | {{- define "dbEnv" -}} 191 | - name: _APP_DB_HOST 192 | value: "{{ .Release.Name }}-db.{{ .Release.Namespace }}" 193 | - name: _APP_DB_PORT 194 | valueFrom: 195 | configMapKeyRef: 196 | name: "{{ .Release.Name }}-env" 197 | key: _APP_DB_PORT 198 | - name: _APP_DB_SCHEMA 199 | valueFrom: 200 | configMapKeyRef: 201 | name: "{{ .Release.Name }}-env" 202 | key: _APP_DB_SCHEMA 203 | - name: _APP_DB_USER 204 | valueFrom: 205 | secretKeyRef: 206 | name: "{{ .Release.Name }}-env" 207 | key: _APP_DB_USER 208 | - name: _APP_DB_PASS 209 | valueFrom: 210 | secretKeyRef: 211 | name: "{{ .Release.Name }}-env" 212 | key: _APP_DB_PASS 213 | {{- end }} -------------------------------------------------------------------------------- /templates/config-env.yaml: -------------------------------------------------------------------------------- 1 | kind: ConfigMap 2 | apiVersion: v1 3 | metadata: 4 | name: "{{ .Release.Name }}-env" 5 | data: 6 | _APP_ENV: {{ .Values.appwrite.env | quote }} 7 | _APP_LOCALE: {{ .Values.appwrite.locale | quote }} 8 | _APP_OPTIONS_ABUSE: {{ include "boolToStr" .Values.appwrite.options.abuse }} 9 | _APP_OPTIONS_FORCE_HTTPS: {{ include "boolToStr" .Values.appwrite.options.forceHttps }} 10 | _APP_DOMAIN: {{ .Values.appwrite.domain | quote }} 11 | _APP_DOMAIN_TARGET: {{ .Values.appwrite.domain | quote }} 12 | _APP_CONSOLE_WHITELIST_ROOT: {{ include "boolToStr" .Values.appwrite.console.whitelist.root }} 13 | _APP_CONSOLE_WHITELIST_EMAILS: {{ include "array.join" .Values.appwrite.console.whitelist.emails }} 14 | _APP_CONSOLE_WHITELIST_IPS: {{ include "array.join" .Values.appwrite.console.whitelist.ips }} 15 | _APP_SYSTEM_EMAIL_NAME: {{ .Values.appwrite.system.email.name | quote }} 16 | _APP_SYSTEM_EMAIL_ADDRESS: {{ .Values.appwrite.system.email.addr | quote }} 17 | _APP_SYSTEM_RESPONSE_FORMAT: {{ .Values.appwrite.system.responseFormat | quote }} 18 | _APP_SYSTEM_SECURITY_EMAIL_ADDRESS: {{ .Values.appwrite.system.securityAddress | quote }} 19 | _APP_USAGE_STATS: {{ include "boolToStr" .Values.appwrite.usageStats }} 20 | _APP_REDIS_PORT: {{ .Values.redis.port | quote }} 21 | _APP_DB_PORT: {{ .Values.db.port | quote }} 22 | _APP_DB_SCHEMA: {{ .Values.db.schema | quote }} 23 | _APP_INFLUXDB_PORT: {{ .Values.influxdb.port | quote }} 24 | _APP_STATSD_PORT: {{ .Values.statsd.port | quote }} 25 | _APP_SMTP_HOST: {{ .Values.smtp.host | quote }} 26 | _APP_SMTP_PORT: {{ .Values.smtp.port | quote }} 27 | _APP_SMTP_SECURE: {{ .Values.smtp.secure | quote }} 28 | _APP_STORAGE_LIMIT: {{ include "si.toNum" .Values.storage.limit }} 29 | _APP_STORAGE_ANTIVIRUS: {{ include "boolToStr" .Values.storage.antivirus.enabled }} 30 | _APP_STORAGE_ANTIVIRUS_HOST: {{ .Values.storage.antivirus.host | quote }} 31 | _APP_STORAGE_ANTIVIRUS_PORT: {{ .Values.storage.antivirus.port | quote }} 32 | _APP_FUNCTIONS_TIMEOUT: {{ .Values.functions.timeout | quote }} 33 | _APP_FUNCTIONS_CONTAINERS: {{ .Values.functions.containers | quote }} 34 | _APP_FUNCTIONS_CPUS: {{ .Values.functions.cpus | quote }} 35 | _APP_FUNCTIONS_MEMORY: {{ .Values.functions.memory | quote }} 36 | _APP_FUNCTIONS_MEMORY_SWAP: {{ .Values.functions.swap | quote }} 37 | _APP_FUNCTIONS_RUNTIMES: {{ include "array.join" .Values.functions.runtimes }} 38 | _APP_FUNCTIONS_ENVS: {{ include "array.join" .Values.functions.envs }} -------------------------------------------------------------------------------- /templates/config/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k3env/appwrite-helm/2a6143940b934c9a7d81a812bf67cc19ec0ed8d8/templates/config/.keep -------------------------------------------------------------------------------- /templates/deployments/appwrite/core.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: "{{ .Release.Name }}-appwrite" 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: "{{ .Release.Name }}-appwrite" 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | app: "{{ .Release.Name }}-appwrite" 14 | spec: 15 | {{- with .Values.volumes.appwrite }} 16 | {{ if (or (or (or .config.uploads .cache.enabled) (or .config.enabled .certificates.enabled)) .functions.enabled) -}} 17 | volumes: 18 | {{ if .config.enabled -}} 19 | - name: data-config 20 | persistentVolumeClaim: 21 | claimName: {{ .config.pvcName }} 22 | {{ end -}} 23 | {{ if .cache.enabled -}} 24 | - name: data-cache 25 | persistentVolumeClaim: 26 | claimName: {{ .cache.pvcName }} 27 | {{ end -}} 28 | {{ if .uploads.enabled -}} 29 | - name: data-uploads 30 | persistentVolumeClaim: 31 | claimName: {{ .uploads.pvcName }} 32 | {{ end -}} 33 | {{ if .certificates.enabled -}} 34 | - name: data-certificates 35 | persistentVolumeClaim: 36 | claimName: {{ .certificates.pvcName }} 37 | {{ end -}} 38 | {{ if .functions.enabled -}} 39 | - name: data-functions 40 | persistentVolumeClaim: 41 | claimName: {{ .functions.pvcName }} 42 | {{ end -}} 43 | {{ end -}} 44 | {{ end -}} 45 | initContainers: 46 | {{- include "redisCheck" $ | nindent 6 }} 47 | {{- include "dbCheck" $ | nindent 6 }} 48 | {{- include "influxdbCheck" $ | nindent 6 }} 49 | containers: 50 | - name: appwrite-appwrite 51 | image: "appwrite/appwrite:{{ .Chart.AppVersion }}" 52 | imagePullPolicy: IfNotPresent 53 | {{- with .Values.volumes.appwrite }} 54 | {{ if (or (or (or .config.uploads .cache.enabled) (or .config.enabled .certificates.enabled)) .functions.enabled) -}} 55 | volumeMounts: 56 | {{ if .uploads.enabled -}} 57 | - mountPath: /storage/uploads 58 | name: data-uploads 59 | {{ end -}} 60 | {{ if .cache.enabled -}} 61 | - mountPath: /storage/cache 62 | name: data-cache 63 | {{ end -}} 64 | {{ if .config.enabled -}} 65 | - mountPath: /storage/config 66 | name: data-config 67 | {{ end -}} 68 | {{ if .certificates.enabled -}} 69 | - mountPath: /storage/certificates 70 | name: data-certificates 71 | {{ end -}} 72 | {{ if .functions.enabled -}} 73 | - mountPath: /storage/functions 74 | name: data-functions 75 | {{ end -}} 76 | {{ end -}} 77 | {{ end -}} 78 | ports: 79 | - containerPort: 80 80 | name: appwrite 81 | env: 82 | - name: _APP_DB_HOST 83 | value: "{{ .Release.Name }}-db.{{ .Release.Namespace }}" 84 | - name: _APP_INFLUXDB_HOST 85 | value: "{{ .Release.Name }}-influxdb.{{ .Release.Namespace }}" 86 | - name: _APP_REDIS_HOST 87 | value: "{{ .Release.Name }}-redis.{{ .Release.Namespace }}" 88 | envFrom: 89 | - configMapRef: 90 | name: {{ .Release.Name }}-env 91 | - secretRef: 92 | name: {{ .Release.Name }}-env 93 | -------------------------------------------------------------------------------- /templates/deployments/appwrite/maintenance.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: "{{ .Release.Name }}-maintenance" 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: "{{ .Release.Name }}-maintenance" 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | app: "{{ .Release.Name }}-maintenance" 14 | spec: 15 | initContainers: 16 | {{- include "redisCheck" $ | nindent 6 }} 17 | containers: 18 | - name: appwrite-maintenance 19 | image: "appwrite/appwrite:{{ .Chart.AppVersion }}" 20 | command: 21 | - "maintenance" 22 | imagePullPolicy: IfNotPresent 23 | env: 24 | - name: _APP_ENV 25 | valueFrom: 26 | configMapKeyRef: 27 | name: "{{ .Release.Name }}-env" 28 | key: _APP_ENV 29 | {{- include "redisEnv" $ | nindent 10 }} 30 | {{/*- name: _APP_MAINTENANCE_INTERVAL 31 | valueFrom: 32 | configMapKeyRef: 33 | name: "{{ .Release.Name }}-env" 34 | key: _APP_MAINTENANCE_INTERVAL 35 | - name: _APP_MAINTENANCE_RETENTION_EXECUTION 36 | valueFrom: 37 | configMapKeyRef: 38 | name: "{{ .Release.Name }}-env" 39 | key: _APP_MAINTENANCE_RETENTION_EXECUTION 40 | - name: _APP_MAINTENANCE_RETENTION_ABUSE 41 | valueFrom: 42 | configMapKeyRef: 43 | name: "{{ .Release.Name }}-env" 44 | key: _APP_MAINTENANCE_RETENTION_ABUSE 45 | - name: _APP_MAINTENANCE_RETENTION_AUDIT 46 | valueFrom: 47 | configMapKeyRef: 48 | name: "{{ .Release.Name }}-env" 49 | key: _APP_MAINTENANCE_RETENTION_AUDIT */}} -------------------------------------------------------------------------------- /templates/deployments/appwrite/realtime.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: "{{ .Release.Name }}-realtime" 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: "{{ .Release.Name }}-realtime" 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | app: "{{ .Release.Name }}-realtime" 14 | spec: 15 | initContainers: 16 | {{- include "redisCheck" $ | nindent 6 }} 17 | {{- include "dbCheck" $ | nindent 6 }} 18 | containers: 19 | - name: appwrite-realtime 20 | image: "appwrite/appwrite:{{ .Chart.AppVersion }}" 21 | imagePullPolicy: IfNotPresent 22 | command: 23 | - "realtime" 24 | ports: 25 | - containerPort: 80 26 | name: realtime 27 | env: 28 | - name: _APP_ENV 29 | valueFrom: 30 | configMapKeyRef: 31 | name: "{{ .Release.Name }}-env" 32 | key: _APP_ENV 33 | - name: _APP_OPTIONS_ABUSE 34 | valueFrom: 35 | configMapKeyRef: 36 | name: "{{ .Release.Name }}-env" 37 | key: _APP_OPTIONS_ABUSE 38 | - name: _APP_OPENSSL_KEY_V1 39 | valueFrom: 40 | secretKeyRef: 41 | name: "{{ .Release.Name }}-env" 42 | key: _APP_OPENSSL_KEY_V1 43 | - name: _APP_USAGE_STATS 44 | valueFrom: 45 | configMapKeyRef: 46 | name: "{{ .Release.Name }}-env" 47 | key: _APP_USAGE_STATS 48 | {{- include "redisEnv" $ | nindent 10 }} 49 | {{- include "dbEnv" $ | nindent 10 }} 50 | -------------------------------------------------------------------------------- /templates/deployments/appwrite/shedule.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: "{{ .Release.Name }}-schedule" 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: "{{ .Release.Name }}-schedule" 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | app: "{{ .Release.Name }}-schedule" 14 | spec: 15 | initContainers: 16 | {{- include "redisCheck" $ | nindent 6 }} 17 | containers: 18 | - name: appwrite-schedule 19 | image: "appwrite/appwrite:{{ .Chart.AppVersion }}" 20 | command: 21 | - "schedule" 22 | imagePullPolicy: IfNotPresent 23 | env: 24 | - name: _APP_ENV 25 | valueFrom: 26 | configMapKeyRef: 27 | name: "{{ .Release.Name }}-env" 28 | key: _APP_ENV 29 | {{- include "redisEnv" $ | nindent 10 }} -------------------------------------------------------------------------------- /templates/deployments/appwrite/workers/audits.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: "{{ .Release.Name }}-worker-audits" 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: "{{ .Release.Name }}-worker-audits" 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | app: "{{ .Release.Name }}-worker-audits" 14 | spec: 15 | initContainers: 16 | {{- include "redisCheck" $ | nindent 6 }} 17 | {{- include "dbCheck" $ | nindent 6 }} 18 | containers: 19 | - name: appwrite-worker-audits 20 | image: "appwrite/appwrite:{{ .Chart.AppVersion }}" 21 | command: 22 | - "worker-audits" 23 | imagePullPolicy: IfNotPresent 24 | env: 25 | - name: _APP_ENV 26 | valueFrom: 27 | configMapKeyRef: 28 | name: "{{ .Release.Name }}-env" 29 | key: _APP_ENV 30 | {{- include "redisEnv" $ | nindent 10 }} 31 | {{- include "dbEnv" $ | nindent 10 }} 32 | -------------------------------------------------------------------------------- /templates/deployments/appwrite/workers/certificates.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: "{{ .Release.Name }}-worker-certificates" 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: "{{ .Release.Name }}-worker-certificates" 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | app: "{{ .Release.Name }}-worker-certificates" 14 | spec: 15 | {{- with .Values.volumes.appwrite }} 16 | {{ if ( or .config.enabled .certificates.enabled) -}} 17 | volumes: 18 | {{ if .config.enabled -}} 19 | - name: data-config 20 | persistentVolumeClaim: 21 | claimName: {{ .config.pvcName }} 22 | {{ end -}} 23 | {{ if .certificates.enabled -}} 24 | - name: data-certificates 25 | persistentVolumeClaim: 26 | claimName: {{ .certificates.pvcName }} 27 | {{ end -}} 28 | {{ end -}} 29 | {{ end -}} 30 | initContainers: 31 | {{- include "redisCheck" $ | nindent 6 }} 32 | {{- include "dbCheck" $ | nindent 6 }} 33 | containers: 34 | - name: appwrite-worker-certificates 35 | {{- with .Values.volumes.appwrite }} 36 | {{ if ( or .config.enabled .certificates.enabled) -}} 37 | volumeMounts: 38 | {{ if .config.enabled -}} 39 | - mountPath: /storage/config 40 | name: data-config 41 | {{ end -}} 42 | {{ if .certificates.enabled -}} 43 | - mountPath: /storage/certificates 44 | name: data-certificates 45 | {{ end -}} 46 | {{ end -}} 47 | {{ end -}} 48 | image: "appwrite/appwrite:{{ .Chart.AppVersion }}" 49 | command: 50 | - "worker-certificates" 51 | imagePullPolicy: IfNotPresent 52 | env: 53 | - name: _APP_ENV 54 | valueFrom: 55 | configMapKeyRef: 56 | name: "{{ .Release.Name }}-env" 57 | key: _APP_ENV 58 | - name: _APP_SYSTEM_SECURITY_EMAIL_ADDRESS 59 | valueFrom: 60 | configMapKeyRef: 61 | name: "{{ .Release.Name }}-env" 62 | key: _APP_SYSTEM_SECURITY_EMAIL_ADDRESS 63 | - name: _APP_DOMAIN_TARGET 64 | valueFrom: 65 | configMapKeyRef: 66 | name: "{{ .Release.Name }}-env" 67 | key: _APP_DOMAIN_TARGET 68 | {{- include "redisEnv" $ | nindent 10 }} 69 | {{- include "dbEnv" $ | nindent 10 }} 70 | -------------------------------------------------------------------------------- /templates/deployments/appwrite/workers/deletes.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: "{{ .Release.Name }}-worker-deletes" 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: "{{ .Release.Name }}-worker-deletes" 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | app: "{{ .Release.Name }}-worker-deletes" 14 | spec: 15 | {{- with .Values.volumes.appwrite }} 16 | {{ if (or (or .uploads.enabled .cache.enabled) .certificates.enabled) -}} 17 | volumes: 18 | {{ if .uploads.enabled -}} 19 | - name: data-uploads 20 | persistentVolumeClaim: 21 | claimName: {{ .uploads.pvcName }} 22 | {{ end -}} 23 | {{ if .cache.enabled -}} 24 | - name: data-cache 25 | persistentVolumeClaim: 26 | claimName: {{ .cache.pvcName }} 27 | {{ end -}} 28 | {{ if .certificates.enabled -}} 29 | - name: data-certificates 30 | persistentVolumeClaim: 31 | claimName: {{ .certificates.pvcName }} 32 | {{ end -}} 33 | {{ end -}} 34 | {{ end -}} 35 | initContainers: 36 | {{- include "redisCheck" $ | nindent 6 }} 37 | {{- include "dbCheck" $ | nindent 6 }} 38 | containers: 39 | - name: appwrite-worker-deletes 40 | {{- with .Values.volumes.appwrite }} 41 | {{ if (or (or .uploads.enabled .cache.enabled) .certificates.enabled) -}} 42 | volumeMounts: 43 | {{ if .uploads.enabled -}} 44 | - mountPath: /storage/uploads 45 | name: data-uploads 46 | {{ end -}} 47 | {{ if .cache.enabled -}} 48 | - mountPath: /storage/cache 49 | name: data-cache 50 | {{ end -}} 51 | {{ if .certificates.enabled -}} 52 | - mountPath: /storage/certificates 53 | name: data-certificates 54 | {{ end -}} 55 | {{ end -}} 56 | {{ end -}} 57 | image: "appwrite/appwrite:{{ .Chart.AppVersion }}" 58 | command: 59 | - "worker-deletes" 60 | imagePullPolicy: IfNotPresent 61 | env: 62 | - name: _APP_ENV 63 | valueFrom: 64 | configMapKeyRef: 65 | name: "{{ .Release.Name }}-env" 66 | key: _APP_ENV 67 | {{- include "redisEnv" $ | nindent 10 }} 68 | {{- include "dbEnv" $ | nindent 10 }} 69 | -------------------------------------------------------------------------------- /templates/deployments/appwrite/workers/functions.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: "{{ .Release.Name }}-worker-functions" 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: "{{ .Release.Name }}-worker-functions" 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | app: "{{ .Release.Name }}-worker-functions" 14 | spec: 15 | {{ if .Values.volumes.appwrite.functions.enabled -}} 16 | volumes: 17 | - name: data 18 | persistentVolumeClaim: 19 | claimName: {{ .Values.volumes.appwrite.functions.pvcName }} 20 | {{ end -}} 21 | initContainers: 22 | {{- include "redisCheck" $ | nindent 6 }} 23 | {{- include "dbCheck" $ | nindent 6 }} 24 | containers: 25 | - name: appwrite-worker-functions 26 | {{ if .Values.volumes.appwrite.functions.enabled -}} 27 | volumeMounts: 28 | - mountPath: /storage/functions 29 | name: data 30 | {{ end -}} 31 | image: "appwrite/appwrite:{{ .Chart.AppVersion }}" 32 | command: 33 | - "worker-functions" 34 | imagePullPolicy: IfNotPresent 35 | env: 36 | - name: _APP_ENV 37 | valueFrom: 38 | configMapKeyRef: 39 | name: "{{ .Release.Name }}-env" 40 | key: _APP_ENV 41 | - name: _APP_OPENSSL_KEY_V1 42 | valueFrom: 43 | secretKeyRef: 44 | name: "{{ .Release.Name }}-env" 45 | key: _APP_OPENSSL_KEY_V1 46 | - name: _APP_USAGE_STATS 47 | valueFrom: 48 | configMapKeyRef: 49 | name: "{{ .Release.Name }}-env" 50 | key: _APP_USAGE_STATS 51 | - name: _APP_FUNCTIONS_TIMEOUT 52 | valueFrom: 53 | configMapKeyRef: 54 | name: "{{ .Release.Name }}-env" 55 | key: _APP_FUNCTIONS_TIMEOUT 56 | - name: _APP_FUNCTIONS_CONTAINERS 57 | valueFrom: 58 | configMapKeyRef: 59 | name: "{{ .Release.Name }}-env" 60 | key: _APP_FUNCTIONS_CONTAINERS 61 | - name: _APP_FUNCTIONS_CPUS 62 | valueFrom: 63 | configMapKeyRef: 64 | name: "{{ .Release.Name }}-env" 65 | key: _APP_FUNCTIONS_CPUS 66 | - name: _APP_FUNCTIONS_MEMORY 67 | valueFrom: 68 | configMapKeyRef: 69 | name: "{{ .Release.Name }}-env" 70 | key: _APP_FUNCTIONS_MEMORY 71 | - name: _APP_FUNCTIONS_MEMORY_SWAP 72 | valueFrom: 73 | configMapKeyRef: 74 | name: "{{ .Release.Name }}-env" 75 | key: _APP_FUNCTIONS_MEMORY_SWAP 76 | - name: _APP_FUNCTIONS_RUNTIMES 77 | valueFrom: 78 | configMapKeyRef: 79 | name: "{{ .Release.Name }}-env" 80 | key: _APP_FUNCTIONS_RUNTIMES 81 | {{- include "redisEnv" $ | nindent 10 }} 82 | {{- include "dbEnv" $ | nindent 10 }} 83 | -------------------------------------------------------------------------------- /templates/deployments/appwrite/workers/mails.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: "{{ .Release.Name }}-worker-mails" 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: "{{ .Release.Name }}-worker-mails" 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | app: "{{ .Release.Name }}-worker-mails" 14 | spec: 15 | initContainers: 16 | {{- include "redisCheck" $ | nindent 6 }} 17 | containers: 18 | - name: appwrite-worker-mails 19 | image: "appwrite/appwrite:{{ .Chart.AppVersion }}" 20 | command: 21 | - "worker-mails" 22 | imagePullPolicy: IfNotPresent 23 | env: 24 | - name: _APP_ENV 25 | valueFrom: 26 | configMapKeyRef: 27 | name: "{{ .Release.Name }}-env" 28 | key: _APP_ENV 29 | - name: _APP_SYSTEM_EMAIL_NAME 30 | valueFrom: 31 | configMapKeyRef: 32 | name: "{{ .Release.Name }}-env" 33 | key: _APP_SYSTEM_EMAIL_NAME 34 | - name: _APP_SYSTEM_EMAIL_ADDRESS 35 | valueFrom: 36 | configMapKeyRef: 37 | name: "{{ .Release.Name }}-env" 38 | key: _APP_SYSTEM_EMAIL_ADDRESS 39 | {{- include "redisEnv" $ | nindent 10 }} 40 | {{- include "smtpEnv" $ | nindent 10 }} -------------------------------------------------------------------------------- /templates/deployments/appwrite/workers/tasks.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: "{{ .Release.Name }}-worker-tasks" 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: "{{ .Release.Name }}-worker-tasks" 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | app: "{{ .Release.Name }}-worker-tasks" 14 | spec: 15 | initContainers: 16 | {{- include "redisCheck" $ | nindent 6 }} 17 | {{- include "dbCheck" $ | nindent 6 }} 18 | containers: 19 | - name: appwrite-worker-tasks 20 | image: "appwrite/appwrite:{{ .Chart.AppVersion }}" 21 | command: 22 | - "worker-tasks" 23 | imagePullPolicy: IfNotPresent 24 | env: 25 | - name: _APP_ENV 26 | valueFrom: 27 | configMapKeyRef: 28 | name: "{{ .Release.Name }}-env" 29 | key: _APP_ENV 30 | - name: _APP_SYSTEM_SECURITY_EMAIL_ADDRESS 31 | valueFrom: 32 | configMapKeyRef: 33 | name: "{{ .Release.Name }}-env" 34 | key: _APP_SYSTEM_SECURITY_EMAIL_ADDRESS 35 | - name: _APP_OPENSSL_KEY_V1 36 | valueFrom: 37 | secretKeyRef: 38 | name: "{{ .Release.Name }}-env" 39 | key: _APP_OPENSSL_KEY_V1 40 | {{- include "redisEnv" $ | nindent 10 }} 41 | {{- include "dbEnv" $ | nindent 10 }} 42 | -------------------------------------------------------------------------------- /templates/deployments/appwrite/workers/usage.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: "{{ .Release.Name }}-worker-usage" 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: "{{ .Release.Name }}-worker-usage" 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | app: "{{ .Release.Name }}-worker-usage" 14 | spec: 15 | initContainers: 16 | {{- include "redisCheck" $ | nindent 6 }} 17 | containers: 18 | - name: appwrite-worker-usage 19 | image: "appwrite/appwrite:{{ .Chart.AppVersion }}" 20 | command: 21 | - "worker-usage" 22 | imagePullPolicy: IfNotPresent 23 | env: 24 | - name: _APP_ENV 25 | valueFrom: 26 | configMapKeyRef: 27 | name: "{{ .Release.Name }}-env" 28 | key: _APP_ENV 29 | - name: _APP_STATSD_HOST 30 | value: "{{ .Release.Name }}-telegraf.{{ .Release.Namespace }}" 31 | - name: _APP_STATSD_PORT 32 | valueFrom: 33 | configMapKeyRef: 34 | name: "{{ .Release.Name }}-env" 35 | key: _APP_STATSD_PORT 36 | {{- include "redisEnv" $ | nindent 10 }} 37 | -------------------------------------------------------------------------------- /templates/deployments/appwrite/workers/webhooks.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: "{{ .Release.Name }}-worker-webhooks" 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: "{{ .Release.Name }}-worker-webhooks" 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | app: "{{ .Release.Name }}-worker-webhooks" 14 | spec: 15 | initContainers: 16 | {{- include "redisCheck" $ | nindent 6 }} 17 | {{- include "dbCheck" $ | nindent 6 }} 18 | containers: 19 | - name: appwrite-worker-webhooks 20 | image: "appwrite/appwrite:{{ .Chart.AppVersion }}" 21 | command: 22 | - "worker-webhooks" 23 | imagePullPolicy: IfNotPresent 24 | env: 25 | - name: _APP_ENV 26 | valueFrom: 27 | configMapKeyRef: 28 | name: "{{ .Release.Name }}-env" 29 | key: _APP_ENV 30 | - name: _APP_SYSTEM_SECURITY_EMAIL_ADDRESS 31 | valueFrom: 32 | configMapKeyRef: 33 | name: "{{ .Release.Name }}-env" 34 | key: _APP_SYSTEM_SECURITY_EMAIL_ADDRESS 35 | {{- include "redisEnv" $ | nindent 10 }} 36 | -------------------------------------------------------------------------------- /templates/deployments/influxdb.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: "{{ .Release.Name }}-influxdb" 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: "{{ .Release.Name }}-influxdb" 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | app: "{{ .Release.Name }}-influxdb" 14 | spec: 15 | {{ if .Values.volumes.influxdb.enabled -}} 16 | volumes: 17 | - name: data 18 | persistentVolumeClaim: 19 | claimName: {{ .Values.volumes.influxdb.pvcName }} 20 | {{ end -}} 21 | containers: 22 | - name: influxdb 23 | image: "appwrite/influxdb:1.0.0" 24 | imagePullPolicy: IfNotPresent 25 | {{ if .Values.volumes.influxdb.enabled -}} 26 | volumeMounts: 27 | - mountPath: /var/lib/influxdb 28 | name: data 29 | {{ end -}} 30 | ports: 31 | - containerPort: {{ .Values.influxdb.port }} 32 | name: influxdb 33 | {{- include "probeHttp" "influxdb" | nindent 8 -}} -------------------------------------------------------------------------------- /templates/deployments/mariadb.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: "{{ .Release.Name }}-db" 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: "{{ .Release.Name }}-db" 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | app: "{{ .Release.Name }}-db" 14 | spec: 15 | {{ if .Values.volumes.mysql.enabled -}} 16 | volumes: 17 | - name: data 18 | persistentVolumeClaim: 19 | claimName: {{ .Values.volumes.mysql.pvcName }} 20 | {{ end -}} 21 | containers: 22 | - name: mariadb 23 | image: "appwrite/mariadb:1.2.0" 24 | imagePullPolicy: IfNotPresent 25 | {{ if .Values.volumes.mysql.enabled -}} 26 | volumeMounts: 27 | - mountPath: /var/lib/mysql 28 | name: data 29 | {{ end -}} 30 | env: 31 | - name: MYSQL_DATABASE 32 | valueFrom: 33 | configMapKeyRef: 34 | name: "{{ .Release.Name }}-env" 35 | key: _APP_DB_SCHEMA 36 | - name: MYSQL_ROOT_PASSWORD 37 | valueFrom: 38 | secretKeyRef: 39 | name: "{{ .Release.Name }}-env" 40 | key: _APP_DB_ROOT_PASS 41 | - name: MYSQL_USER 42 | valueFrom: 43 | secretKeyRef: 44 | name: "{{ .Release.Name }}-env" 45 | key: _APP_DB_USER 46 | - name: MYSQL_PASSWORD 47 | valueFrom: 48 | secretKeyRef: 49 | name: "{{ .Release.Name }}-env" 50 | key: _APP_DB_PASS 51 | ports: 52 | - containerPort: {{ .Values.db.port }} 53 | name: db 54 | {{- include "probeTcp" "db" | nindent 8 -}} -------------------------------------------------------------------------------- /templates/deployments/redis.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: "{{ .Release.Name }}-redis" 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: "{{ .Release.Name }}-redis" 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | app: "{{ .Release.Name }}-redis" 14 | spec: 15 | {{ if .Values.volumes.redis.enabled -}} 16 | volumes: 17 | - name: data 18 | persistentVolumeClaim: 19 | claimName: {{ .Values.volumes.redis.pvcName }} 20 | {{ end -}} 21 | containers: 22 | - name: redis 23 | image: "redis:6.0-alpine3.12" 24 | imagePullPolicy: IfNotPresent 25 | {{ if .Values.volumes.redis.enabled -}} 26 | volumeMounts: 27 | - mountPath: /data 28 | name: data 29 | {{ end -}} 30 | ports: 31 | - containerPort: {{ .Values.redis.port }} 32 | name: redis 33 | {{- include "probeTcp" "redis" | nindent 8 -}} -------------------------------------------------------------------------------- /templates/deployments/telegraf.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: "{{ .Release.Name }}-telegraf" 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: "{{ .Release.Name }}-telegraf" 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | app: "{{ .Release.Name }}-telegraf" 14 | spec: 15 | initContainers: 16 | {{- include "influxdbCheck" $ | nindent 6 }} 17 | containers: 18 | - name: telegraf 19 | image: "appwrite/telegraf:1.2.0" 20 | imagePullPolicy: IfNotPresent 21 | env: 22 | - name: _APP_INFLUXDB_HOST 23 | value: "{{ .Release.Name }}-influxdb.{{ .Release.Namespace }}" 24 | - name: _APP_INFLUXDB_PORT 25 | valueFrom: 26 | configMapKeyRef: 27 | name: "{{ .Release.Name }}-env" 28 | key: _APP_INFLUXDB_PORT 29 | ports: 30 | - containerPort: {{ .Values.statsd.port }} 31 | name: statsd 32 | protocol: UDP 33 | -------------------------------------------------------------------------------- /templates/ingress/core.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.appwrite.enabled -}} 2 | apiVersion: networking.k8s.io/v1 3 | kind: Ingress 4 | metadata: 5 | name: appwrite 6 | labels: 7 | app: appwrite 8 | annotations: 9 | {{- .Values.ingress.appwrite.annotations | toYaml | nindent 4 }} 10 | spec: 11 | rules: 12 | - host: {{ .Values.appwrite.domain }} 13 | http: 14 | paths: 15 | - path: / 16 | pathType: Prefix 17 | backend: 18 | service: 19 | name: "{{ .Release.Name }}-appwrite" 20 | port: 21 | number: 80 22 | {{- if .Values.ingress.appwrite.tls.enabled }} 23 | tls: 24 | - hosts: 25 | - {{ .Values.appwrite.domain | quote }} 26 | secretName: {{ .Values.ingress.appwrite.tls.secretName }} 27 | {{- end -}} 28 | {{- end -}} -------------------------------------------------------------------------------- /templates/ingress/realtime.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.realtime.enabled -}} 2 | apiVersion: networking.k8s.io/v1 3 | kind: Ingress 4 | metadata: 5 | name: realtime 6 | labels: 7 | app: realtime 8 | annotations: 9 | {{- .Values.ingress.realtime.annotations | toYaml | nindent 4 }} 10 | spec: 11 | rules: 12 | - host: {{ .Values.appwrite.domain }} 13 | http: 14 | paths: 15 | - path: /v1/realtime 16 | pathType: Prefix 17 | backend: 18 | service: 19 | name: "{{ .Release.Name }}-realtime" 20 | port: 21 | number: 80 22 | {{- if .Values.ingress.realtime.tls.enabled }} 23 | tls: 24 | - hosts: 25 | - {{ .Values.appwrite.domain | quote }} 26 | secretName: {{ .Values.ingress.realtime.tls.secretName }} 27 | {{- end -}} 28 | {{- end -}} -------------------------------------------------------------------------------- /templates/secret-env.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: "{{ .Release.Name }}-env" 5 | type: Opaque 6 | data: 7 | _APP_OPENSSL_KEY_V1: {{ .Values.appwrite.sslKey | b64enc }} 8 | {{ if ne .Values.redis.user "" -}}_APP_REDIS_USER: {{ .Values.redis.user | b64enc }}{{- end -}} 9 | {{ if ne .Values.redis.pass "" -}}_APP_REDIS_PASS: {{ .Values.redis.pass | b64enc }}{{- end -}} 10 | _APP_DB_USER: {{ .Values.db.user | b64enc }} 11 | _APP_DB_PASS: {{ .Values.db.password | b64enc }} 12 | _APP_DB_ROOT_PASS: {{ .Values.db.rootPass | b64enc }} 13 | _APP_SMTP_USERNAME: {{ .Values.smtp.user | b64enc }} 14 | _APP_SMTP_PASSWORD: {{ .Values.smtp.pass | b64enc }} -------------------------------------------------------------------------------- /templates/secrets/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k3env/appwrite-helm/2a6143940b934c9a7d81a812bf67cc19ec0ed8d8/templates/secrets/.keep -------------------------------------------------------------------------------- /templates/services/appwrite/core.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: "{{ .Release.Name }}-appwrite" 5 | spec: 6 | ports: 7 | - port: 80 8 | targetPort: 80 9 | selector: 10 | app: "{{ .Release.Name }}-appwrite" -------------------------------------------------------------------------------- /templates/services/appwrite/realtime.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: "{{ .Release.Name }}-realtime" 5 | spec: 6 | ports: 7 | - port: 80 8 | targetPort: 80 9 | selector: 10 | app: "{{ .Release.Name }}-realtime" -------------------------------------------------------------------------------- /templates/services/influxdb.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: "{{ .Release.Name }}-influxdb" 5 | spec: 6 | ports: 7 | - port: {{ .Values.influxdb.port }} 8 | targetPort: {{ .Values.influxdb.port }} 9 | selector: 10 | app: "{{ .Release.Name }}-influxdb" -------------------------------------------------------------------------------- /templates/services/mariadb.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: "{{ .Release.Name }}-db" 5 | spec: 6 | ports: 7 | - port: {{ .Values.db.port }} 8 | targetPort: {{ .Values.db.port }} 9 | selector: 10 | app: "{{ .Release.Name }}-db" -------------------------------------------------------------------------------- /templates/services/redis.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: "{{ .Release.Name }}-redis" 5 | spec: 6 | ports: 7 | - port: {{ .Values.redis.port }} 8 | targetPort: {{ .Values.redis.port }} 9 | selector: 10 | app: "{{ .Release.Name }}-redis" -------------------------------------------------------------------------------- /templates/services/telegraf.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: "{{ .Release.Name }}-telegraf" 5 | spec: 6 | ports: 7 | - port: {{ .Values.statsd.port }} 8 | targetPort: {{ .Values.statsd.port }} 9 | appProtocol: UDP 10 | selector: 11 | app: "{{ .Release.Name }}-telegraf" -------------------------------------------------------------------------------- /templates/volumes/appwrite/cache.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.volumes.appwrite.cache }} 2 | {{- if (and .enabled .create) -}} 3 | apiVersion: v1 4 | kind: PersistentVolumeClaim 5 | metadata: 6 | name: {{ .pvcName }} 7 | spec: 8 | accessModes: 9 | - "ReadWriteOnce" 10 | resources: 11 | requests: 12 | storage: {{ .storageRequest }} 13 | storageClassName: {{ .storageClass }} 14 | {{- end -}} 15 | {{- end -}} -------------------------------------------------------------------------------- /templates/volumes/appwrite/certificates.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.volumes.appwrite.certificates }} 2 | {{- if (and .enabled .create) -}} 3 | apiVersion: v1 4 | kind: PersistentVolumeClaim 5 | metadata: 6 | name: {{ .pvcName }} 7 | spec: 8 | accessModes: 9 | - "ReadWriteOnce" 10 | resources: 11 | requests: 12 | storage: {{ .storageRequest }} 13 | storageClassName: {{ .storageClass }} 14 | {{- end -}} 15 | {{- end -}} -------------------------------------------------------------------------------- /templates/volumes/appwrite/config.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.volumes.appwrite.config }} 2 | {{- if (and .enabled .create) -}} 3 | apiVersion: v1 4 | kind: PersistentVolumeClaim 5 | metadata: 6 | name: {{ .pvcName }} 7 | spec: 8 | accessModes: 9 | - "ReadWriteOnce" 10 | resources: 11 | requests: 12 | storage: {{ .storageRequest }} 13 | storageClassName: {{ .storageClass }} 14 | {{- end -}} 15 | {{- end -}} -------------------------------------------------------------------------------- /templates/volumes/appwrite/functions.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.volumes.appwrite.functions }} 2 | {{- if (and .enabled .create) -}} 3 | apiVersion: v1 4 | kind: PersistentVolumeClaim 5 | metadata: 6 | name: {{ .pvcName }} 7 | spec: 8 | accessModes: 9 | - "ReadWriteOnce" 10 | resources: 11 | requests: 12 | storage: {{ .storageRequest }} 13 | storageClassName: {{ .storageClass }} 14 | {{- end -}} 15 | {{- end -}} -------------------------------------------------------------------------------- /templates/volumes/appwrite/uploads.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.volumes.appwrite.uploads }} 2 | {{- if (and .enabled .create) -}} 3 | apiVersion: v1 4 | kind: PersistentVolumeClaim 5 | metadata: 6 | name: {{ .pvcName }} 7 | spec: 8 | accessModes: 9 | - "ReadWriteOnce" 10 | resources: 11 | requests: 12 | storage: {{ .storageRequest }} 13 | storageClassName: {{ .storageClass }} 14 | {{- end -}} 15 | {{- end -}} -------------------------------------------------------------------------------- /templates/volumes/influxdb.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.volumes.influxdb }} 2 | {{- if (and .enabled .create) -}} 3 | apiVersion: v1 4 | kind: PersistentVolumeClaim 5 | metadata: 6 | name: {{ .pvcName }} 7 | spec: 8 | accessModes: 9 | - "ReadWriteOnce" 10 | resources: 11 | requests: 12 | storage: {{ .storageRequest }} 13 | storageClassName: {{ .storageClass }} 14 | {{- end -}} 15 | {{- end -}} -------------------------------------------------------------------------------- /templates/volumes/mariadb.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.volumes.mysql }} 2 | {{- if (and .enabled .create) -}} 3 | apiVersion: v1 4 | kind: PersistentVolumeClaim 5 | metadata: 6 | name: {{ .pvcName }} 7 | spec: 8 | accessModes: 9 | - "ReadWriteOnce" 10 | resources: 11 | requests: 12 | storage: {{ .storageRequest }} 13 | storageClassName: {{ .storageClass }} 14 | {{- end -}} 15 | {{- end -}} -------------------------------------------------------------------------------- /templates/volumes/redis.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.volumes.redis }} 2 | {{- if (and .enabled .create) -}} 3 | apiVersion: v1 4 | kind: PersistentVolumeClaim 5 | metadata: 6 | name: {{ .pvcName }} 7 | spec: 8 | accessModes: 9 | - "ReadWriteOnce" 10 | resources: 11 | requests: 12 | storage: {{ .storageRequest }} 13 | storageClassName: {{ .storageClass }} 14 | {{- end -}} 15 | {{- end -}} -------------------------------------------------------------------------------- /values.yaml: -------------------------------------------------------------------------------- 1 | appwrite: 2 | env: "production" 3 | locale: "en" 4 | sslKey: "" 5 | domain: "localhost" 6 | options: 7 | abuse: true 8 | forceHttps: false 9 | console: 10 | whitelist: 11 | root: true 12 | emails: [] 13 | ips: [] 14 | system: 15 | email: 16 | name: "Appwrite" 17 | addr: "team@appwrite.io" 18 | responseFormat: "" 19 | securityAddress: "certs@appwrite.io" 20 | usageStats: true 21 | 22 | ingress: 23 | appwrite: 24 | enabled: true 25 | externalPort: 80 26 | annotations: [] 27 | tls: 28 | enabled: true 29 | secretName: "" 30 | realtime: 31 | enabled: true 32 | externalPort: 80 33 | annotations: [] 34 | tls: 35 | enabled: true 36 | secretName: "" 37 | 38 | redis: 39 | port: 6379 40 | user: "" 41 | pass: "" 42 | 43 | db: 44 | port: 3306 45 | schema: "appwrite" 46 | user: "user" 47 | password: "password" 48 | rootPass: "rootsecretpassword" 49 | 50 | influxdb: 51 | port: 8086 52 | 53 | statsd: 54 | port: 8125 55 | 56 | smtp: 57 | host: "" 58 | port: "" 59 | secure: false 60 | user: "" 61 | pass: "" 62 | 63 | storage: 64 | limit: 10Mi 65 | antivirus: 66 | enabled: false 67 | host: "clamav" 68 | port: 3310 69 | 70 | functions: 71 | timeout: 900 72 | containers: 10 73 | cpus: 1 74 | memory: 256Mb 75 | swap: 256Mb 76 | runtimes: 77 | - node-16.0 78 | - php-8.0 79 | - python-3.9 80 | - ruby-3.0 81 | - java-16.0 82 | - dart-2.14 83 | - dotnet-5.0 84 | envs: 85 | - node-16.0 86 | - php-7.4 87 | - python-3.9 88 | - ruby-3.0 89 | - java-16.0 90 | - dart-2.14 91 | - dotnet-5.0 92 | 93 | volumes: 94 | appwrite: 95 | uploads: 96 | enabled: true 97 | create: true 98 | storageClass: "" 99 | storageRequest: 100Mi 100 | pvcName: "appwrite-uploads-data" 101 | cache: 102 | enabled: true 103 | create: true 104 | storageClass: "" 105 | storageRequest: 100Mi 106 | pvcName: "appwrite-cache-data" 107 | config: 108 | enabled: true 109 | create: true 110 | storageClass: "" 111 | storageRequest: 100Mi 112 | pvcName: "appwrite-config-data" 113 | certificates: 114 | enabled: true 115 | create: true 116 | storageClass: "" 117 | storageRequest: 100Mi 118 | pvcName: "appwrite-certificates-data" 119 | functions: 120 | enabled: true 121 | create: true 122 | storageClass: "" 123 | storageRequest: 100Mi 124 | pvcName: "appwrite-functions-data" 125 | mysql: 126 | enabled: true 127 | create: true 128 | storageClass: "" 129 | storageRequest: 1Gi 130 | pvcName: "mysql-data" 131 | influxdb: 132 | enabled: true 133 | create: true 134 | storageClass: "" 135 | storageRequest: 1Gi 136 | pvcName: "influxdb-data" 137 | redis: 138 | enabled: true 139 | create: true 140 | storageClass: "" 141 | storageRequest: 1Gi 142 | pvcName: "redis-data" 143 | --------------------------------------------------------------------------------