Add Helm configMap to update application configuration (#10157)

This commit is contained in:
geekup-legodevops 2022-01-31 14:57:01 +07:00 committed by GitHub
parent 6b1e3fe7c0
commit e85b34d66e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 174 additions and 85 deletions

View File

@ -64,7 +64,10 @@ COPY ./app/rts/package.json ./app/rts/dist/* rts/
COPY ./app/rts/node_modules rts/node_modules COPY ./app/rts/node_modules rts/node_modules
# Nginx & MongoDB config template - Configuration layer # Nginx & MongoDB config template - Configuration layer
COPY ./deploy/docker/templates/nginx/* ./deploy/docker/templates/mongo-init.js.sh ./deploy/docker/templates/docker.env.sh templates/ COPY ./deploy/docker/templates/nginx/* \
./deploy/docker/templates/mongo-init.js.sh\
./deploy/docker/templates/docker.env.sh \
templates/
# Add bootstrapfile # Add bootstrapfile
COPY ./deploy/docker/entrypoint.sh ./deploy/docker/scripts/* ./ COPY ./deploy/docker/entrypoint.sh ./deploy/docker/scripts/* ./

View File

@ -2,6 +2,67 @@
set -e set -e
init_env_file() {
CONF_PATH="/appsmith-stacks/configuration"
ENV_PATH="$CONF_PATH/docker.env"
TEMPLATES_PATH="/opt/appsmith/templates"
echo "Initialize .env file"
if ! [[ -e "$ENV_PATH" ]]; then
# Generate new docker.env file when initializing container for first time or in Heroku which does not have persistent volume
echo "Generating default configuration file"
mkdir -p "$CONF_PATH"
AUTO_GEN_MONGO_PASSWORD=$(
tr -dc A-Za-z0-9 </dev/urandom | head -c 13
echo ''
)
AUTO_GEN_ENCRYPTION_PASSWORD=$(
tr -dc A-Za-z0-9 </dev/urandom | head -c 13
echo ''
)
AUTO_GEN_ENCRYPTION_SALT=$(
tr -dc A-Za-z0-9 </dev/urandom | head -c 13
echo ''
)
bash "$TEMPLATES_PATH/docker.env.sh" "$AUTO_GEN_MONGO_PASSWORD" "$AUTO_GEN_ENCRYPTION_PASSWORD" "$AUTO_GEN_ENCRYPTION_SALT" > "$ENV_PATH"
fi
printenv | grep -E '^APPSMITH_|^MONGO_' > "$TEMPLATES_PATH/pre-define.env"
echo 'Load environment configuration'
set -o allexport
. "$ENV_PATH"
. "$TEMPLATES_PATH/pre-define.env"
set +o allexport
}
unset_unused_variables() {
# Check for enviroment vairalbes
echo 'Checking environment configuration'
if [[ -z "${APPSMITH_MAIL_ENABLED}" ]]; then
unset APPSMITH_MAIL_ENABLED # If this field is empty is might cause application crash
fi
if [[ -z "${APPSMITH_OAUTH2_GITHUB_CLIENT_ID}" ]] || [[ -z "${APPSMITH_OAUTH2_GITHUB_CLIENT_SECRET}" ]]; then
unset APPSMITH_OAUTH2_GITHUB_CLIENT_ID # If this field is empty is might cause application crash
unset APPSMITH_OAUTH2_GITHUB_CLIENT_SECRET
fi
if [[ -z "${APPSMITH_OAUTH2_GOOGLE_CLIENT_ID}" ]] || [[ -z "${APPSMITH_OAUTH2_GOOGLE_CLIENT_SECRET}" ]]; then
unset APPSMITH_OAUTH2_GOOGLE_CLIENT_ID # If this field is empty is might cause application crash
unset APPSMITH_OAUTH2_GOOGLE_CLIENT_SECRET
fi
if [[ -z "${APPSMITH_GOOGLE_MAPS_API_KEY}" ]]; then
unset APPSMITH_GOOGLE_MAPS_API_KEY
fi
if [[ -z "${APPSMITH_RECAPTCHA_SITE_KEY}" ]] || [[ -z "${APPSMITH_RECAPTCHA_SECRET_KEY}" ]] || [[ -z "${APPSMITH_RECAPTCHA_ENABLED}" ]]; then
unset APPSMITH_RECAPTCHA_SITE_KEY # If this field is empty is might cause application crash
unset APPSMITH_RECAPTCHA_SECRET_KEY
unset APPSMITH_RECAPTCHA_ENABLED
fi
}
check_initialized_db() { check_initialized_db() {
echo 'Check initialized database' echo 'Check initialized database'
shouldPerformInitdb=1 shouldPerformInitdb=1
@ -88,62 +149,9 @@ configure_supervisord() {
fi fi
} }
echo 'Checking configuration file'
CONF_PATH="/appsmith-stacks/configuration"
ENV_PATH="$CONF_PATH/docker.env"
if ! [[ -e "$ENV_PATH" ]]; then
echo "Generating default configuration file"
mkdir -p "$CONF_PATH"
AUTO_GEN_MONGO_PASSWORD=$(
tr -dc A-Za-z0-9 </dev/urandom | head -c 13
echo ''
)
AUTO_GEN_ENCRYPTION_PASSWORD=$(
tr -dc A-Za-z0-9 </dev/urandom | head -c 13
echo ''
)
AUTO_GEN_ENCRYPTION_SALT=$(
tr -dc A-Za-z0-9 </dev/urandom | head -c 13
echo ''
)
bash "/opt/appsmith/templates/docker.env.sh" "$AUTO_GEN_MONGO_PASSWORD" "$AUTO_GEN_ENCRYPTION_PASSWORD" "$AUTO_GEN_ENCRYPTION_SALT" >"$ENV_PATH"
fi
if [[ -f "$ENV_PATH" ]]; then
sed -i 's/APPSMITH_MONGO_USERNAME/MONGO_INITDB_ROOT_USERNAME/; s/APPSMITH_MONGO_PASSWORD/MONGO_INITDB_ROOT_PASSWORD/; s/APPSMITH_MONGO_DATABASE/MONGO_INITDB_DATABASE/' "$ENV_PATH"
echo 'Load environment configuration'
set -o allexport
. "$ENV_PATH"
set +o allexport
fi
# Check for enviroment vairalbes
echo 'Checking environment configuration'
if [[ -z "${APPSMITH_MAIL_ENABLED}" ]]; then
unset APPSMITH_MAIL_ENABLED # If this field is empty is might cause application crash
fi
if [[ -z "${APPSMITH_OAUTH2_GITHUB_CLIENT_ID}" ]] || [[ -z "${APPSMITH_OAUTH2_GITHUB_CLIENT_SECRET}" ]]; then
unset APPSMITH_OAUTH2_GITHUB_CLIENT_ID # If this field is empty is might cause application crash
unset APPSMITH_OAUTH2_GITHUB_CLIENT_SECRET
fi
if [[ -z "${APPSMITH_OAUTH2_GOOGLE_CLIENT_ID}" ]] || [[ -z "${APPSMITH_OAUTH2_GOOGLE_CLIENT_SECRET}" ]]; then
unset APPSMITH_OAUTH2_GOOGLE_CLIENT_ID # If this field is empty is might cause application crash
unset APPSMITH_OAUTH2_GOOGLE_CLIENT_SECRET
fi
if [[ -z "${APPSMITH_GOOGLE_MAPS_API_KEY}" ]]; then
unset APPSMITH_GOOGLE_MAPS_API_KEY
fi
if [[ -z "${APPSMITH_RECAPTCHA_SITE_KEY}" ]] || [[ -z "${APPSMITH_RECAPTCHA_SECRET_KEY}" ]] || [[ -z "${APPSMITH_RECAPTCHA_ENABLED}" ]]; then
unset APPSMITH_RECAPTCHA_SITE_KEY # If this field is empty is might cause application crash
unset APPSMITH_RECAPTCHA_SECRET_KEY
unset APPSMITH_RECAPTCHA_ENABLED
fi
# Main Section # Main Section
init_env_file
unset_unused_variables
init_mongodb init_mongodb
mount_letsencrypt_directory mount_letsencrypt_directory
configure_supervisord configure_supervisord

View File

@ -2,25 +2,28 @@
set -e set -e
ENV_PATH="/appsmith-stacks/configuration/docker.env"
PRE_DEFINED_ENV_PATH="/opt/appsmith/templates/pre-define.env"
if [[ -f /appsmith-stacks/configuration/docker.env ]]; then if [[ -f /appsmith-stacks/configuration/docker.env ]]; then
echo 'Load environment configuration' echo 'Load environment configuration'
set -o allexport set -o allexport
. /appsmith-stacks/configuration/docker.env . "$ENV_PATH"
set +o allexport . "$PRE_DEFINED_ENV_PATH"
set +o allexport
fi fi
if [[ -n $APPSMITH_CUSTOM_DOMAIN ]]; then if [[ -n $APPSMITH_CUSTOM_DOMAIN ]]; then
data_path="/appsmith-stacks/data/certificate" data_path="/appsmith-stacks/data/certificate"
domain="$APPSMITH_CUSTOM_DOMAIN" domain="$APPSMITH_CUSTOM_DOMAIN"
rsa_key_size=4096 rsa_key_size=4096
certbot certonly --webroot --webroot-path="$data_path/certbot" \ certbot certonly --webroot --webroot-path="$data_path/certbot" \
--register-unsafely-without-email \ --register-unsafely-without-email \
--domains $domain \ --domains $domain \
--rsa-key-size $rsa_key_size \ --rsa-key-size $rsa_key_size \
--agree-tos \ --agree-tos \
--force-renewal --force-renewal
supervisorctl restart editor supervisorctl restart editor
else else
echo 'Custom domain not configured. Cannot enable SSL without a custom domain.' >&2 echo 'Custom domain not configured. Cannot enable SSL without a custom domain.' >&2
fi fi

View File

@ -1,9 +1,11 @@
#!/bin/bash #!/bin/bash
ENV_PATH="/appsmith-stacks/configuration/docker.env" ENV_PATH="/appsmith-stacks/configuration/docker.env"
PRE_DEFINED_ENV_PATH="/opt/appsmith/templates/pre-define.env"
echo 'Load environment configuration' echo 'Load environment configuration'
set -o allexport set -o allexport
. "$ENV_PATH" . "$ENV_PATH"
. "$PRE_DEFINED_ENV_PATH"
set +o allexport set +o allexport
if [[ -z "${APPSMITH_MAIL_ENABLED}" ]]; then if [[ -z "${APPSMITH_MAIL_ENABLED}" ]]; then

View File

@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
set -o nounset set -o nounset
MONGO_PASSWORD="$1" MONGO_PASSWORD="$1"
ENCRYPTION_PASSWORD="$2" ENCRYPTION_PASSWORD="$2"
ENCRYPTION_SALT="$3" ENCRYPTION_SALT="$3"
@ -43,7 +42,7 @@ APPSMITH_CLIENT_LOG_LEVEL=
APPSMITH_GOOGLE_MAPS_API_KEY= APPSMITH_GOOGLE_MAPS_API_KEY=
# Email server # Email server
APPSMITH_MAIL_ENABLED=false APPSMITH_MAIL_ENABLED=
APPSMITH_MAIL_HOST= APPSMITH_MAIL_HOST=
APPSMITH_MAIL_PORT= APPSMITH_MAIL_PORT=
APPSMITH_MAIL_USERNAME= APPSMITH_MAIL_USERNAME=
@ -60,7 +59,6 @@ APPSMITH_MAIL_SMTP_TLS_ENABLED=
# Note: This only takes effect in self-hosted scenarios. # Note: This only takes effect in self-hosted scenarios.
# Please visit: https://docs.appsmith.com/telemetry to read more about anonymized data collected by Appsmith # Please visit: https://docs.appsmith.com/telemetry to read more about anonymized data collected by Appsmith
APPSMITH_DISABLE_TELEMETRY=false APPSMITH_DISABLE_TELEMETRY=false
#APPSMITH_SENTRY_DSN= #APPSMITH_SENTRY_DSN=
#APPSMITH_SENTRY_ENVIRONMENT= #APPSMITH_SENTRY_ENVIRONMENT=
@ -82,8 +80,9 @@ APPSMITH_ENCRYPTION_PASSWORD=$ENCRYPTION_PASSWORD
APPSMITH_ENCRYPTION_SALT=$ENCRYPTION_SALT APPSMITH_ENCRYPTION_SALT=$ENCRYPTION_SALT
APPSMITH_CUSTOM_DOMAIN= APPSMITH_CUSTOM_DOMAIN=
# APPSMITH_PLUGIN_MAX_RESPONSE_SIZE_MB=5
# APPSMITH_PLUGIN_MAX_RESPONSE_SIZE_MB=5
# MAX PAYLOAD SIZE # MAX PAYLOAD SIZE
# APPSMITH_CODEC_SIZE= # APPSMITH_CODEC_SIZE=
EOF
EOF

View File

@ -12,4 +12,4 @@ sources:
- https://github.com/appsmithorg/appsmith - https://github.com/appsmithorg/appsmith
home: https://www.appsmith.com/ home: https://www.appsmith.com/
icon: https://assets.appsmith.com/appsmith-icon.png icon: https://assets.appsmith.com/appsmith-icon.png
version: 1.4.1 version: 1.5.0

View File

@ -163,13 +163,49 @@ helm install \
``` ```
The above command deploys Appsmith application and configure application to use storage class name `appsmith-pv` The above command deploys Appsmith application and configure application to use storage class name `appsmith-pv`
Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example:
``` ```
helm install -f values.yaml stable-appsmith/appsmith --generate-name helm install -f values.yaml stable-appsmith/appsmith --generate-name
``` ```
*Tip: You can use the default [values.yaml](https://github.com/appsmithorg/appsmith/blob/release/deploy/helm/values.yaml)* *Tip: You can use the default [values.yaml](https://github.com/appsmithorg/appsmith/blob/release/deploy/helm/values.yaml)*
### Appsmith configuration
To change Appsmith configurations, you can use configuration UI in application or update value in values.yaml(The available configurations is listed below).
| Name | Value |
| ---------------------------------------------------- | --------------------- |
| `applicationConfig.APPSMITH_OAUTH2_GOOGLE_CLIENT_ID` | `""` |
| `applicationConfig.APPSMITH_OAUTH2_GOOGLE_CLIENT_SECRET`| `""` |
| `applicationConfig.APPSMITH_OAUTH2_GITHUB_CLIENT_ID` | `""` |
| `applicationConfig.APPSMITH_OAUTH2_GITHUB_CLIENT_SECRET`| `""` |
| `applicationConfig.APPSMITH_CLIENT_LOG_LEVEL` | `""` |
| `applicationConfig.APPSMITH_GOOGLE_MAPS_API_KEY` | `""` |
| `applicationConfig.APPSMITH_MAIL_ENABLED` | `""` |
| `applicationConfig.APPSMITH_MAIL_HOST` | `""` |
| `applicationConfig.APPSMITH_MAIL_PORT` | `""` |
| `applicationConfig.APPSMITH_MAIL_USERNAME` | `""` |
| `applicationConfig.APPSMITH_MAIL_PASSWORD` | `""` |
| `applicationConfig.APPSMITH_MAIL_FROM` | `""` |
| `applicationConfig.APPSMITH_REPLY_TO` | `""` |
| `applicationConfig.APPSMITH_MAIL_SMTP_AUTH` | `""` |
| `applicationConfig.APPSMITH_MAIL_SMTP_TLS_ENABLED` | `""` |
| `applicationConfig.APPSMITH_DISABLE_TELEMETRY` | `""` |
| `applicationConfig.APPSMITH_RECAPTCHA_SITE_KEY` | `""` |
| `applicationConfig.APPSMITH_RECAPTCHA_SECRET_KEY` | `""` |
| `applicationConfig.APPSMITH_RECAPTCHA_ENABLED` | `""` |
| `applicationConfig.APPSMITH_MONGODB_URI` | `""` |
| `applicationConfig.APPSMITH_REDIS_URL` | `""` |
| `applicationConfig.APPSMITH_ENCRYPTION_PASSWORD` | `""` |
| `applicationConfig.APPSMITH_ENCRYPTION_SALT` | `""` |
| `applicationConfig.APPSMITH_CUSTOM_DOMAIN` | `""` |
For example, to change the encryption salt configuration, you can run the following command:
```
helm install \
--set applicationConfig.APPSMITH_ENCRYPTION_SALT=123 \
stable-appsmith/appsmith --generate-name
```
## Troubleshooting ## Troubleshooting
If at any time you encounter an error during the installation process, reach out to support@appsmith.com or join our Discord Server If at any time you encounter an error during the installation process, reach out to support@appsmith.com or join our Discord Server

Binary file not shown.

View File

@ -0,0 +1,13 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "appsmith.fullname" . }}
namespace: {{ include "appsmith.namespace" . }}
labels:
{{- include "appsmith.labels" . | nindent 4 }}
data:
{{- range $key, $value := .Values.applicationConfig }}
{{- if $value }}
{{ $key }}: {{ $value | quote }}
{{- end }}
{{- end }}

View File

@ -78,6 +78,9 @@ spec:
volumeMounts: volumeMounts:
- name: data - name: data
mountPath: /appsmith-stacks mountPath: /appsmith-stacks
envFrom:
- configMapRef:
name: {{ include "appsmith.fullname" . }}
volumes: volumes:
{{- if not .Values.persistence.enabled }} {{- if not .Values.persistence.enabled }}
- name: data - name: data

View File

@ -1,8 +1,6 @@
{{- if .Values.ingress.enabled }} {{- if and .Values.ingress.enabled .Values.ingress.secrets }}
{{- if .Values.ingress.secrets }}
{{- range .Values.ingress.secrets }} {{- range .Values.ingress.secrets }}
{{- if .certificate }} {{- if and .certificate .key }}
{{- if .key }}
apiVersion: v1 apiVersion: v1
kind: Secret kind: Secret
metadata: metadata:
@ -22,6 +20,7 @@ data:
--- ---
{{- end }} {{- end }}
{{- end }} {{- end }}
{{- end }}
{{- if and .Values.ingress.tls (not .Values.ingress.certManager) }} {{- if and .Values.ingress.tls (not .Values.ingress.certManager) }}
{{- range .Values.ingress.hosts }} {{- range .Values.ingress.hosts }}
{{- $ca := genCA "appsmith-ca" 365 }} {{- $ca := genCA "appsmith-ca" 365 }}
@ -44,7 +43,4 @@ data:
tls.key: {{ $cert.Key | b64enc | quote }} tls.key: {{ $cert.Key | b64enc | quote }}
ca.crt: {{ $ca.Cert | b64enc | quote }} ca.crt: {{ $ca.Cert | b64enc | quote }}
{{- end }} {{- end }}
{{- end }}
{{- end }}
{{- end }}
{{- end }} {{- end }}

View File

@ -271,3 +271,29 @@ autoupdate:
## @param autoupdate.scheduler - Schedule cron job to check & update Helm image ## @param autoupdate.scheduler - Schedule cron job to check & update Helm image
## ##
scheduler: "0 * * * *" scheduler: "0 * * * *"
applicationConfig:
APPSMITH_OAUTH2_GOOGLE_CLIENT_ID: ""
APPSMITH_OAUTH2_GOOGLE_CLIENT_SECRET: ""
APPSMITH_OAUTH2_GITHUB_CLIENT_ID: ""
APPSMITH_OAUTH2_GITHUB_CLIENT_SECRET: ""
APPSMITH_CLIENT_LOG_LEVEL: ""
APPSMITH_GOOGLE_MAPS_API_KEY: ""
APPSMITH_MAIL_ENABLED: ""
APPSMITH_MAIL_HOST: ""
APPSMITH_MAIL_PORT: ""
APPSMITH_MAIL_USERNAME: ""
APPSMITH_MAIL_PASSWORD: ""
APPSMITH_MAIL_FROM: ""
APPSMITH_REPLY_TO: ""
APPSMITH_MAIL_SMTP_AUTH: ""
APPSMITH_MAIL_SMTP_TLS_ENABLED: ""
APPSMITH_DISABLE_TELEMETRY: ""
APPSMITH_RECAPTCHA_SITE_KEY: ""
APPSMITH_RECAPTCHA_SECRET_KEY: ""
APPSMITH_RECAPTCHA_ENABLED: ""
APPSMITH_MONGODB_URI: ""
APPSMITH_REDIS_URL: ""
APPSMITH_ENCRYPTION_PASSWORD: ""
APPSMITH_ENCRYPTION_SALT: ""
APPSMITH_CUSTOM_DOMAIN: ""