commit ebc5ffdbfb29deb8e4b6726f90ba2faed4a40a02 Author: NicolasHorde Date: Mon Mar 24 20:04:19 2025 +0100 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/Chart.yaml b/Chart.yaml new file mode 100644 index 0000000..3a760d4 --- /dev/null +++ b/Chart.yaml @@ -0,0 +1,4 @@ +apiVersion: v2 +name: typebot +version: 0.1.0 +description: Helm Chart for deploying Typebot with Traefik diff --git a/templates/NOTES.txt b/templates/NOTES.txt new file mode 100644 index 0000000..131174a --- /dev/null +++ b/templates/NOTES.txt @@ -0,0 +1,2 @@ +--- +Thank you for installing {{ .Chart.Name }}! diff --git a/templates/_helpers.tpl b/templates/_helpers.tpl new file mode 100644 index 0000000..e69de29 diff --git a/templates/deployment.yaml b/templates/deployment.yaml new file mode 100644 index 0000000..a8534d0 --- /dev/null +++ b/templates/deployment.yaml @@ -0,0 +1,172 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: typebot-builder +spec: + replicas: 1 + selector: + matchLabels: + app: typebot-builder + template: + metadata: + labels: + app: typebot-builder + spec: + containers: + - name: typebot-builder + image: {{ .Values.image.builder.repository }}:{{ .Values.image.builder.tag }} + ports: + - containerPort: 3000 + env: + - name: DATABASE_URL + value: "postgresql://{{ .Values.postgres.user }}:{{ .Values.postgres.password }}@typebot-postgres:5432/{{ .Values.postgres.db }}" + - name: ENCRYPTION_SECRET + value: "{{ .Values.encryption }}" + - name: NEXTAUTH_URL + value: "https://{{ .Values.domain.builder }}" + - name: ADMIN_EMAIL + value: "{{ .Values.email }}" + {{- if .Values.redis.enabled }} + - name: REDIS_URL + value: "redis://{{ .Values.redis.host }}:{{ .Values.redis.port }}" + {{- end }} + {{- if .Values.s3.enabled }} + - name: S3_ACCESS_KEY + value: {{ .Values.s3.accessKey | quote }} + - name: S3_SECRET_KEY + value: {{ .Values.s3.secretKey | quote }} + - name: S3_BUCKET + value: {{ .Values.s3.bucket | quote }} + - name: S3_PORT + value: {{ .Values.s3.port | quote }} + - name: S3_ENDPOINT + value: {{ .Values.s3.endpoint | quote }} + - name: S3_SSL + value: {{ .Values.s3.ssl | quote }} + - name: S3_REGION + value: {{ .Values.s3.region | quote }} + - name: S3_FORCE_PATH_STYLE + value: {{ .Values.s3.forcePathStyle | quote }} + {{- end }} + - name: DISABLE_SIGNUP + value: {{ .Values.extraEnv.disablesignup | quote }} + - name: DEBUG + value: {{ .Values.extraEnv.debug | quote }} + - name: NEXT_PUBLIC_BOT_FILE_UPLOAD_MAX_SIZE + value: {{ .Values.extraEnv.uploadmaxsize | quote }} + - name: CHAT_API_TIMEOUT + value: {{ .Values.extraEnv.chatAPItimeout | quote }} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: typebot-viewer +spec: + replicas: 1 + selector: + matchLabels: + app: typebot-viewer + template: + metadata: + labels: + app: typebot-viewer + spec: + containers: + - name: viewer + image: {{ .Values.image.viewer.repository }}:{{ .Values.image.viewer.tag }} + ports: + - containerPort: 3000 + env: + - name: DATABASE_URL + value: "postgresql://{{ .Values.postgres.user }}:{{ .Values.postgres.password }}@typebot-postgres:5432/{{ .Values.postgres.db }}" + - name: ENCRYPTION_SECRET + value: "{{ .Values.encryption }}" + - name: NEXTAUTH_URL + value: "https://{{ .Values.domain.viewer }}" + - name: ADMIN_EMAIL + value: "{{ .Values.email }}" + {{- if .Values.redis.enabled }} + - name: REDIS_URL + value: "redis://{{ .Values.redis.host }}:{{ .Values.redis.port }}" + {{- end }} + {{- if .Values.s3.enabled }} + - name: S3_ACCESS_KEY + value: {{ .Values.s3.accessKey | quote }} + - name: S3_SECRET_KEY + value: {{ .Values.s3.secretKey | quote }} + - name: S3_BUCKET + value: {{ .Values.s3.bucket | quote }} + - name: S3_PORT + value: {{ .Values.s3.port | quote }} + - name: S3_ENDPOINT + value: {{ .Values.s3.endpoint | quote }} + - name: S3_SSL + value: {{ .Values.s3.ssl | quote }} + - name: S3_REGION + value: {{ .Values.s3.region | quote }} + - name: S3_FORCE_PATH_STYLE + value: {{ .Values.s3.forcePathStyle | quote }} + {{- end }} + - name: DISABLE_SIGNUP + value: {{ .Values.extraEnv.disablesignup | quote }} + - name: DEBUG + value: {{ .Values.extraEnv.debug | quote }} + - name: NEXT_PUBLIC_BOT_FILE_UPLOAD_MAX_SIZE + value: {{ .Values.extraEnv.uploadmaxsize | quote }} + - name: CHAT_API_TIMEOUT + value: {{ .Values.extraEnv.chatAPItimeout | quote }} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: typebot-postgres +spec: + replicas: 1 + selector: + matchLabels: + app: typebot-postgres + template: + metadata: + labels: + app: typebot-postgres + spec: + containers: + - name: postgres + image: {{ .Values.image.postgres.repository }}:{{ .Values.image.postgres.tag }} + ports: + - containerPort: 5432 + env: + - name: POSTGRES_USER + value: {{ .Values.postgres.user | quote }} + - name: POSTGRES_PASSWORD + value: {{ .Values.postgres.password | quote }} + - name: POSTGRES_DB + value: {{ .Values.postgres.db | quote }} + volumeMounts: + - name: postgres-storage + mountPath: /var/lib/postgresql/data + volumes: + - name: postgres-storage + persistentVolumeClaim: + claimName: typebot-postgres-pvc +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: typebot-redis +spec: + replicas: 1 + selector: + matchLabels: + app: typebot-redis + template: + metadata: + labels: + app: typebot-redis + spec: + containers: + - name: redis + image: redis:7 + ports: + - containerPort: 6379 \ No newline at end of file diff --git a/templates/ingress.yaml b/templates/ingress.yaml new file mode 100644 index 0000000..10d575e --- /dev/null +++ b/templates/ingress.yaml @@ -0,0 +1,39 @@ +--- +{{- if .Values.ingress.enabled }} +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: typebot-builder +spec: + ingressClassName: {{ .Values.ingress.className }} + rules: + - host: {{ .Values.domain.builder }} + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: typebot-builder + port: + number: 3000 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: typebot-viewer +spec: + ingressClassName: {{ .Values.ingress.className }} + rules: + - host: {{ .Values.domain.viewer }} + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: typebot-viewer + port: + number: 3000 +{{- end }} diff --git a/templates/pvc.yaml b/templates/pvc.yaml new file mode 100644 index 0000000..ff6ff77 --- /dev/null +++ b/templates/pvc.yaml @@ -0,0 +1,12 @@ +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: typebot-postgres-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: {{ .Values.postgres.persistence.size }} + storageClassName: {{ .Values.postgres.persistence.storageClass }} \ No newline at end of file diff --git a/templates/svc.yaml b/templates/svc.yaml new file mode 100644 index 0000000..c566099 --- /dev/null +++ b/templates/svc.yaml @@ -0,0 +1,52 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: typebot-builder +spec: + selector: + app: typebot-builder + ports: + - port: 3000 + targetPort: 3000 + protocol: TCP + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + name: typebot-viewer +spec: + selector: + app: typebot-viewer + ports: + - port: 3000 + targetPort: 3000 + protocol: TCP + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + name: typebot-postgres +spec: + selector: + app: typebot-postgres + ports: + - port: 5432 + targetPort: 5432 + protocol: TCP + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + name: typebot-redis +spec: + selector: + app: typebot-redis + ports: + - port: 6379 + targetPort: 6379 + protocol: TCP + type: ClusterIP \ No newline at end of file diff --git a/values.yaml b/values.yaml new file mode 100644 index 0000000..b74dbc0 --- /dev/null +++ b/values.yaml @@ -0,0 +1,54 @@ +domain: + viewer: typebot.example.com + builder: typebot_builder.example.com +email: admin@example.com +encryption: changeme + +postgres: + user: typebot + password: changeme + db: typebot + persistence: + enabled: true + size: 1Gi + storageClass: standard + +image: + builder: + repository: ghcr.io/baptistearno/typebot-builder + tag: latest + viewer: + repository: ghcr.io/baptistearno/typebot-viewer + tag: latest + postgres: + repository: postgres + tag: 15 + +studio: + enabled: true + +s3: + enabled: true + accessKey: minio + secretKey: minio123 + bucket: typebot + port: 9000 + endpoint: localhost + ssl: false + region: us-east-1 + forcePathStyle: true + +redis: + enabled: true + host: typebot-redis + port: 6379 + +extraEnv: + disablesignup: "false" + debug: "false" + uploadmaxsize: "10000000" + chatAPItimeout: "30000" + +ingress: + enabled: true + className: traefik