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 00000000000..53c32b1bcf8 Binary files /dev/null and b/charts/incubator/plausible/icon.png differ 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