diff --git a/packages/twenty-docker/k8s/manifests/deployment-db.yaml b/packages/twenty-docker/k8s/manifests/deployment-db.yaml
index 8d9dec9df..2e317376d 100644
--- a/packages/twenty-docker/k8s/manifests/deployment-db.yaml
+++ b/packages/twenty-docker/k8s/manifests/deployment-db.yaml
@@ -37,8 +37,8 @@ spec:
ports:
- containerPort: 5432
name: tcp
- protocol: TCP
- resources:
+ protocol: TCP
+ resources:
requests:
memory: "256Mi"
cpu: "250m"
diff --git a/packages/twenty-docker/k8s/manifests/deployment-server.yaml b/packages/twenty-docker/k8s/manifests/deployment-server.yaml
index cf740722f..b4596e9fc 100644
--- a/packages/twenty-docker/k8s/manifests/deployment-server.yaml
+++ b/packages/twenty-docker/k8s/manifests/deployment-server.yaml
@@ -31,6 +31,8 @@ spec:
value: 3000
- name: SERVER_URL
value: "https://crm.example.com:443"
+ - name: FRONT_BASE_URL
+ value: "https://crm.example.com:443"
- name: PG_DATABASE_URL
value: "postgres://twenty:twenty@twenty-db.twentycrm.svc.cluster.local/default"
- name: ENABLE_DB_MIGRATIONS
@@ -39,6 +41,8 @@ spec:
value: "true"
- name: STORAGE_TYPE
value: "local"
+ - name: "MESSAGE_QUEUE_TYPE"
+ value: "pg-boss"
- name: ACCESS_TOKEN_SECRET
valueFrom:
secretKeyRef:
@@ -65,8 +69,8 @@ spec:
ports:
- containerPort: 3000
name: http-tcp
- protocol: TCP
- resources:
+ protocol: TCP
+ resources:
requests:
memory: "256Mi"
cpu: "250m"
@@ -76,6 +80,8 @@ spec:
stdin: true
tty: true
volumeMounts:
+ - mountPath: /app/docker-data
+ name: twentycrm-server-data
- mountPath: /app/.local-storage
name: twentycrm-server-data
dnsPolicy: ClusterFirst
diff --git a/packages/twenty-docker/k8s/manifests/deployment-worker.yaml b/packages/twenty-docker/k8s/manifests/deployment-worker.yaml
new file mode 100644
index 000000000..b3834c46e
--- /dev/null
+++ b/packages/twenty-docker/k8s/manifests/deployment-worker.yaml
@@ -0,0 +1,78 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ labels:
+ app: twentycrm-worker
+ name: twentycrm-worker
+ namespace: twentycrm
+spec:
+ progressDeadlineSeconds: 600
+ replicas: 1
+ strategy:
+ rollingUpdate:
+ maxSurge: 1
+ maxUnavailable: 1
+ type: RollingUpdate
+ selector:
+ matchLabels:
+ app: twentycrm-worker
+ template:
+ metadata:
+ labels:
+ app: twentycrm-worker
+ spec:
+ volumes:
+ - name: twentycrm-worker-data
+ persistentVolumeClaim:
+ claimName: twentycrm-worker-pvc
+ containers:
+ - env:
+ - name: SERVER_URL
+ value: "https://crm.example.com:443"
+ - name: FRONT_BASE_URL
+ value: "https://crm.example.com:443"
+ - name: PG_DATABASE_URL
+ value: "postgres://twenty:twenty@twenty-db.twentycrm.svc.cluster.local/default"
+ - name: ENABLE_DB_MIGRATIONS
+ value: "false" # it already runs on the server
+ - name: STORAGE_TYPE
+ value: "local"
+ - name: "MESSAGE_QUEUE_TYPE"
+ value: "pg-boss"
+ - name: ACCESS_TOKEN_SECRET
+ valueFrom:
+ secretKeyRef:
+ name: tokens
+ key: accessToken
+ - name: LOGIN_TOKEN_SECRET
+ valueFrom:
+ secretKeyRef:
+ name: tokens
+ key: loginToken
+ - name: REFRESH_TOKEN_SECRET
+ valueFrom:
+ secretKeyRef:
+ name: tokens
+ key: refreshToken
+ - name: FILE_TOKEN_SECRET
+ valueFrom:
+ secretKeyRef:
+ name: tokens
+ key: fileToken
+ - image: twentycrm/twenty:latest
+ imagePullPolicy: Always
+ name: twentycrm
+ command:
+ - yarn
+ - worker:prod
+ resources:
+ requests:
+ memory: "256Mi"
+ cpu: "250m"
+ limits:
+ memory: "1024Mi"
+ cpu: "1000m"
+ stdin: true
+ tty: true
+ dnsPolicy: ClusterFirst
+ restartPolicy: Always
diff --git a/packages/twenty-docker/k8s/manifests/ingress.yaml b/packages/twenty-docker/k8s/manifests/ingress.yaml
index 19663f7a4..b334aac21 100644
--- a/packages/twenty-docker/k8s/manifests/ingress.yaml
+++ b/packages/twenty-docker/k8s/manifests/ingress.yaml
@@ -20,5 +20,5 @@ spec:
backend:
service:
name: twentycrm-server
- port:
+ port:
name: http-tcp
diff --git a/packages/twenty-docker/k8s/terraform/.terraform-docs.yml b/packages/twenty-docker/k8s/terraform/.terraform-docs.yml
new file mode 100644
index 000000000..00778168f
--- /dev/null
+++ b/packages/twenty-docker/k8s/terraform/.terraform-docs.yml
@@ -0,0 +1,48 @@
+formatter: "markdown table" # this is required
+
+version: ""
+
+header-from: main.tf
+
+recursive:
+ enabled: false
+ path: modules
+
+output:
+ file: "README.md"
+ mode: inject
+ template: |-
+
+ # TwentyCRM Terraform Docs
+
+ This file was generated by [terraform-docs](https://terraform-docs.io/), for more information on how to install, configure and use visit their website.
+
+ To update this `README.md` after changes to the Terraform code in this folder, run: `terraform-docs .`
+
+ To make configuration changes to how this doc is generated, see `./.terraform-docs.yml`
+
+ {{ .Content }}
+
+
+output-values:
+ enabled: false
+ from: "outputs.tf"
+
+sort:
+ enabled: true
+ by: required
+
+settings:
+ anchor: true
+ color: true
+ default: true
+ description: true
+ escape: true
+ hide-empty: true
+ html: true
+ indent: 2
+ lockfile: true
+ read-comments: true
+ required: true
+ sensitive: true
+ type: true
\ No newline at end of file
diff --git a/packages/twenty-docker/k8s/terraform/README.md b/packages/twenty-docker/k8s/terraform/README.md
new file mode 100644
index 000000000..10a7ab557
--- /dev/null
+++ b/packages/twenty-docker/k8s/terraform/README.md
@@ -0,0 +1,64 @@
+
+# TwentyCRM Terraform Docs
+
+This file was generated by [terraform-docs](https://terraform-docs.io/), for more information on how to install, configure and use visit their website.
+
+To update this `README.md` after changes to the Terraform code in this folder, run: `terraform-docs .`
+
+To make configuration changes to how this doc is generated, see `./.terraform-docs.yml`
+
+## Requirements
+
+| Name | Version |
+|------|---------|
+| [terraform](#requirement\_terraform) | >= 1.9.2 |
+| [kubernetes](#requirement\_kubernetes) | >= 2.31.0 |
+
+## Providers
+
+| Name | Version |
+|------|---------|
+| [kubernetes](#provider\_kubernetes) | >= 2.31.0 |
+
+## Resources
+
+| Name | Type |
+|------|------|
+| [kubernetes_deployment.twentycrm_db](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/deployment) | resource |
+| [kubernetes_deployment.twentycrm_server](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/deployment) | resource |
+| [kubernetes_deployment.twentycrm_worker](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/deployment) | resource |
+| [kubernetes_ingress.twentycrm](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/ingress) | resource |
+| [kubernetes_namespace.twentycrm](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/namespace) | resource |
+| [kubernetes_persistent_volume.db](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/persistent_volume) | resource |
+| [kubernetes_persistent_volume.server](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/persistent_volume) | resource |
+| [kubernetes_persistent_volume_claim.db](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/persistent_volume_claim) | resource |
+| [kubernetes_persistent_volume_claim.server](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/persistent_volume_claim) | resource |
+| [kubernetes_secret.twentycrm_tokens](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/secret) | resource |
+| [kubernetes_service.twentycrm_db](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/service) | resource |
+| [kubernetes_service.twentycrm_server](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/service) | resource |
+
+## Inputs
+
+| Name | Description | Type | Default | Required |
+|------|-------------|------|---------|:--------:|
+| [twentycrm\_app\_hostname](#input\_twentycrm\_app\_hostname) | The protocol, DNS fully qualified hostname, and port used to access TwentyCRM in your environment. Ex: https://crm.example.com:443 | `string` | n/a | yes |
+| [twentycrm\_pgdb\_admin\_password](#input\_twentycrm\_pgdb\_admin\_password) | TwentyCRM password for postgres database. | `string` | n/a | yes |
+| [twentycrm\_token\_accessToken](#input\_twentycrm\_token\_accessToken) | TwentyCRM access Token | `string` | n/a | yes |
+| [twentycrm\_token\_fileToken](#input\_twentycrm\_token\_fileToken) | TwentyCRM file Token | `string` | n/a | yes |
+| [twentycrm\_token\_loginToken](#input\_twentycrm\_token\_loginToken) | TwentyCRM login Token | `string` | n/a | yes |
+| [twentycrm\_token\_refreshToken](#input\_twentycrm\_token\_refreshToken) | TwentyCRM refresh Token | `string` | n/a | yes |
+| [twentycrm\_app\_name](#input\_twentycrm\_app\_name) | A friendly name prefix to use for every component deployed. | `string` | `"twentycrm"` | no |
+| [twentycrm\_db\_image](#input\_twentycrm\_db\_image) | TwentyCRM image for database deployment. This defaults to latest. | `string` | `"twentycrm/twenty-postgres:latest"` | no |
+| [twentycrm\_db\_pv\_capacity](#input\_twentycrm\_db\_pv\_capacity) | Storage capacity provisioned for database persistent volume. | `string` | `"10Gi"` | no |
+| [twentycrm\_db\_pv\_path](#input\_twentycrm\_db\_pv\_path) | Local path to use to store the physical volume if using local storage on nodes. | `string` | `""` | no |
+| [twentycrm\_db\_pvc\_requests](#input\_twentycrm\_db\_pvc\_requests) | Storage capacity reservation for database persistent volume claim. | `string` | `"10Gi"` | no |
+| [twentycrm\_db\_replicas](#input\_twentycrm\_db\_replicas) | Number of replicas for the TwentyCRM database deployment. This defaults to 1. | `number` | `1` | no |
+| [twentycrm\_namespace](#input\_twentycrm\_namespace) | Namespace for all TwentyCRM resources | `string` | `"twentycrm"` | no |
+| [twentycrm\_server\_data\_mount\_path](#input\_twentycrm\_server\_data\_mount\_path) | TwentyCRM mount path for servers application data. Defaults to '/app/docker-data'. | `string` | `"/app/docker-data"` | no |
+| [twentycrm\_server\_image](#input\_twentycrm\_server\_image) | TwentyCRM server image for the server deployment. This defaults to latest. This value is also used for the workers image. | `string` | `"twentycrm/twenty:latest"` | no |
+| [twentycrm\_server\_pv\_capacity](#input\_twentycrm\_server\_pv\_capacity) | Storage capacity provisioned for server persistent volume. | `string` | `"10Gi"` | no |
+| [twentycrm\_server\_pv\_path](#input\_twentycrm\_server\_pv\_path) | Local path to use to store the physical volume if using local storage on nodes. | `string` | `""` | no |
+| [twentycrm\_server\_pvc\_requests](#input\_twentycrm\_server\_pvc\_requests) | Storage capacity reservation for server persistent volume claim. | `string` | `"10Gi"` | no |
+| [twentycrm\_server\_replicas](#input\_twentycrm\_server\_replicas) | Number of replicas for the TwentyCRM server deployment. This defaults to 1. | `number` | `1` | no |
+| [twentycrm\_worker\_replicas](#input\_twentycrm\_worker\_replicas) | Number of replicas for the TwentyCRM worker deployment. This defaults to 1. | `number` | `1` | no |
+
\ No newline at end of file
diff --git a/packages/twenty-docker/k8s/terraform/deployment-db.tf b/packages/twenty-docker/k8s/terraform/deployment-db.tf
index c2a5a64b1..62c61a298 100644
--- a/packages/twenty-docker/k8s/terraform/deployment-db.tf
+++ b/packages/twenty-docker/k8s/terraform/deployment-db.tf
@@ -1,17 +1,17 @@
resource "kubernetes_deployment" "twentycrm_db" {
metadata {
- name = "${local.twentycrm_app_name}-db"
+ name = "${var.twentycrm_app_name}-db"
namespace = kubernetes_namespace.twentycrm.metadata.0.name
labels = {
- app = "${local.twentycrm_app_name}-db"
+ app = "${var.twentycrm_app_name}-db"
}
}
spec {
- replicas = 1
+ replicas = var.twentycrm_db_replicas
selector {
match_labels = {
- app = "${local.twentycrm_app_name}-db"
+ app = "${var.twentycrm_app_name}-db"
}
}
@@ -26,17 +26,14 @@ resource "kubernetes_deployment" "twentycrm_db" {
template {
metadata {
labels = {
- app = "${local.twentycrm_app_name}-db"
+ app = "${var.twentycrm_app_name}-db"
}
}
spec {
- # security_context {
- # fs_group = 0
- # }
container {
- image = local.twentycrm_db_image
- name = local.twentycrm_app_name
+ image = var.twentycrm_db_image
+ name = var.twentycrm_app_name
stdin = true
tty = true
security_context {
@@ -45,7 +42,7 @@ resource "kubernetes_deployment" "twentycrm_db" {
env {
name = "POSTGRES_PASSWORD"
- value = "twenty"
+ value = var.twentycrm_pgdb_admin_password
}
env {
name = "BITNAMI_DEBUG"
@@ -69,16 +66,16 @@ resource "kubernetes_deployment" "twentycrm_db" {
}
volume_mount {
- name = "nfs-twentycrm-db-data"
+ name = "db-data"
mount_path = "/bitnami/postgresql"
}
}
volume {
- name = "nfs-twentycrm-db-data"
+ name = "db-data"
persistent_volume_claim {
- claim_name = "nfs-twentycrm-db-data-pvc"
+ claim_name = kubernetes_persistent_volume_claim.db.metadata.0.name
}
}
diff --git a/packages/twenty-docker/k8s/terraform/deployment-server.tf b/packages/twenty-docker/k8s/terraform/deployment-server.tf
index 13a4d30bf..a3c1f9ac1 100644
--- a/packages/twenty-docker/k8s/terraform/deployment-server.tf
+++ b/packages/twenty-docker/k8s/terraform/deployment-server.tf
@@ -1,17 +1,17 @@
resource "kubernetes_deployment" "twentycrm_server" {
metadata {
- name = "${local.twentycrm_app_name}-server"
+ name = "${var.twentycrm_app_name}-server"
namespace = kubernetes_namespace.twentycrm.metadata.0.name
labels = {
- app = "${local.twentycrm_app_name}-server"
+ app = "${var.twentycrm_app_name}-server"
}
}
spec {
- replicas = 1
+ replicas = var.twentycrm_server_replicas
selector {
match_labels = {
- app = "${local.twentycrm_app_name}-server"
+ app = "${var.twentycrm_app_name}-server"
}
}
@@ -26,14 +26,14 @@ resource "kubernetes_deployment" "twentycrm_server" {
template {
metadata {
labels = {
- app = "${local.twentycrm_app_name}-server"
+ app = "${var.twentycrm_app_name}-server"
}
}
spec {
container {
- image = local.twentycrm_server_image
- name = local.twentycrm_app_name
+ image = var.twentycrm_server_image
+ name = var.twentycrm_app_name
stdin = true
tty = true
@@ -54,22 +54,17 @@ resource "kubernetes_deployment" "twentycrm_server" {
env {
name = "SERVER_URL"
- value = "https://crm.example.com:443"
+ value = var.twentycrm_app_hostname
}
env {
name = "FRONT_BASE_URL"
- value = "https://crm.example.com:443"
- }
-
- env {
- name = "BACKEND_SERVER_URL"
- value = "https://crm.example.com:443"
+ value = var.twentycrm_app_hostname
}
env {
name = "PG_DATABASE_URL"
- value = "postgres://twenty:twenty@twentycrm-db.twentycrm.svc.cluster.local/default"
+ value = "postgres://twenty:${var.twentycrm_pgdb_admin_password}@${var.twentycrm_app_name}-db.${kubernetes_namespace.twentycrm.metadata.0.name}.svc.cluster.local/default"
}
env {
@@ -86,7 +81,10 @@ resource "kubernetes_deployment" "twentycrm_server" {
name = "STORAGE_TYPE"
value = "local"
}
-
+ env {
+ name = "MESSAGE_QUEUE_TYPE"
+ value = "pg-boss"
+ }
env {
name = "ACCESS_TOKEN_SECRET"
value_from {
@@ -144,16 +142,16 @@ resource "kubernetes_deployment" "twentycrm_server" {
}
volume_mount {
- name = "nfs-twentycrm-server-data"
- mount_path = "/app/.local-storage"
+ name = "server-data"
+ mount_path = var.twentycrm_server_data_mount_path
}
}
volume {
- name = "nfs-twentycrm-server-data"
+ name = "server-data"
persistent_volume_claim {
- claim_name = "nfs-twentycrm-server-data-pvc"
+ claim_name = kubernetes_persistent_volume_claim.server.metadata.0.name
}
}
diff --git a/packages/twenty-docker/k8s/terraform/deployment-worker.tf b/packages/twenty-docker/k8s/terraform/deployment-worker.tf
new file mode 100644
index 000000000..9a005839d
--- /dev/null
+++ b/packages/twenty-docker/k8s/terraform/deployment-worker.tf
@@ -0,0 +1,131 @@
+resource "kubernetes_deployment" "twentycrm_worker" {
+ metadata {
+ name = "${var.twentycrm_app_name}-worker"
+ namespace = kubernetes_namespace.twentycrm.metadata.0.name
+ labels = {
+ app = "${var.twentycrm_app_name}-worker"
+ }
+ }
+
+ spec {
+ replicas = var.twentycrm_worker_replicas
+ selector {
+ match_labels = {
+ app = "${var.twentycrm_app_name}-worker"
+ }
+ }
+
+ strategy {
+ type = "RollingUpdate"
+ rolling_update {
+ max_surge = "1"
+ max_unavailable = "1"
+ }
+ }
+
+ template {
+ metadata {
+ labels = {
+ app = "${var.twentycrm_app_name}-worker"
+ }
+ }
+
+ spec {
+ container {
+ image = var.twentycrm_server_image
+ name = var.twentycrm_app_name
+ stdin = true
+ tty = true
+ command = ["yarn", "worker:prod"]
+
+ env {
+ name = "SERVER_URL"
+ value = var.twentycrm_app_hostname
+ }
+
+ env {
+ name = "FRONT_BASE_URL"
+ value = var.twentycrm_app_hostname
+ }
+
+ env {
+ name = "PG_DATABASE_URL"
+ value = "postgres://twenty:${var.twentycrm_pgdb_admin_password}@${var.twentycrm_app_name}-db.${kubernetes_namespace.twentycrm.metadata.0.name}.svc.cluster.local/default"
+ }
+
+ env {
+ name = "ENABLE_DB_MIGRATIONS"
+ value = "false" #it already runs on the server
+ }
+
+ env {
+ name = "STORAGE_TYPE"
+ value = "local"
+ }
+ env {
+ name = "MESSAGE_QUEUE_TYPE"
+ value = "pg-boss"
+ }
+
+ env {
+ name = "ACCESS_TOKEN_SECRET"
+ value_from {
+ secret_key_ref {
+ name = "tokens"
+ key = "accessToken"
+ }
+ }
+ }
+
+ env {
+ name = "LOGIN_TOKEN_SECRET"
+ value_from {
+ secret_key_ref {
+ name = "tokens"
+ key = "loginToken"
+ }
+ }
+ }
+
+ env {
+ name = "REFRESH_TOKEN_SECRET"
+ value_from {
+ secret_key_ref {
+ name = "tokens"
+ key = "refreshToken"
+ }
+ }
+ }
+
+ env {
+ name = "FILE_TOKEN_SECRET"
+ value_from {
+ secret_key_ref {
+ name = "tokens"
+ key = "fileToken"
+ }
+ }
+ }
+
+ resources {
+ requests = {
+ cpu = "250m"
+ memory = "256Mi"
+ }
+ limits = {
+ cpu = "1000m"
+ memory = "1024Mi"
+ }
+ }
+ }
+
+ dns_policy = "ClusterFirst"
+ restart_policy = "Always"
+ }
+ }
+ }
+ depends_on = [
+ kubernetes_deployment.twentycrm_db,
+ kubernetes_secret.twentycrm_tokens
+ ]
+}
diff --git a/packages/twenty-docker/k8s/terraform/ingress.tf b/packages/twenty-docker/k8s/terraform/ingress.tf
index 4276333b7..f8a28779c 100644
--- a/packages/twenty-docker/k8s/terraform/ingress.tf
+++ b/packages/twenty-docker/k8s/terraform/ingress.tf
@@ -1,7 +1,7 @@
resource "kubernetes_ingress" "twentycrm" {
wait_for_load_balancer = true
metadata {
- name = "${local.twentycrm_app_name}-ingress"
+ name = "${var.twentycrm_app_name}-ingress"
namespace = kubernetes_namespace.twentycrm.metadata.0.name
annotations = {
"kubernetes.io/ingress.class" = "nginx"
@@ -15,7 +15,7 @@ resource "kubernetes_ingress" "twentycrm" {
spec {
ingress_class_name = "nginx"
rule {
- host = local.twentycrm_app_hostname
+ host = var.twentycrm_app_hostname
http {
path {
path = "/*"
diff --git a/packages/twenty-docker/k8s/terraform/main.tf b/packages/twenty-docker/k8s/terraform/main.tf
index cf40c0809..66ae6e18e 100644
--- a/packages/twenty-docker/k8s/terraform/main.tf
+++ b/packages/twenty-docker/k8s/terraform/main.tf
@@ -5,32 +5,15 @@ provider "kubernetes" {
config_path = "~/.kube/config"
}
-#################
-# Global Locals #
-#################
-locals {
- twentycrm_app_name = "twentycrm"
- twentycrm_app_hostname = "crm.example.com"
- twentycrm_server_image = "twentycrm/twenty:v0.10.4"
- twentycrm_db_image = "twentycrm/twenty-postgres:v0.10.4"
- twentycrm_db_pv_path = "/path/to/mystorage"
- twentycrm_db_pv_capacity = "10Gi"
- twentycrm_db_pvc_requests = "10Gi"
- twentycrm_server_pv_path = "/path/to/mystorage"
- twentycrm_server_pv_capacity = "10Gi"
- twentycrm_server_pvc_requests = "10Gi"
-}
-
####################
# Terraform Config #
####################
terraform {
- required_version = ">= 1.7.4"
+ required_version = ">= 1.9.2"
required_providers {
kubernetes = {
source = "hashicorp/kubernetes"
- version = ">= 2.23.0"
+ version = ">= 2.31.0"
}
}
-
}
diff --git a/packages/twenty-docker/k8s/terraform/namespace.tf b/packages/twenty-docker/k8s/terraform/namespace.tf
index b7c0119b1..01d363993 100644
--- a/packages/twenty-docker/k8s/terraform/namespace.tf
+++ b/packages/twenty-docker/k8s/terraform/namespace.tf
@@ -1,9 +1,9 @@
resource "kubernetes_namespace" "twentycrm" {
metadata {
annotations = {
- name = "twentycrm"
+ name = var.twentycrm_namespace
}
- name = "twentycrm"
+ name = var.twentycrm_namespace
}
}
diff --git a/packages/twenty-docker/k8s/terraform/pv-db.tf b/packages/twenty-docker/k8s/terraform/pv-db.tf
index cc11d09b7..b6c3d1ac5 100644
--- a/packages/twenty-docker/k8s/terraform/pv-db.tf
+++ b/packages/twenty-docker/k8s/terraform/pv-db.tf
@@ -1,18 +1,18 @@
resource "kubernetes_persistent_volume" "db" {
metadata {
- name = "${local.twentycrm_app_name}-db-pv"
+ name = "${var.twentycrm_app_name}-db-pv"
}
spec {
storage_class_name = "default"
capacity = {
- storage = local.twentycrm_db_pv_capacity
+ storage = var.twentycrm_db_pv_capacity
}
access_modes = ["ReadWriteOnce"]
- # refer to Terraform Docs for your specific implementation requirements
+ # refer to Terraform Docs for your specific implementation requirements
# https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/persistent_volume
persistent_volume_source {
local {
- path = local.twentycrm_db_pv_path
+ path = var.twentycrm_db_pv_path
}
}
}
diff --git a/packages/twenty-docker/k8s/terraform/pv-server.tf b/packages/twenty-docker/k8s/terraform/pv-server.tf
index a0fda67a2..6e4a38ba8 100644
--- a/packages/twenty-docker/k8s/terraform/pv-server.tf
+++ b/packages/twenty-docker/k8s/terraform/pv-server.tf
@@ -1,18 +1,18 @@
resource "kubernetes_persistent_volume" "server" {
metadata {
- name = "${local.twentycrm_app_name}-server-pv"
+ name = "${var.twentycrm_app_name}-server-pv"
}
spec {
storage_class_name = "default"
capacity = {
- storage = local.twentycrm_server_pv_capacity
+ storage = var.twentycrm_server_pv_capacity
}
access_modes = ["ReadWriteOnce"]
- # refer to Terraform Docs for your specific implementation requirements
+ # refer to Terraform Docs for your specific implementation requirements
# https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/persistent_volume
persistent_volume_source {
local {
- path = local.twentycrm_server_pv_path
+ path = var.twentycrm_server_pv_path
}
}
}
diff --git a/packages/twenty-docker/k8s/terraform/pvc-db.tf b/packages/twenty-docker/k8s/terraform/pvc-db.tf
index 3bae188e9..875039451 100644
--- a/packages/twenty-docker/k8s/terraform/pvc-db.tf
+++ b/packages/twenty-docker/k8s/terraform/pvc-db.tf
@@ -1,13 +1,13 @@
resource "kubernetes_persistent_volume_claim" "db" {
metadata {
- name = "${local.twentycrm_app_name}-db-pvc"
+ name = "${var.twentycrm_app_name}-db-pvc"
namespace = kubernetes_namespace.twentycrm.metadata.0.name
}
spec {
access_modes = ["ReadWriteOnce"]
resources {
requests = {
- storage = local.twentycrm_db_pvc_requests
+ storage = var.twentycrm_db_pvc_requests
}
}
volume_name = kubernetes_persistent_volume.db.metadata.0.name
diff --git a/packages/twenty-docker/k8s/terraform/pvc-server.tf b/packages/twenty-docker/k8s/terraform/pvc-server.tf
index ccb594a94..08410732a 100644
--- a/packages/twenty-docker/k8s/terraform/pvc-server.tf
+++ b/packages/twenty-docker/k8s/terraform/pvc-server.tf
@@ -1,13 +1,13 @@
resource "kubernetes_persistent_volume_claim" "server" {
metadata {
- name = "${local.twentycrm_app_name}-server-pvc"
+ name = "${var.twentycrm_app_name}-server-pvc"
namespace = kubernetes_namespace.twentycrm.metadata.0.name
}
spec {
access_modes = ["ReadWriteOnce"]
resources {
requests = {
- storage = local.twentycrm_server_pvc_requests
+ storage = var.twentycrm_server_pvc_requests
}
}
volume_name = kubernetes_persistent_volume.server.metadata.0.name
diff --git a/packages/twenty-docker/k8s/terraform/service-db.tf b/packages/twenty-docker/k8s/terraform/service-db.tf
index f3e3b0278..4e8a76cf4 100644
--- a/packages/twenty-docker/k8s/terraform/service-db.tf
+++ b/packages/twenty-docker/k8s/terraform/service-db.tf
@@ -1,11 +1,11 @@
resource "kubernetes_service" "twentycrm_db" {
metadata {
- name = "${local.twentycrm_app_name}-db"
+ name = "${var.twentycrm_app_name}-db"
namespace = kubernetes_namespace.twentycrm.metadata.0.name
}
spec {
selector = {
- app = "${local.twentycrm_app_name}-db"
+ app = "${var.twentycrm_app_name}-db"
}
session_affinity = "ClientIP"
port {
diff --git a/packages/twenty-docker/k8s/terraform/service-server.tf b/packages/twenty-docker/k8s/terraform/service-server.tf
index d617d2b4b..c77bdef95 100644
--- a/packages/twenty-docker/k8s/terraform/service-server.tf
+++ b/packages/twenty-docker/k8s/terraform/service-server.tf
@@ -1,11 +1,11 @@
resource "kubernetes_service" "twentycrm_server" {
metadata {
- name = "${local.twentycrm_app_name}-server"
+ name = "${var.twentycrm_app_name}-server"
namespace = kubernetes_namespace.twentycrm.metadata.0.name
}
spec {
selector = {
- app = "${local.twentycrm_app_name}-server"
+ app = "${var.twentycrm_app_name}-server"
}
session_affinity = "ClientIP"
port {
diff --git a/packages/twenty-docker/k8s/terraform/variables.tf b/packages/twenty-docker/k8s/terraform/variables.tf
index a99cdc579..53255aaf1 100644
--- a/packages/twenty-docker/k8s/terraform/variables.tf
+++ b/packages/twenty-docker/k8s/terraform/variables.tf
@@ -1,24 +1,124 @@
+######################
+# Required Variables #
+######################
variable "twentycrm_token_accessToken" {
type = string
description = "TwentyCRM access Token"
+ sensitive = true
}
variable "twentycrm_token_loginToken" {
type = string
description = "TwentyCRM login Token"
+ sensitive = true
}
variable "twentycrm_token_refreshToken" {
type = string
description = "TwentyCRM refresh Token"
+ sensitive = true
}
variable "twentycrm_token_fileToken" {
type = string
description = "TwentyCRM file Token"
+ sensitive = true
}
variable "twentycrm_pgdb_admin_password" {
type = string
- description = "TwentyCRM password for postgres database"
+ description = "TwentyCRM password for postgres database."
+ sensitive = true
+}
+
+variable "twentycrm_app_hostname" {
+ type = string
+ description = "The protocol, DNS fully qualified hostname, and port used to access TwentyCRM in your environment. Ex: https://crm.example.com:443"
+}
+
+######################
+# Optional Variables #
+######################
+variable "twentycrm_app_name" {
+ type = string
+ default = "twentycrm"
+ description = "A friendly name prefix to use for every component deployed."
+}
+
+variable "twentycrm_server_image" {
+ type = string
+ default = "twentycrm/twenty:latest"
+ description = "TwentyCRM server image for the server deployment. This defaults to latest. This value is also used for the workers image."
+}
+
+variable "twentycrm_db_image" {
+ type = string
+ default = "twentycrm/twenty-postgres:latest"
+ description = "TwentyCRM image for database deployment. This defaults to latest."
+}
+
+variable "twentycrm_server_replicas" {
+ type = number
+ default = 1
+ description = "Number of replicas for the TwentyCRM server deployment. This defaults to 1."
+}
+
+variable "twentycrm_worker_replicas" {
+ type = number
+ default = 1
+ description = "Number of replicas for the TwentyCRM worker deployment. This defaults to 1."
+}
+
+variable "twentycrm_db_replicas" {
+ type = number
+ default = 1
+ description = "Number of replicas for the TwentyCRM database deployment. This defaults to 1."
+}
+
+variable "twentycrm_server_data_mount_path" {
+ type = string
+ default = "/app/docker-data"
+ description = "TwentyCRM mount path for servers application data. Defaults to '/app/docker-data'."
+}
+
+variable "twentycrm_db_pv_path" {
+ type = string
+ default = ""
+ description = "Local path to use to store the physical volume if using local storage on nodes."
+}
+
+variable "twentycrm_server_pv_path" {
+ type = string
+ default = ""
+ description = "Local path to use to store the physical volume if using local storage on nodes."
+}
+
+variable "twentycrm_db_pv_capacity" {
+ type = string
+ default = "10Gi"
+ description = "Storage capacity provisioned for database persistent volume."
+}
+
+variable "twentycrm_db_pvc_requests" {
+ type = string
+ default = "10Gi"
+ description = "Storage capacity reservation for database persistent volume claim."
+}
+
+variable "twentycrm_server_pv_capacity" {
+ type = string
+ default = "10Gi"
+ description = "Storage capacity provisioned for server persistent volume."
+}
+
+variable "twentycrm_server_pvc_requests" {
+ type = string
+ default = "10Gi"
+ description = "Storage capacity reservation for server persistent volume claim."
+}
+
+variable "twentycrm_namespace" {
+ type = string
+ default = "twentycrm"
+ description = "Namespace for all TwentyCRM resources"
}