From b5d381d2762ab86d5309c6b71cf6fe9d9d97f42f Mon Sep 17 00:00:00 2001 From: Michael Schnerring <3743342+schnerring@users.noreply.github.com> Date: Tue, 12 Jul 2022 17:17:35 +0000 Subject: [PATCH] feat(plausible): Add Plausible Analytics (#3055) * Add Chart.yaml * Add Plausible secret * Add initial {questions,values}.yaml * Insert final newline in common.yaml * Add SECRET_KEY_BASE to env vars * Add database env vars * Move DB secrets to secretEnv * Add Google Search Integration vars * Add Mailer/SMTP Setup settings * Add Postmark mailer options * Fix tpl error * Fix secret syntax error * Fix default values * Move env/secretEnv to ConfigMap/Secret templates * Fix variable refs in env tpl * Fix DATABASE_URL value * Quote all env var values * Add init container * Split initContainer into installContainer/UpgradeContainer * Add ClickHouse dependency [no ci] * Set CLICKHOUSE_DATABASE_URL env var [no ci] * Upgrade chart dependencies * Change service port * Upgrade common chart dependency * Set required value ADMIN_USER_EMAIL * Set readOnlyRootFilesystem: false * Set runAsUser/runAsGroup: 1000 * Add probes * Override container command * Add LOG_LEVEL env var * Use common lib 10.3.1 * Upgrade Chart.yaml dependencies * Upgrade clickhouse dependency * add icon * Upgrade chart dependencies * Upgrade postgres chart dependency * Read .data instead of .stringData * Reset log level to warn * Update charts/incubator/plausible/questions.yaml * Update charts/incubator/plausible/Chart.yaml Co-authored-by: Kjeld Schouten-Lebbing Co-authored-by: Stavros Kois <47820033+stavros-k@users.noreply.github.com> --- charts/incubator/plausible/Chart.yaml | 41 ++ charts/incubator/plausible/icon.png | Bin 0 -> 53149 bytes charts/incubator/plausible/questions.yaml | 416 ++++++++++++++++++ charts/incubator/plausible/templates/_env.tpl | 56 +++ .../incubator/plausible/templates/common.yaml | 8 + charts/incubator/plausible/values.yaml | 113 +++++ 6 files changed, 634 insertions(+) create mode 100644 charts/incubator/plausible/Chart.yaml create mode 100644 charts/incubator/plausible/icon.png create mode 100644 charts/incubator/plausible/questions.yaml create mode 100644 charts/incubator/plausible/templates/_env.tpl create mode 100644 charts/incubator/plausible/templates/common.yaml create mode 100644 charts/incubator/plausible/values.yaml diff --git a/charts/incubator/plausible/Chart.yaml b/charts/incubator/plausible/Chart.yaml new file mode 100644 index 00000000000..58f0bbe1edb --- /dev/null +++ b/charts/incubator/plausible/Chart.yaml @@ -0,0 +1,41 @@ +apiVersion: v2 +appVersion: "1.4.4" +dependencies: + - name: common + repository: https://library-charts.truecharts.org + version: 10.4.4 + - condition: postgresql.enabled + name: postgresql + repository: https://charts.truecharts.org/ + version: 8.0.29 + - condition: clickhouse.enabled + name: clickhouse + repository: https://charts.truecharts.org/ + version: 0.0.4 +deprecated: false +description: Plausible is lightweight and open source web analytics. No cookies and fully compliant with GDPR, CCPA and PECR. +home: https://github.com/truecharts/apps/tree/master/charts/incubator/plausible +icon: https://truecharts.org/img/appicons/plausible.png +keywords: + - analytics + - plausible +kubeVersion: ">=1.16.0-0" +maintainers: + - email: info@truecharts.org + name: TrueCharts + url: https://truecharts.org +name: plausible +sources: + - https://plausible.io/ + - https://plausible.io/docs/self-hosting + - https://github.com/plausible/analytics + - https://github.com/plausible/hosting + - https://hub.docker.com/r/plausible/analytics +type: application +version: 0.0.1 +annotations: + truecharts.org/catagories: | + - analytics + - plausible + truecharts.org/SCALE-support: "true" + truecharts.org/grade: U diff --git a/charts/incubator/plausible/icon.png b/charts/incubator/plausible/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..53c32b1bcf8826ecd8f1f8348693dae50d64f981 GIT binary patch literal 53149 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%0AYui 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 literal 0 HcmV?d00001 diff --git a/charts/incubator/plausible/questions.yaml b/charts/incubator/plausible/questions.yaml new file mode 100644 index 00000000000..a86a1ea8740 --- /dev/null +++ b/charts/incubator/plausible/questions.yaml @@ -0,0 +1,416 @@ +# Include{groups} +portals: + open: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" +questions: + - variable: portal + group: "Container Image" + label: "Configure Portal Button" + schema: + type: dict + hidden: true + attrs: + - variable: enabled + label: "Enable" + description: "enable the portal button" + schema: + hidden: true + editable: false + type: boolean + default: true +# Include{global} + + - variable: controller + group: "Controller" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: advanced + label: "Show Advanced Controller Settings" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: type + description: "Please specify type of workload to deploy" + label: "(Advanced) Controller Type" + schema: + type: string + default: "deployment" + required: true + enum: + - value: "deployment" + description: "Deployment" + - value: "statefulset" + description: "Statefulset" + - value: "daemonset" + description: "Daemonset" + - variable: replicas + description: "Number of desired pod replicas" + label: "Desired Replicas" + schema: + type: int + default: 1 + required: true + - variable: strategy + description: "Please specify type of workload to deploy" + label: "(Advanced) Update Strategy" + schema: + type: string + default: "Recreate" + required: true + enum: + - value: "Recreate" + description: "Recreate: Kill existing pods before creating new ones" + - value: "RollingUpdate" + description: "RollingUpdate: Create new pods and then kill old ones" + - value: "OnDelete" + description: "(Legacy) OnDelete: ignore .spec.template changes" +# Include{controllerExpert} + + - variable: plausible + group: "Container Configuration" + label: "Plausible Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: BASE_URL + label: BASE_URL + description: The hosting URL of the server, used for URL generation. In production systems, this should be your ingress host. + schema: + type: string + default: http://localhost + required: true + - variable: DISABLE_AUTH + label: DISABLE_AUTH + description: Disables authentication completely, no registration, login will be shown. + schema: + type: boolean + default: false + - variable: DISABLE_REGISTRATION + label: DISABLE_REGISTRATION + description: Disables registration of new users, keep your admin credentials handy ;) + schema: + type: boolean + default: false + - variable: ADMIN_USER_NAME + label: ADMIN_USER_NAME + description: Admin user's name (First Install Only) + schema: + type: string + default: admin + required: true + - variable: ADMIN_USER_EMAIL + label: ADMIN_USER_EMAIL + description: The default ("admin") user email (First Install Only) + schema: + type: string + default: admin@example.com + required: true + - variable: ADMIN_USER_PWD + label: ADMIN_USER_PWD + description: The default ("admin") user password (First Install Only) + schema: + type: string + default: "" + required: true + private: true + - variable: CLICKHOUSE_FLUSH_INTERVAL_MS + label: CLICKHOUSE_FLUSH_INTERVAL_MS + description: nterval (in milliseconds) between flushing events and sessions data to Clickhouse. Consult Clickhouse docs before changing it. + schema: + type: int + default: 5000 + required: true + - variable: CLICKHOUSE_MAX_BUFFER_SIZE + label: CLICKHOUSE_MAX_BUFFER_SIZE + description: Maximum size of the buffer of events or sessions. Consult Clickhouse docs before changing it. + schema: + type: int + default: 10000 + required: true + - variable: MAILER_EMAIL + label: MAILER_EMAIL + description: The email id to use for as from address of all communications from Plausible. + schema: + type: string + default: hello@plausible.local + required: true + - variable: SMTP_HOST_ADDR + label: SMTP_HOST_ADDR + description: The host address of your smtp server. + schema: + type: string + default: localhost + required: true + - variable: SMTP_HOST_PORT + label: SMTP_HOST_PORT + description: The port of your smtp server. + schema: + type: int + default: 25 + required: true + - variable: SMTP_USER_NAME + label: SMTP_USER_NAME + description: The username/email in case SMTP auth is enabled. + schema: + type: string + default: "" + - variable: SMTP_USER_PWD + label: SMTP_USER_PWD + description: The password in case SMTP auth is enabled. + schema: + type: string + default: "" + private: true + - variable: SMTP_HOST_SSL_ENABLED + label: SMTP_HOST_SSL_ENABLED + description: If SSL is enabled for SMTP connection + schema: + type: boolean + default: false + - variable: SMTP_RETRIES + label: SMTP_RETRIES + description: Number of retries to make until mailer gives up. + schema: + type: int + default: 2 + required: true + - variable: MAILER_ADAPTER + label: MAILER_ADAPTER + description: Mailer Adapter + schema: + type: string + required: true + default: Bamboo.SMTPAdapter + enum: + - value: Bamboo.SMTPAdapter + description: Bamboo.SMTPAdapter + - value: Bamboo.PostmarkAdapter + description: Bamboo.PostmarkAdapter + - variable: POSTMARK_API_KEY + label: POSTMARK_API_KEY + description: Enter your API key. + schema: + type: string + default: "" + private: true + - variable: GOOGLE_CLIENT_ID + label: GOOGLE_CLIENT_ID + description: The Client ID from the Google API Console for your Plausible Analytics project + schema: + type: string + default: "" + - variable: GOOGLE_CLIENT_SECRET + label: GOOGLE_CLIENT_SECRET + description: The Client Secret from the Google API Console for your Plausible Analytics project + schema: + type: string + default: "" + private: true + - variable: LOG_LEVEL + label: LOG_LEVEL + description: Logging Level + schema: + type: string + required: true + default: warn + enum: + - value: debug + description: debug + - value: info + description: info + - value: warn + description: warn + - value: error + description: error + +# Include{containerConfig} + + - variable: service + group: "Networking and Services" + label: "Configure Service(s)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Service" + description: "The Primary service on which the healthcheck runs, often the webUI" + schema: + additional_attrs: true + type: dict + attrs: +# Include{serviceSelector} + - variable: main + label: "Main Service Port Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: "Port" + description: "This port exposes the container port on the service" + schema: + type: int + default: 10277 + required: true + - variable: advanced + label: "Show Advanced settings" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: protocol + label: "Port Type" + schema: + type: string + default: "HTTP" + enum: + - value: HTTP + description: "HTTP" + - value: "HTTPS" + description: "HTTPS" + - value: TCP + description: "TCP" + - value: "UDP" + description: "UDP" + - variable: nodePort + label: "Node Port (Optional)" + description: "This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer" + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: "Target Port" + description: "The internal(!) port on the container the Application runs on" + schema: + type: int + default: 8000 + + - variable: serviceexpert + group: "Networking and Services" + label: "Show Expert Config" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostNetwork + group: "Networking and Services" + label: "Host-Networking (Complicated)" + schema: + type: boolean + default: false + +# Include{serviceExpert} + +# Include{serviceList} + +# Include{persistenceList} + + - variable: ingress + label: "" + group: "Ingress" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Ingress" + schema: + additional_attrs: true + type: dict + attrs: + +# Include{ingressDefault} + +# Include{ingressTLS} + +# Include{ingressTraefik} + +# Include{ingressExpert} + +# Include{ingressList} + +# Include{security} + + - variable: advancedSecurity + label: "Show Advanced Security Settings" + group: "Security and Permissions" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: securityContext + label: "Security Context" + schema: + additional_attrs: true + type: dict + attrs: + - variable: privileged + label: "Privileged mode" + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: "ReadOnly Root Filesystem" + schema: + type: boolean + default: false + - variable: allowPrivilegeEscalation + label: "Allow Privilege Escalation" + schema: + type: boolean + default: false + - variable: runAsNonRoot + label: "runAsNonRoot" + schema: + type: boolean + default: true +# Include{securityContextAdvanced} + + - variable: podSecurityContext + group: "Security and Permissions" + label: "Pod Security Context" + schema: + additional_attrs: true + type: dict + attrs: + - variable: runAsUser + label: "runAsUser" + description: "The UserID of the user running the application" + schema: + type: int + default: 1000 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID this App of the user running the application" + schema: + type: int + default: 1000 + - variable: fsGroup + label: "fsGroup" + description: "The group that should own ALL storage." + schema: + type: int + default: 568 +# Include{podSecurityContextAdvanced} + +# Include{resources} + +# Include{advanced} + +# Include{addons} diff --git a/charts/incubator/plausible/templates/_env.tpl b/charts/incubator/plausible/templates/_env.tpl new file mode 100644 index 00000000000..a8fe6ae1c44 --- /dev/null +++ b/charts/incubator/plausible/templates/_env.tpl @@ -0,0 +1,56 @@ +{{/* Plausible environment variables */}} +{{- define "plausible.env" -}} +{{- $configName := printf "%s-env-config" (include "tc.common.names.fullname" .) }} +{{- $secretName := printf "%s-env-secret" (include "tc.common.names.fullname" .) }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ $configName }} + labels: + {{- include "tc.common.labels" . | nindent 4 }} +data: + BASE_URL: {{ .Values.plausible.BASE_URL | quote }} + DISABLE_AUTH: {{ .Values.plausible.DISABLE_AUTH | quote }} + DISABLE_REGISTRATION: {{ .Values.plausible.DISABLE_REGISTRATION | quote }} + + CLICKHOUSE_FLUSH_INTERVAL_MS: {{ .Values.plausible.CLICKHOUSE_FLUSH_INTERVAL_MS | quote }} + CLICKHOUSE_MAX_BUFFER_SIZE: {{ .Values.plausible.CLICKHOUSE_MAX_BUFFER_SIZE | quote }} + + SMTP_HOST_ADDR: {{ .Values.plausible.SMTP_HOST_ADDR | quote }} + SMTP_HOST_PORT: {{ .Values.plausible.SMTP_HOST_PORT | quote }} + SMTP_HOST_SSL_ENABLED: {{ .Values.plausible.SMTP_HOST_SSL_ENABLED | quote }} + SMTP_RETRIES: {{ .Values.plausible.SMTP_RETRIES | quote }} + MAILER_ADAPTER: {{ .Values.plausible.MAILER_ADAPTER | quote }} + + LOG_LEVEL: {{ .Values.plausible.LOG_LEVEL | quote }} +--- +apiVersion: v1 +kind: Secret +metadata: + name: {{ $secretName }} + labels: + {{- include "tc.common.labels" . | nindent 4 }} +stringData: + {{- with (lookup "v1" "Secret" .Release.Namespace $secretName) }} + SECRET_KEY_BASE: {{ index .data "SECRET_KEY_BASE" | b64dec }} + {{- else }} + {{- /* The plain value of SECRET_KEY_BASE is also base64 encoded */}} + SECRET_KEY_BASE: {{ randAlphaNum 65 | b64enc }} + {{- end }} + + ADMIN_USER_NAME: {{ .Values.plausible.ADMIN_USER_NAME | quote }} + ADMIN_USER_EMAIL: {{ .Values.plausible.ADMIN_USER_EMAIL | quote }} + ADMIN_USER_PWD: {{ .Values.plausible.ADMIN_USER_PWD | quote }} + + DATABASE_URL: {{ get .Values.postgresql.url "complete-noql" }} + CLICKHOUSE_DATABASE_URL: {{ .Values.clickhouse.url.complete }} + + MAILER_EMAIL: {{ .Values.plausible.MAILER_EMAIL | quote }} + SMTP_USER_NAME: {{ .Values.plausible.SMTP_USER_NAME | quote }} + SMTP_USER_PWD: {{ .Values.plausible.SMTP_USER_PWD | quote }} + POSTMARK_API_KEY: {{ .Values.plausible.POSTMARK_API_KEY | quote }} + + GOOGLE_CLIENT_ID: {{ .Values.plausible.GOOGLE_CLIENT_ID | quote }} + GOOGLE_CLIENT_SECRET: {{ .Values.plausible.GOOGLE_CLIENT_SECRET | quote }} +{{- end }} diff --git a/charts/incubator/plausible/templates/common.yaml b/charts/incubator/plausible/templates/common.yaml new file mode 100644 index 00000000000..21d4eeef645 --- /dev/null +++ b/charts/incubator/plausible/templates/common.yaml @@ -0,0 +1,8 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.common.loader.init" . }} + +{{/* Plausible environment variables */}} +{{- include "plausible.env" . }} + +{{/* Render the templates */}} +{{ include "tc.common.loader.apply" . }} diff --git a/charts/incubator/plausible/values.yaml b/charts/incubator/plausible/values.yaml new file mode 100644 index 00000000000..fbab0af268a --- /dev/null +++ b/charts/incubator/plausible/values.yaml @@ -0,0 +1,113 @@ +image: + repository: plausible/analytics + pullPolicy: IfNotPresent + tag: v1.4.4@sha256:20204bfc253cfab31e1f6c41c321c8a1437bd4a585a3f13393b5e0449b6d8698 + +# Plausible self-hosting documentation +# https://plausible.io/docs/self-hosting + +plausible: + # Server + BASE_URL: http://localhost + DISABLE_AUTH: false + DISABLE_REGISTRATION: false + + # Default User + ADMIN_USER_NAME: admin + ADMIN_USER_EMAIL: admin@example.com + ADMIN_USER_PWD: P@ssw0rd + + # Database + CLICKHOUSE_FLUSH_INTERVAL_MS: 5000 + CLICKHOUSE_MAX_BUFFER_SIZE: 10000 + + # Mailer/SMTP Setup + MAILER_EMAIL: hello@plausible.local + SMTP_HOST_ADDR: localhost + SMTP_HOST_PORT: 25 + SMTP_USER_NAME: "" + SMTP_USER_PWD: "" + SMTP_HOST_SSL_ENABLED: false + SMTP_RETRIES: 2 + MAILER_ADAPTER: Bamboo.SMTPAdapter + POSTMARK_API_KEY: "" + + # Google Search Integration + GOOGLE_CLIENT_ID: "" + GOOGLE_CLIENT_SECRET: "" + + # Logging + LOG_LEVEL: warn + +securityContext: + readOnlyRootFilesystem: false + +podSecurityContext: + runAsUser: 1000 + runAsGroup: 1000 + +envFrom: + - configMapRef: + name: '{{ include "tc.common.names.fullname" . }}-env-config' + - secretRef: + name: '{{ include "tc.common.names.fullname" . }}-env-secret' + +installContainers: + plausible-install: + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + envFrom: + - configMapRef: + name: '{{ include "tc.common.names.fullname" . }}-env-config' + - secretRef: + name: '{{ include "tc.common.names.fullname" . }}-env-secret' + command: [sh] + args: + - -c + - >- + /entrypoint.sh db createdb && + /entrypoint.sh db migrate && + /entrypoint.sh db init-admin + +upgradeContainers: + plausible-upgrade: + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + envFrom: + - configMapRef: + name: '{{ include "tc.common.names.fullname" . }}-env-config' + - secretRef: + name: '{{ include "tc.common.names.fullname" . }}-env-secret' + command: [sh] + args: + - -c + - /entrypoint.sh db migrate + +service: + main: + ports: + main: + targetPort: 8000 + protocol: HTTP + port: 10277 + +probes: + liveness: + type: HTTP + path: /api/health + readiness: + type: HTTP + path: /api/health + startup: + type: HTTP + path: /api/health + +postgresql: + enabled: true + existingSecret: dbcreds + postgresqlUsername: plausible + postgresqlDatabase: plausible + +clickhouse: + enabled: true + existingSecret: clickhousecreds + clickhouseUsername: plausible + clickhouseDatabase: plausible