twenty/packages/twenty-docker/k8s
Thomas Mol ba2ee0da72
Refactor Redis connections to use Redis URL - closes #7421 (#7736)
Closes #7421

This pull request consolidates Redis connection parameters into a single
`REDIS_URL` environment variable across various configuration files and
code modules. The most important changes include updates to environment
variable files, Docker and Kubernetes configurations, and code modules
to utilize the new `REDIS_URL` format.

### Environment Variable Updates:
*
[`packages/twenty-docker/.env.example`](diffhunk://#diff-f4b5e7acc0dde630eafb2228390ca56bd56db0d183582be6433a9ee808088a4cL8-R8):
Replaced `REDIS_HOST` and `REDIS_PORT` with `REDIS_URL`.
*
[`packages/twenty-server/.env.example`](diffhunk://#diff-c06e244338b33286ea90221635809785352a971de53f647ea65650124ae74ad2L53-R53):
Replaced `REDIS_HOST`, `REDIS_PORT`, `REDIS_USERNAME`, and
`REDIS_PASSWORD` with `REDIS_URL`.
*
[`packages/twenty-server/.env.test`](diffhunk://#diff-def44a08e699c9deca2f72c9f87951de5d33d9ccf5621eab2f34978df8ad0954L16-R16):
Replaced `REDIS_HOST`, `REDIS_PORT`, `REDIS_USERNAME`, and
`REDIS_PASSWORD` with `REDIS_URL`.

### Docker and Kubernetes Configuration Updates:
*
[`packages/twenty-docker/docker-compose.yml`](diffhunk://#diff-545fb51ad66f93f727bb8f8b375dc6858b33348d91d5e51ad931fb0bbc1affeeL28-R28):
Replaced `REDIS_HOST` and `REDIS_PORT` with `REDIS_URL` in multiple
service definitions.
[[1]](diffhunk://#diff-545fb51ad66f93f727bb8f8b375dc6858b33348d91d5e51ad931fb0bbc1affeeL28-R28)
[[2]](diffhunk://#diff-545fb51ad66f93f727bb8f8b375dc6858b33348d91d5e51ad931fb0bbc1affeeL62-R61)
*
[`packages/twenty-docker/k8s/manifests/deployment-server.yaml`](diffhunk://#diff-91623ed4e8b2088947cfa9a5dad76b6013e8db0c150d84347a215fa9ad78bf04L44-R45):
Replaced `REDIS_HOST` and `REDIS_PORT` with `REDIS_URL`.
*
[`packages/twenty-docker/k8s/manifests/deployment-worker.yaml`](diffhunk://#diff-8532debd131ce168a2527fa6a9be6405792178576ee47e2eef0cd9f3ff4a8f8cL43-R44):
Replaced `REDIS_HOST` and `REDIS_PORT` with `REDIS_URL`.
*
[`packages/twenty-docker/k8s/terraform/deployment-server.tf`](diffhunk://#diff-b4c468660ab00bd03589d0d47502c477ca83f7d876ff196534880b02ba46dce0L64-R65):
Replaced `REDIS_HOST` and `REDIS_PORT` with `REDIS_URL`.
*
[`packages/twenty-docker/k8s/terraform/deployment-worker.tf`](diffhunk://#diff-e5d6a1f68d5391e2120aef6261f22f905aa1ce0a567e31b21a27d44f313eaecaL62-R63):
Replaced `REDIS_HOST` and `REDIS_PORT` with `REDIS_URL`.

### Code Module Updates:
*
[`packages/twenty-server/src/engine/core-modules/cache-storage/cache-storage.module-factory.ts`](diffhunk://#diff-06e787a7c8a48022d5909b5df9b8c6ca192521cf32f51d7f561cee937bed6678L23-R35):
Replaced `REDIS_HOST` and `REDIS_PORT` with `REDIS_URL`.
*
[`packages/twenty-server/src/engine/core-modules/environment/environment-variables.ts`](diffhunk://#diff-26ce615693b053eda02aa48aa2e30400381a2588dcb08d4a9dc3b0bf5bdd6fe7L378-R384):
Added validation for `REDIS_URL`.
*
[`packages/twenty-server/src/engine/core-modules/message-queue/message-queue.module-factory.ts`](diffhunk://#diff-7bd644d28bdd86c159c1d71242753df5d5acd91c73c6e60b2e35caa53ed3836bR6):
Replaced `REDIS_HOST`, `REDIS_PORT`, `REDIS_USERNAME`, and
`REDIS_PASSWORD` with `REDIS_URL`.
[[1]](diffhunk://#diff-7bd644d28bdd86c159c1d71242753df5d5acd91c73c6e60b2e35caa53ed3836bR6)
[[2]](diffhunk://#diff-7bd644d28bdd86c159c1d71242753df5d5acd91c73c6e60b2e35caa53ed3836bL35-R41)

### Documentation Updates:
*
[`packages/twenty-website/src/content/developers/self-hosting/self-hosting-var.mdx`](diffhunk://#diff-c4cc78a3ce18b6edb10f1aee8990271e1d2796a8c06c1c6ae3b68db8d52278a3L37-R37):
Updated documentation to reflect the change to `REDIS_URL`.
*
[`packages/twenty-website/src/content/developers/self-hosting/upgrade-guide.mdx`](diffhunk://#diff-c7d757829f6128e1f47aa1955bde561292dce558280511fab66281afa99042a5R102-R112):
Added upgrade instructions for the new `REDIS_URL` variable.

---------

Co-authored-by: Weiko <corentin@twenty.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
2024-10-16 17:17:44 +02:00
..
manifests Refactor Redis connections to use Redis URL - closes #7421 (#7736) 2024-10-16 17:17:44 +02:00
terraform Refactor Redis connections to use Redis URL - closes #7421 (#7736) 2024-10-16 17:17:44 +02:00
README.md Support for Kubernetes via Terraform and Manifests (#5721) 2024-07-10 13:54:27 +02:00

README

Overview

This repository contains Kubernetes manifests and Terraform files to help you deploy and manage the TwentyCRM application. The files are located in the packages/twenty-docker/k8s directory.

Prerequisites

Before using these files, ensure you have the following installed and configured on your system:

  • Kubernetes cluster (e.g., Minikube, EKS, GKE)
  • kubectl
  • Terraform
  • Docker

Setup Instructions

Step 1: Clone the Repository

Clone the repository to your local machine:

git clone https://github.com/twentyhq/twenty.git
cd twentycrm/packages/twenty-docker/k8s

Step 2: Customize the Manifests and Terraform Files

Important: These files require customization for your specific implementation. Update the placeholders and configurations according to your environment and requirements.

Step 3: Deploy with Terraform

  1. Navigate to the Terraform directory:

    cd terraform
    
  2. Initialize Terraform:

    terraform init
    
  3. Plan the deployment:

    terraform plan
    
  4. Apply the deployment:

    terraform apply
    

OR

Step 3: Deploy with Kubernetes Manifests

  1. Navigate to the Kubernetes manifests directory:

    cd ../k8s
    
  2. Create Server Secret

    kubectl create secret generic -n twentycrm tokens --from-literal accessToken=changeme --from-literal loginToken="changeme" --from-literal refreshToken="changeme" --from-literal fileToken="changeme"
    
  3. Apply the manifests:

    kubectl apply -f .
    

Customization

Kubernetes Manifests

  • Namespace: Update the namespace in the manifests as needed.
  • Resource Limits: Adjust the resource limits and requests according to your application's requirements.
  • Environment Variables: Configure server tokens in the Secret command above.

Terraform Files

  • Variables: Update the variables in the variables.tf file to match your environment.
  • Locals: Update the locals in the main.tf file to match your environment.
  • Providers: Ensure the provider configurations (e.g., AWS, GCP) are correct for your setup.
  • Resources: Modify the resource definitions as needed to fit your infrastructure.

Troubleshooting

Common Issues

  • Connectivity: Ensure your Kubernetes cluster is accessible and configured correctly.
  • Permissions: Verify that you have the necessary permissions to deploy resources in your cloud provider.
  • Resource Limits: Adjust resource limits if you encounter issues related to insufficient resources.

Logs and Debugging

  • Use kubectl logs to check the logs of your Kubernetes pods.
  • Use terraform show and terraform state to inspect your Terraform state and configurations.

Conclusion

This setup provides a basic structure for deploying the TwentyCRM application using Kubernetes and Terraform. Ensure you thoroughly customize the manifests and Terraform files to suit your specific needs. For any issues or questions, please refer to the official documentation of Kubernetes and Terraform or seek support from your cloud provider.


Feel free to contribute and improve this repository by submitting pull requests or opening issues. Happy deploying!