Remove plane

This commit is contained in:
dvirlabs 2025-07-20 01:31:47 +03:00
parent 2538a606d4
commit 0292a177f0
32 changed files with 0 additions and 2404 deletions

View File

@ -1,21 +0,0 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: plane
namespace: argocd
spec:
project: dev-tools
source:
repoURL: 'https://git.dvirlabs.com/dvirlabs/dev-tools.git'
targetRevision: HEAD
path: charts/plane-ce
helm:
valueFiles:
- ../../manifests/plane/values.yaml
destination:
server: https://kubernetes.default.svc
namespace: dev-tools
syncPolicy:
automated:
prune: true
selfHeal: true

View File

@ -1,24 +0,0 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/
test-*.yaml

View File

@ -1,13 +0,0 @@
annotations:
artifacthub.io/license: AGPL-3.0
apiVersion: v2
appVersion: 0.26.1
description: Meet Plane. An open-source software development tool to manage issues,
sprints, and product roadmaps with peace of mind.
home: https://plane.so
icon: https://plane.so/favicon/favicon-32x32.png
name: plane-ce
sources:
- https://github.com/makeplane/plane
type: application
version: 1.1.3

View File

@ -1,305 +0,0 @@
## Pre-requisite
- A working Kubernetes cluster
- `kubectl` and `helm` on the client system that you will use to install our Helm charts
## Installing Plane
1. Open Terminal or any other command-line app that has access to Kubernetes tools on your local system.
1. Add Helm Repo
```bash
helm repo add makeplane https://helm.plane.so/
```
1. Set-up and customization
- Quick set-up<br>
This is the fastest way to deploy Plane with default settings. This will create stateful deployments for Postgres, Rabbitmq, Redis, and Minio with a persistent volume claim using the default storage class. This also sets up the ingress routes for you using `nginx` ingress class.
> To customize this, see `Custom ingress routes` below.
Continue to be on the same Terminal window as you have so far, copy the code below, and paste it on your Terminal screen.
```bash
helm upgrade --install plane-app makeplane/plane-ce \
--create-namespace \
--namespace plane-ce \
--set planeVersion=stable \
--set ingress.appHost="plane.example.com" \
--set ingress.minioHost="plane-minio.example.com" \
--set ingress.rabbitmqHost="plane-mq.example.com" \
--set ingress.ingressClass=nginx \
--timeout 10m \
--wait \
--wait-for-jobs
```
> This is the basic setup required for Plane-CE. You can customize the default values for namespace and appname as needed. Additional settings can be configured by referring to the Configuration Settings section.<br>
Using a Custom StorageClass
To specify a custom StorageClass for Plane-CE components, add the following options to the above `helm upgrade --install` command:
```bash
--set postgres.storageClass=<your-storageclass-name>
--set redis.storageClass=<your-storageclass-name>
--set minio.storageClass=<your-storageclass-name>
--set rabbitmq.storageClass=<your-storageclass-name>
```
- Advance set-up<br>
For more control over your set-up, run the script below to download the `values.yaml` file and and edit using any editor like Vim or Nano.
```bash
helm show values makeplane/plane-ce > values.yaml
vi values.yaml
```
> See `Available customizations` for more details.
After saving the `values.yaml` file, continue to be on the same Terminal window as on the previous steps, copy the code below, and paste it on your Terminal screen.
```bash
helm upgrade --install plane-app makeplane/plane-ce \
--create-namespace \
--namespace plane-ce \
-f values.yaml \
--timeout 10m \
--wait \
--wait-for-jobs
```
## Configuration Settings Available
### Plane Version
| Setting | Default | Required | Description |
|---|:---:|:---:|---|
| planeVersion | stable | Yes | |
### Postgress DB Setup
| Setting | Default | Required | Description |
|---|:---:|:---:|---|
| postgres.local_setup | true | | Plane uses `postgres` as the primary database to store all the transactional data. This database can be hosted within kubernetes as part of helm chart deployment or can be used as hosted service remotely (e.g. aws rds or similar services). Set this to `true` when you choose to setup stateful deployment of `postgres`. Mark it as `false` when using a remotely hosted database |
| postgres.image | postgres:15.7-alpine | | Using this key, user must provide the docker image name to setup the stateful deployment of `postgres`. (must be set when `postgres.local_setup=true`)|
| postgres.pullPolicy | IfNotPresent | | Using this key, user can set the pull policy for the stateful deployment of `postgres`. (must be set when `postgres.local_setup=true`)|
| postgres.servicePort | 5432 | | This key sets the default port number to be used while setting up stateful deployment of `postgres`. |
| postgres.volumeSize | 5Gi | | While setting up the stateful deployment, while creating the persistant volume, volume allocation size need to be provided. This key helps you set the volume allocation size. Unit of this value must be in Mi (megabyte) or Gi (gigabyte) |
| env.pgdb_username | plane | | Database credentials are requried to access the hosted stateful deployment of `postgres`. Use this key to set the username for the stateful deployment. |
| env.pgdb_password | plane | | Database credentials are requried to access the hosted stateful deployment of `postgres`. Use this key to set the password for the stateful deployment. |
| env.pgdb_name | plane | | Database name to be used while setting up stateful deployment of `Postgres`|
| env.pgdb_remote_url | | | Users can also decide to use the remote hosted database and link to Plane deployment. Ignoring all the above keys, set `postgres.local_setup` to `false` and set this key with remote connection url. |
| postgres.storageClass | &lt;k8s-default-storage-class&gt; | | Creating the persitant volumes for the stateful deployments needs the `storageClass` name. Set the correct value as per your kubernetes cluster configuration. |
| postgres.assign_cluster_ip | false | | Set it to `true` if you want to assign `ClusterIP` to the service |
### Redis/Valkey Setup
| Setting | Default | Required | Description |
|---|:---:|:---:|---|
| redis.local_setup | true | | Plane uses `redis` to cache the session authentication and other static data. This database can be hosted within kubernetes as part of helm chart deployment or can be used as hosted service remotely (e.g. aws rds or similar services). Set this to `true` when you choose to setup stateful deployment of `redis`. Mark it as `false` when using a remotely hosted database |
| redis.image | valkey/valkey:7.2.5-alpine | | Using this key, user must provide the docker image name to setup the stateful deployment of `redis`. (must be set when `redis.local_setup=true`)|
| redis.pullPolicy | IfNotPresent | | Using this key, user can set the pull policy for the stateful deployment of `redis`. (must be set when `redis.local_setup=true`)|
| redis.servicePort | 6379 | | This key sets the default port number to be used while setting up stateful deployment of `redis`. |
| redis.volumeSize | 1Gi | | While setting up the stateful deployment, while creating the persistant volume, volume allocation size need to be provided. This key helps you set the volume allocation size. Unit of this value must be in Mi (megabyte) or Gi (gigabyte) |
| env.remote_redis_url | | | Users can also decide to use the remote hosted database and link to Plane deployment. Ignoring all the above keys, set `redis.local_setup` to `false` and set this key with remote connection url. |
| redis.storageClass | &lt;k8s-default-storage-class&gt; | | Creating the persitant volumes for the stateful deployments needs the `storageClass` name. Set the correct value as per your kubernetes cluster configuration. |
| redis.assign_cluster_ip | false | | Set it to `true` if you want to assign `ClusterIP` to the service |
### RabbitMQ Setup
| Setting | Default | Required | Description |
|---|:---:|:---:|---|
| rabbitmq.local_setup | true | | Plane uses `rabbitmq` as message queuing system. This can be hosted within kubernetes as part of helm chart deployment or can be used as hosted service remotely (e.g. aws mq or similar services). Set this to `true` when you choose to setup stateful deployment of `rabbitmq`. Mark it as `false` when using a remotely hosted service |
| rabbitmq.image | rabbitmq:3.13.6-management-alpine | | Using this key, user must provide the docker image name to setup the stateful deployment of `rabbitmq`. (must be set when `rabbitmq.local_setup=true`)|
| rabbitmq.pullPolicy | IfNotPresent | | Using this key, user can set the pull policy for the stateful deployment of `rabbitmq`. (must be set when `rabbitmq.local_setup=true`)|
| rabbitmq.servicePort | 5672 | | This key sets the default port number to be used while setting up stateful deployment of `rabbitmq`. |
| rabbitmq.managementPort | 15672 | | This key sets the default management port number to be used while setting up stateful deployment of `rabbitmq`. |
| rabbitmq.volumeSize | 100Mi | | While setting up the stateful deployment, while creating the persistant volume, volume allocation size need to be provided. This key helps you set the volume allocation size. Unit of this value must be in Mi (megabyte) or Gi (gigabyte) |
| rabbitmq.storageClass | &lt;k8s-default-storage-class&gt; | | Creating the persitant volumes for the stateful deployments needs the `storageClass` name. Set the correct value as per your kubernetes cluster configuration. |
| rabbitmq.default_user | plane | | Credentials are requried to access the hosted stateful deployment of `rabbitmq`. Use this key to set the username for the stateful deployment. |
| rabbitmq.default_password | plane | | Credentials are requried to access the hosted stateful deployment of `rabbitmq`. Use this key to set the password for the stateful deployment. |
| rabbitmq.assign_cluster_ip | false | | Set it to `true` if you want to assign `ClusterIP` to the service |
| rabbitmq.external_rabbitmq_url | | | Users can also decide to use the remote hosted service and link to Plane deployment. Ignoring all the above keys, set `rabbitmq.local_setup` to `false` and set this key with remote connection url. |
### Doc Store (Minio/S3) Setup
| Setting | Default | Required | Description |
|---|:---:|:---:|---|
| minio.local_setup | true | | Plane uses `minio` as the default file storage drive. This storage can be hosted within kubernetes as part of helm chart deployment or can be used as hosted service remotely (e.g. aws S3 or similar services). Set this to `true` when you choose to setup stateful deployment of `postgres`. Mark it as `false` when using a remotely hosted database |
| minio.image | minio/minio:latest | | Using this key, user must provide the docker image name to setup the stateful deployment of `minio`. (must be set when `minio.local_setup=true`)|
| minio.image_mc | minio/mc:latest | | Using this key, user must provide the docker image name to setup the job deployment of `minio client`. (must be set when `services.minio.local_setup=true`)|
| minio.pullPolicy | IfNotPresent | | Using this key, user can set the pull policy for the stateful deployment of `minio`. (must be set when `minio.local_setup=true`)|
| minio.volumeSize | 5Gi | | While setting up the stateful deployment, while creating the persistant volume, volume allocation size need to be provided. This key helps you set the volume allocation size. Unit of this value must be in Mi (megabyte) or Gi (gigabyte) |
| minio.root_user | admin | | Storage credentials are requried to access the hosted stateful deployment of `minio`. Use this key to set the username for the stateful deployment. |
| minio.root_password | password | | Storage credentials are requried to access the hosted stateful deployment of `minio`. Use this key to set the password for the stateful deployment. |
| minio.env.minio_endpoint_ssl | false | | (Optional) Env to enforce HTTPS when connecting to minio uploads bucket |
| env.docstore_bucket | uploads | Yes | Storage bucket name is required as part of configuration. This is where files will be uploaded irrespective of if you are using `Minio` or external `S3` (or compatible) storage service |
| env.doc_upload_size_limit | 5242880 | Yes | Document Upload Size Limit (default to 5Mb) |
| env.aws_access_key | | | External `S3` (or compatible) storage service provides `access key` for the application to connect and do the necessary upload/download operations. To be provided when `minio.local_setup=false` |
| env.aws_secret_access_key | | | External `S3` (or compatible) storage service provides `secret access key` for the application to connect and do the necessary upload/download operations. To be provided when `minio.local_setup=false` |
| env.aws_region | | | External `S3` (or compatible) storage service providers creates any buckets in user selected region. This is also shared with the user as `region` for the application to connect and do the necessary upload/download operations. To be provided when `minio.local_setup=false` |
| env.aws_s3_endpoint_url | | | External `S3` (or compatible) storage service providers shares a `endpoint_url` for the integration purpose for the application to connect and do the necessary upload/download operations. To be provided when `minio.local_setup=false` |
| minio.storageClass | &lt;k8s-default-storage-class&gt; | | Creating the persitant volumes for the stateful deployments needs the `storageClass` name. Set the correct value as per your kubernetes cluster configuration. |
| minio.assign_cluster_ip | false | | Set it to `true` if you want to assign `ClusterIP` to the service |
### Web Deployment
| Setting | Default | Required | Description |
|---|:---:|:---:|---|
| web.replicas | 1 | Yes | Kubernetes helps you with scaling up/down the deployments. You can run 1 or more pods for each deployment. This key helps you setting up number of replicas you want to run for this deployment. It must be >=1 |
| web.memoryLimit | 1000Mi | | Every deployment in kubernetes can be set to use maximum memory they are allowed to use. This key sets the memory limit for this deployment to use.|
| web.cpuLimit | 500m | | Every deployment in kubernetes can be set to use maximum cpu they are allowed to use. This key sets the cpu limit for this deployment to use.|
| web.memoryRequest | 50Mi | | Every deployment in kubernetes can be set to use minimum memory they are allowed to use. This key sets the memory request for this deployment to use.|
| web.cpuRequest | 50m | | Every deployment in kubernetes can be set to use minimum cpu they are allowed to use. This key sets the cpu request for this deployment to use.|
| web.image| artifacts.plane.so/makeplane/plane-frontend | | This deployment needs a preconfigured docker image to function. Docker image name is provided by the owner and must not be changed for this deployment |
| web.pullPolicy | Always | | Using this key, user can set the pull policy for the deployment of `web`. |
| web.assign_cluster_ip | false | | Set it to `true` if you want to assign `ClusterIP` to the service |
### Space Deployment
| Setting | Default | Required | Description |
|---|:---:|:---:|---|
| space.replicas | 1 | Yes | Kubernetes helps you with scaling up/down the deployments. You can run 1 or more pods for each deployment. This key helps you setting up number of replicas you want to run for this deployment. It must be >=1 |
| space.memoryLimit | 1000Mi | | Every deployment in kubernetes can be set to use maximum memory they are allowed to use. This key sets the memory limit for this deployment to use.|
| space.cpuLimit | 500m | | Every deployment in kubernetes can be set to use maximum cpu they are allowed to use. This key sets the cpu limit for this deployment to use.|
| space.memoryRequest | 50Mi | | Every deployment in kubernetes can be set to use minimum memory they are allowed to use. This key sets the memory request for this deployment to use.|
| space.cpuRequest | 50m | | Every deployment in kubernetes can be set to use minimum cpu they are allowed to use. This key sets the cpu request for this deployment to use.|
| space.image| artifacts.plane.so/makeplane/plane-space| | This deployment needs a preconfigured docker image to function. Docker image name is provided by the owner and must not be changed for this deployment |
| space.pullPolicy | Always | | Using this key, user can set the pull policy for the deployment of `space`. |
| space.assign_cluster_ip | false | | Set it to `true` if you want to assign `ClusterIP` to the service |
### Admin Deployment
| Setting | Default | Required | Description |
|---|:---:|:---:|---|
| admin.replicas | 1 | Yes | Kubernetes helps you with scaling up/down the deployments. You can run 1 or more pods for each deployment. This key helps you setting up number of replicas you want to run for this deployment. It must be >=1 |
| admin.memoryLimit | 1000Mi | | Every deployment in kubernetes can be set to use maximum memory they are allowed to use. This key sets the memory limit for this deployment to use.|
| admin.cpuLimit | 500m | | Every deployment in kubernetes can be set to use maximum cpu they are allowed to use. This key sets the cpu limit for this deployment to use.|
| admin.memoryRequest | 50Mi | | Every deployment in kubernetes can be set to use minimum memory they are allowed to use. This key sets the memory request for this deployment to use.|
| admin.cpuRequest | 50m | | Every deployment in kubernetes can be set to use minimum cpu they are allowed to use. This key sets the cpu request for this deployment to use.|
| admin.image| artifacts.plane.so/makeplane/plane-admin | | This deployment needs a preconfigured docker image to function. Docker image name is provided by the owner and must not be changed for this deployment |
| admin.pullPolicy | Always | | Using this key, user can set the pull policy for the deployment of `admin`. |
| admin.assign_cluster_ip | false | | Set it to `true` if you want to assign `ClusterIP` to the service |
### Live Service Deployment
| Setting | Default | Required | Description |
|---|:---:|:---:|---|
| live.replicas | 1 | Yes | Kubernetes helps you with scaling up/down the deployments. You can run 1 or more pods for each deployment. This key helps you setting up number of replicas you want to run for this deployment. It must be >=1 |
| live.memoryLimit | 1000Mi | | Every deployment in kubernetes can be set to use maximum memory they are allowed to use. This key sets the memory limit for this deployment to use.|
| live.cpuLimit | 500m | | Every deployment in kubernetes can be set to use maximum cpu they are allowed to use. This key sets the cpu limit for this deployment to use.|
| live.memoryRequest | 50Mi | | Every deployment in kubernetes can be set to use minimum memory they are allowed to use. This key sets the memory request for this deployment to use.|
| live.cpuRequest | 50m | | Every deployment in kubernetes can be set to use minimum cpu they are allowed to use. This key sets the cpu request for this deployment to use.|
| live.image| artifacts.plane.so/makeplane/plane-live | | This deployment needs a preconfigured docker image to function. Docker image name is provided by the owner and must not be changed for this deployment |
| live.pullPolicy | Always | | Using this key, user can set the pull policy for the deployment of `live`. |
| env.live_sentry_dsn | | | (optional) Live service deployment comes with some of the preconfigured integration. Sentry is one among those. Here user can set the Sentry provided DSN for this integration.|
| env.live_sentry_environment | | | (optional) Live service deployment comes with some of the preconfigured integration. Sentry is one among those. Here user can set the Sentry environment name (as configured in Sentry) for this integration.|
| env.live_sentry_traces_sample_rate | | | (optional) Live service deployment comes with some of the preconfigured integration. Sentry is one among those. Here user can set the Sentry trace sample rate (as configured in Sentry) for this integration.|
| live.assign_cluster_ip | false | | Set it to `true` if you want to assign `ClusterIP` to the service |
### API Deployment
| Setting | Default | Required | Description |
|---|:---:|:---:|---|
| api.replicas | 1 | Yes | Kubernetes helps you with scaling up/down the deployments. You can run 1 or more pods for each deployment. This key helps you setting up number of replicas you want to run for this deployment. It must be >=1 |
| api.memoryLimit | 1000Mi | | Every deployment in kubernetes can be set to use maximum memory they are allowed to use. This key sets the memory limit for this deployment to use.|
| api.cpuLimit | 500m | | Every deployment in kubernetes can be set to use maximum cpu they are allowed to use. This key sets the cpu limit for this deployment to use.|
| api.memoryRequest | 50Mi | | Every deployment in kubernetes can be set to use minimum memory they are allowed to use. This key sets the memory request for this deployment to use.|
| api.cpuRequest | 50m | | Every deployment in kubernetes can be set to use minimum cpu they are allowed to use. This key sets the cpu request for this deployment to use.|
| api.image| artifacts.plane.so/makeplane/plane-backend | | This deployment needs a preconfigured docker image to function. Docker image name is provided by the owner and must not be changed for this deployment |
| api.pullPolicy | Always | | Using this key, user can set the pull policy for the deployment of `api`. |
| env.sentry_dsn | | | (optional) API service deployment comes with some of the preconfigured integration. Sentry is one among those. Here user can set the Sentry provided DSN for this integration.|
| env.sentry_environment | | | (optional) API service deployment comes with some of the preconfigured integration. Sentry is one among those. Here user can set the Sentry environment name (as configured in Sentry) for this integration.|
| env.api_key_rate_limit | 60/minute | | (optional) User can set the maximum number of requests the API can handle in a given time frame.|
| api.assign_cluster_ip | false | | Set it to `true` if you want to assign `ClusterIP` to the service |
### Worker Deployment
| Setting | Default | Required | Description |
|---|:---:|:---:|---|
| worker.replicas | 1 | Yes | Kubernetes helps you with scaling up/down the deployments. You can run 1 or more pods for each deployment. This key helps you setting up number of replicas you want to run for this deployment. It must be >=1 |
| worker.memoryLimit | 1000Mi | | Every deployment in kubernetes can be set to use maximum memory they are allowed to use. This key sets the memory limit for this deployment to use.|
| worker.cpuLimit | 500m | | Every deployment in kubernetes can be set to use maximum cpu they are allowed to use. This key sets the cpu limit for this deployment to use.|
| worker.memoryRequest | 50Mi | | Every deployment in kubernetes can be set to use minimum memory they are allowed to use. This key sets the memory request for this deployment to use.|
| worker.cpuRequest | 50m | | Every deployment in kubernetes can be set to use minimum cpu they are allowed to use. This key sets the cpu request for this deployment to use.|
| worker.image| artifacts.plane.so/makeplane/plane-backend | | This deployment needs a preconfigured docker image to function. Docker image name is provided by the owner and must not be changed for this deployment |
### Beat-Worker deployment
| Setting | Default | Required | Description |
|---|:---:|:---:|---|
| beatworker.replicas | 1 | Yes | Kubernetes helps you with scaling up/down the deployments. You can run 1 or more pods for each deployment. This key helps you setting up number of replicas you want to run for this deployment. It must be >=1 |
| beatworker.memoryLimit | 1000Mi | | Every deployment in kubernetes can be set to use maximum memory they are allowed to use. This key sets the memory limit for this deployment to use.|
| beatworker.cpuLimit | 500m | | Every deployment in kubernetes can be set to use maximum cpu they are allowed to use. This key sets the cpu limit for this deployment to use.|
| beatworker.memoryRequest | 50Mi | | Every deployment in kubernetes can be set to use minimum memory they are allowed to use. This key sets the memory request for this deployment to use.|
| beatworker.cpuRequest | 50m | | Every deployment in kubernetes can be set to use minimum cpu they are allowed to use. This key sets the cpu request for this deployment to use.|
| beatworker.image| artifacts.plane.so/makeplane/plane-backend | | This deployment needs a preconfigured docker image to function. Docker image name is provided by the owner and must not be changed for this deployment |
### Ingress and SSL Setup
| Setting | Default | Required | Description |
|---|:---:|:---:|---|
| ingress.enabled | true | | Ingress setup in kubernetes is a common practice to expose application to the intended audience. Set it to `false` if you are using external ingress providers like `Cloudflare` |
| ingress.appHost | plane.example.com | Yes | The fully-qualified domain name (FQDN) in the format `sudomain.domain.tld` or `domain.tld` that the license is bound to. It is also attached to your `ingress` host to access Plane. |
| ingress.minioHost | | | Based on above configuration, if you want to expose the `minio` web console to set of users, use this key to set the `host` mapping or leave it as `EMPTY` to not expose interface. |
| ingress.rabbitmqHost | | | Based on above configuration, if you want to expose the `rabbitmq` web console to set of users, use this key to set the `host` mapping or leave it as `EMPTY` to not expose interface. |
| ingress.ingressClass | nginx | Yes | Kubernetes cluster setup comes with various options of `ingressClass`. Based on your setup, set this value to the right one (eg. nginx, traefik, etc). Leave it to default in case you are using external ingress provider.|
| ingress.ingress_annotations | `{ "nginx.ingress.kubernetes.io/proxy-body-size": "5m" }` | | Ingress controllers comes with various configuration options which can be passed as annotations. Setting this value lets you change the default value to user required. |
| ssl.createIssuer | false | | Kubernets cluster setup supports creating `issuer` type resource. After deployment, this is step towards creating secure access to the ingress url. Issuer is required for you generate SSL certifiate. Kubernetes can be configured to use any of the certificate authority to generate SSL (depending on CertManager configuration). Set it to `true` to create the issuer. Applicable only when `ingress.enabled=true`|
| ssl.issuer | http | | CertManager configuration allows user to create issuers using `http` or any of the other DNS Providers like `cloudflare`, `digitalocean`, etc. As of now Plane supports `http`, `cloudflare`, `digitalocean`|
| ssl.token | | | To create issuers using DNS challenge, set the issuer api token of dns provider like cloudflare` or `digitalocean`(not required for http) |
| ssl.server | <https://acme-v02.api.letsencrypt.org/directory> | | Issuer creation configuration need the certificate generation authority server url. Default URL is the `Let's Encrypt` server|
| ssl.email | <plane@example.com> | | Certificate generation authority needs a valid email id before generating certificate. Required when `ssl.createIssuer=true` |
| ssl.generateCerts | false | | After creating the issuers, user can still not create the certificate untill sure of configuration. Setting this to `true` will try to generate SSL certificate and associate with ingress. Applicable only when `ingress.enabled=true` and `ssl.createIssuer=true` |
| ssl.tls_secret_name | | | If you have a custom TLS secret name, set this to the name of the secret. Applicable only when `ingress.enabled=true` and `ssl.createIssuer=false` |
### Common Environment Settings
| Setting | Default | Required | Description |
|---|:---:|:---:|---|
| env.secret_key | 60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5 | Yes | This must a random string which is used for hashing/encrypting the sensitive data within the application. Once set, changing this might impact the already hashed/encrypted data|
| env.default_cluster_domain | cluster.local | Yes | Set this value as configured in your kubernetes cluster. `cluster.local` is usally the default in most cases. |
## External Secrets Config
To configure the external secrets for your application, you need to define specific environment variables for each secret category. Below is a list of the required secrets and their respective environment variables.
| Secret Name | Env Var Name | Required | Description | Example Value |
|--- |:---|:---|:---|:---|
| rabbitmq_existingSecret | `RABBITMQ_DEFAULT_USER` | Required if `rabbitmq.local_setup=true` | The default RabbitMQ user | `plane` |
| | `RABBITMQ_DEFAULT_PASS` | Required if `rabbitmq.local_setup=true` | The default RabbitMQ password | `plane` |
| pgdb_existingSecret | `POSTGRES_PASSWORD` | Required if `postgres.local_setup=true` | Password for PostgreSQL database | `plane` |
| | `POSTGRES_DB` | Required if `postgres.local_setup=true` | Name of the PostgreSQL database | `plane` |
| | `POSTGRES_USER` | Required if `postgres.local_setup=true` | PostgreSQL user | `plane` |
| doc_store_existingSecret | `USE_MINIO` | Yes | Flag to enable MinIO as the storage backend | `1` |
| | `MINIO_ROOT_USER` | Yes | MinIO root user | `admin` |
| | `MINIO_ROOT_PASSWORD` | Yes | MinIO root password | `password` |
| | `AWS_ACCESS_KEY_ID` | Yes | AWS Access Key ID | `your_aws_key` |
| | `AWS_SECRET_ACCESS_KEY` | Yes | AWS Secret Access Key | `your_aws_secret` |
| | `AWS_S3_BUCKET_NAME` | Yes | AWS S3 Bucket Name | `your_bucket_name` |
| | `AWS_S3_ENDPOINT_URL` | Yes | Endpoint URL for AWS S3 or MinIO | `http://plane-minio.plane-ns.svc.cluster.local:9000` |
| | `AWS_REGION` | Optional | AWS region where your S3 bucket is located | `your_aws_region` |
| | `FILE_SIZE_LIMIT` | Yes | Limit for file uploads in your system | `5MB` |
| app_env_existingSecret | `SECRET_KEY` | Yes | Random secret key | `60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5` |
| | `REDIS_URL` | Yes | Redis URL | `redis://plane-redis.plane-ns.svc.cluster.local:6379/` |
| | `DATABASE_URL` | Yes | PostgreSQL connection URL | **k8s service example**: `postgresql://plane:plane@plane-pgdb.plane-ns.svc.cluster.local:5432/plane` <br> <br>**external service example**: `postgresql://username:password@your-db-host:5432/plane` |
| | `AMQP_URL` | Yes | RabbitMQ connection URL | **k8s service example**: `amqp://plane:plane@plane-rabbitmq.plane-ns.svc.cluster.local:5672/` <br> <br> **external service example**: `amqp://username:password@your-rabbitmq-host:5672/` |
| live_env_existingSecret | `REDIS_URL` | Yes | Redis URL | `redis://plane-redis.plane-ns.svc.cluster.local:6379/` |
## Custom Ingress Routes
If you are planning to use 3rd party ingress providers, here is the available route configuration
| Host | Path | Service | Required |
|--- |:---:|---|:--- |
| plane.example.com | / | <http://plane-app-web.plane:3000> | Yes |
| plane.example.com | /spaces/* | <http://plane-app-space.plane:3000> | Yes |
| plane.example.com | /god-mode/* | <http://plane-app-admin.plane:3000> | Yes |
| plane.example.com | /live/* | <http://plane-app-live.plane:3000> | Yes |
| plane.example.com | /api/* | <http://plane-app-api.plane:8000> | Yes |
| plane.example.com | /auth/* | <http://plane-app-api.plane:8000> | Yes |
| plane.example.com | /uploads/* | <http://plane-app-minio.plane:9000> | Yes (Only if using local setup) |
| plane-minio.example.com | / | <http://plane-app-minio.plane:9090> | (Optional) if using local setup, this will enable minio console access |
| plane-mq.example.com | / | <http://plane-app-rabbitmq.plane:15672> | (Optional) if using local setup, this will enable management console access |

View File

@ -1,638 +0,0 @@
questions:
- variable: dockerRegistry.enabled
label: Docker Registry Enabled
type: boolean
default: false
group: "Docker Registry"
show_subquestion_if: true
subquestions:
- variable: dockerRegistry.host
label: "Registry Host"
type: string
- variable: dockerRegistry.loginid
label: "Login ID"
type: string
- variable: dockerRegistry.password
label: "Password/Token"
type: password
- variable: planeVersion
label: Plane Version (Docker Image Tag)
type: string
default: stable
required: true
group: "Docker Registry"
- variable: web.image
label: Frontend Docker Image
type: string
required: true
default: "artifacts.plane.so/makeplane/plane-frontend"
group: "Web Setup"
subquestions:
- variable: web.pullPolicy
label: "Image Pull Policy"
type: enum
options:
- "Always"
- "IfNotPresent"
- "Never"
default: "Always"
- variable: web.replicas
label: "Default Replica Count"
type: int
default: 1
- variable: web.memoryLimit
label: "Memory Limit"
type: string
default: 1000Mi
- variable: web.cpuLimit
label: "CPU Limit"
type: string
default: 500m
- variable: web.assign_cluster_ip
label: "Assign Cluster IP"
type: boolean
default: false
- variable: web.memoryRequest
label: "Memory Request"
type: string
default: 50Mi
- variable: web.cpuRequest
label: "CPU Request"
type: string
default: 50m
- variable: space.image
label: Space Docker Image
type: string
required: true
default: "artifacts.plane.so/makeplane/plane-space"
group: "Spaces Setup"
subquestions:
- variable: space.pullPolicy
label: "Image Pull Policy"
type: enum
options:
- "Always"
- "IfNotPresent"
- "Never"
default: "Always"
- variable: space.replicas
label: "Default Replica Count"
type: int
default: 1
- variable: space.memoryLimit
label: "Memory Limit"
type: string
default: 1000Mi
- variable: space.cpuLimit
label: "CPU Limit"
type: string
default: 500m
- variable: space.memoryRequest
label: "Memory Request"
type: string
default: 50Mi
- variable: space.cpuRequest
label: "CPU Request"
type: string
default: 50m
- variable: space.assign_cluster_ip
label: "Assign Cluster IP"
type: boolean
default: false
- variable: admin.image
label: Admin Docker Image
type: string
required: true
default: "artifacts.plane.so/makeplane/plane-admin"
group: "Admin Setup"
subquestions:
- variable: admin.pullPolicy
label: "Image Pull Policy"
type: enum
options:
- "Always"
- "IfNotPresent"
- "Never"
default: "Always"
- variable: admin.replicas
label: "Default Replica Count"
type: int
default: 1
- variable: admin.memoryLimit
label: "Memory Limit"
type: string
default: 1000Mi
- variable: admin.cpuLimit
label: "CPU Limit"
type: string
default: 500m
- variable: admin.assign_cluster_ip
label: "Assign Cluster IP"
type: boolean
default: true
- variable: admin.memoryRequest
label: "Memory Request"
type: string
default: 50Mi
- variable: admin.cpuRequest
label: "CPU Request"
type: string
default: 50m
- variable: live.image
label: Live Docker Image
type: string
required: true
default: "artifacts.plane.so/makeplane/plane-live"
description: "Live Server Setup"
group: "Live Setup"
subquestions:
- variable: live.pullPolicy
label: "Image Pull Policy"
type: enum
options:
- "Always"
- "IfNotPresent"
- "Never"
default: "Always"
- variable: live.replicas
label: "Default Replica Count"
type: int
default: 1
- variable: live.memoryLimit
label: "Memory Limit"
type: string
default: 1000Mi
- variable: live.cpuLimit
label: "CPU Limit"
type: string
default: 500m
- variable: live.assign_cluster_ip
label: "Assign Cluster IP"
type: boolean
default: false
- variable: live.memoryRequest
label: "Memory Request"
type: string
default: 50Mi
- variable: live.cpuRequest
label: "CPU Request"
type: string
default: 50m
- variable: env.live_sentry_dsn
label: "Live Sentry DSN"
type: string
default: ""
- variable: env.live_sentry_environment
label: "Live Sentry Environment"
type: string
default: ""
- variable: env.live_sentry_traces_sample_rate
label: "Live Sentry Traces Sample Rate"
type: string
default: ""
- variable: api.image
label: Backend Docker Image
type: string
required: true
default: "artifacts.plane.so/makeplane/plane-backend"
description: "Used by API, Worker, Beat-Worker"
group: "API Setup"
subquestions:
- variable: api.pullPolicy
label: "Image Pull Policy"
type: enum
options:
- "Always"
- "IfNotPresent"
- "Never"
default: "Always"
- variable: api.replicas
label: "Default Replica Count"
type: int
default: 1
- variable: api.memoryLimit
label: "Memory Limit"
type: string
default: 1000Mi
- variable: api.cpuLimit
label: "CPU Limit"
type: string
default: 500m
- variable: api.assign_cluster_ip
label: "Assign Cluster IP"
type: boolean
default: false
- variable: api.memoryRequest
label: "Memory Request"
type: string
default: 50Mi
- variable: api.cpuRequest
label: "CPU Request"
type: string
default: 50m
- variable: env.cors_allowed_origins
label: "CORS Allowed Origins"
type: string
default: ""
- variable: env.sentry_dsn
label: "Sentry DSN"
type: string
default: ""
- variable: env.sentry_environment
label: "Sentry Environment"
type: string
default: "Development"
- variable: env.secret_key
label: "Random Secret Key"
type: string
required: true
default: "60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5"
- variable: env.api_key_rate_limit
label: "API Key Rate Limit"
type: string
default: "60/minute"
- variable: worker.replicas
label: "Default Replica Count"
type: int
default: 1
group: "Worker Setup"
subquestions:
- variable: worker.memoryLimit
label: "Memory Limit"
type: string
default: 1000Mi
- variable: worker.cpuLimit
label: "CPU Limit"
type: string
default: 500m
- variable: worker.memoryRequest
label: "Memory Request"
type: string
default: 50Mi
- variable: worker.cpuRequest
label: "CPU Request"
type: string
default: 50m
- variable: beatworker.replicas
label: "Default Replica Count"
type: int
default: 1
group: "Beat Worker Setup"
subquestions:
- variable: beatworker.memoryLimit
label: "Memory Limit"
type: string
default: 1000Mi
- variable: beatworker.cpuLimit
label: "CPU Limit"
type: string
default: 500m
- variable: beatworker.memoryRequest
label: "Memory Request"
type: string
default: 50Mi
- variable: beatworker.cpuRequest
label: "CPU Request"
type: string
default: 50m
- variable: redis.local_setup
label: "Install Redis"
type: boolean
default: true
group: "Redis Setup"
subquestions:
- variable: redis.pullPolicy
label: "Redis Pull Policy"
type: enum
options:
- "Always"
- "IfNotPresent"
- "Never"
default: "IfNotPresent"
- variable: redis.image
label: "Docker Image"
type: string
default: "valkey/valkey:7.2.5-alpine"
show_if: "redis.local_setup=true"
- variable: redis.servicePort
label: Port
type: int
default: 6379
show_if: "redis.local_setup=true"
- variable: redis.storageClass
label: "Storage Class"
type: storageclass
show_if: "redis.local_setup=true"
- variable: redis.volumeSize
label: "Volume Size"
type: string
default: "100Mi"
show_if: "redis.local_setup=true"
- variable: redis.assign_cluster_ip
label: "Assign Cluster IP"
type: boolean
default: false
show_if: "redis.local_setup=true"
- variable: env.remote_redis_url
label: "Remote Redis URL"
type: string
default: "redis://"
show_if: "redis.local_setup=false"
- variable: postgres.local_setup
label: "Install Postgres"
type: boolean
default: true
group: "Postgres Setup"
# show_subquestion_if: true
subquestions:
- variable: postgres.pullPolicy
label: "Postgres Pull Policy"
type: enum
options:
- "Always"
- "IfNotPresent"
- "Never"
default: "IfNotPresent"
- variable: postgres.image
label: "Docker Image"
type: string
default: "postgres:15.7-alpine"
show_if: "postgres.local_setup=true"
- variable: postgres.servicePort
label: Service Port
type: int
default: 5432
show_if: "postgres.local_setup=true"
- variable: postgres.storageClass
label: "Storage Class"
type: storageclass
show_if: "postgres.local_setup=true"
- variable: postgres.volumeSize
label: "Volume Size"
type: string
default: "1Gi"
show_if: "postgres.local_setup=true"
- variable: env.pgdb_username
label: "Username"
type: string
default: "plane"
show_if: "postgres.local_setup=true"
- variable: env.pgdb_password
label: "Password"
type: password
default: "plane"
show_if: "postgres.local_setup=true"
- variable: env.pgdb_name
label: "DB Name"
type: string
default: "plane"
show_if: "postgres.local_setup=true"
- variable: postgres.assign_cluster_ip
label: "Assign Cluster IP"
type: boolean
default: false
show_if: "postgres.local_setup=true"
- variable: env.pgdb_remote_url
label: "Remote URL"
type: string
default: "postrgres://"
show_if: "postgres.local_setup=false"
- variable: rabbitmq.local_setup
label: "Install RabbitMQ"
type: boolean
default: true
group: "RabbitMQ Setup"
subquestions:
- variable: rabbitmq.image
label: "Docker Image"
type: string
default: "rabbitmq:3.13.6-management-alpine"
show_if: "rabbitmq.local_setup=true"
- variable: rabbitmq.pullPolicy
label: "Image Pull Policy"
type: enum
options:
- "Always"
- "IfNotPresent"
- "Never"
default: "IfNotPresent"
show_if: "rabbitmq.local_setup=true"
- variable: rabbitmq.servicePort
label: Service Port
type: int
default: 5672
show_if: "rabbitmq.local_setup=true"
- variable: rabbitmq.managementPort
label: Management Port
type: int
default: 15672
show_if: "rabbitmq.local_setup=true"
- variable: rabbitmq.assign_cluster_ip
label: "Assign ClusterIP"
type: boolean
default: false
show_if: "rabbitmq.local_setup=true"
- variable: rabbitmq.storageClass
label: "Storage Class"
type: storageclass
show_if: "rabbitmq.local_setup=true"
- variable: rabbitmq.volumeSize
label: "Volume Size"
type: string
default: "100Mi"
show_if: "rabbitmq.local_setup=true"
- variable: rabbitmq.default_user
label: "Username"
type: string
default: "plane"
show_if: "rabbitmq.local_setup=true"
- variable: rabbitmq.default_password
label: "Password"
type: password
default: "plane"
show_if: "rabbitmq.local_setup=true"
- variable: rabbitmq.external_rabbitmq_url
label: "Remote URL"
type: string
show_if: "rabbitmq.local_setup=false"
- variable: minio.local_setup
label: "Install Minio"
type: boolean
default: true
group: "Storage Setup"
subquestions:
- variable: minio.pullPolicy
label: "Minio Pull Policy"
type: enum
options:
- "Always"
- "IfNotPresent"
- "Never"
default: "IfNotPresent"
- variable: minio.image
label: "Docker Image"
type: string
default: "minio/minio:latest"
show_if: "minio.local_setup=true"
- variable: minio.image_mc
label: "MinIO Client Docker Image"
type: string
default: "minio/mc:latest"
show_if: "minio.local_setup=true"
- variable: minio.root_user
label: "Root User"
type: string
default: "admin"
show_if: "minio.local_setup=true"
- variable: minio.root_password
label: "Root Password"
type: password
default: "password"
show_if: "minio.local_setup=true"
- variable: minio.storageClass
label: "Storage Class"
type: storageclass
show_if: "minio.local_setup=true"
- variable: minio.volumeSize
label: "Volume Size"
type: string
default: "1Gi"
show_if: "minio.local_setup=true"
- variable: minio.assign_cluster_ip
label: "Assign Cluster IP"
type: boolean
default: false
show_if: "minio.local_setup=true"
- variable: env.aws_access_key
label: "AWS Access Key"
type: string
default: ""
show_if: "minio.local_setup=false"
- variable: env.aws_secret_access_key
label: "AWS Secret Key"
type: password
default: ""
show_if: "minio.local_setup=false"
- variable: env.aws_region
label: "AWS Region"
type: string
default: ""
show_if: "minio.local_setup=false"
- variable: env.aws_s3_endpoint_url
label: "AWS S3 Endpoint URL"
type: string
default: ""
show_if: "minio.local_setup=false"
- variable: env.docstore_bucket
label: "Bucket Name"
type: string
default: "uploads"
- variable: env.doc_upload_size_limit
label: "FIle Upload Size Limit"
type: string
default: "5242880"
- variable: minio.env.minio_endpoint_ssl
label: "Minio Endpoint SSL"
type: boolean
default: false
- variable: ingress.enabled
label: "Install Ingress"
type: boolean
default: true
required: true
group: "Ingress"
subquestions:
- variable: ingress.appHost
label: "App. Host"
type: string
default: "plane.example.com"
required: true
- variable: ingress.minioHost
label: "Minio Host"
type: string
default: ""
show_if: "minio.local_setup=true"
- variable: ingress.rabbitmqHost
label: "Rabbitmq Host"
type: string
default: ""
show_if: "rabbitmq.local_setup=true"
- variable: ingress.ingressClass
label: "Ingress Classname"
type: string
default: "nginx"
show_if: "ingress.enabled=true"
- variable: ssl.createIssuer
label: "Create Issuer"
type: boolean
default: false
group: "Ingress"
show_if: "ingress.enabled=true"
show_subquestion_if: true
subquestions:
- variable: ssl.issuer
label: "SSL Issuer"
type: enum
options:
- "http"
- "cloudflare"
- "digitalocean"
default: "http"
- variable: ssl.server
label: "Let's Encrypt Server URL"
type: string
default: "https://acme-staging-v02.api.letsencrypt.org/directory"
- variable: ssl.email
label: "Let's Encrypt Reg. Email"
type: string
default: "plane@example.com"
- variable: ssl.token
label: "Provider API Token"
type: password
default: ""
description: "Not required for 'http' issuer"
show_if: "ssl.issuer=cloudflare || ssl.issuer=digitalocean"
- variable: ssl.generateCerts
label: "Enable to generate certificates"
type: boolean
default: false
- variable: ssl.tls_secret_name
label: "Custom TLS Secret Name"
type: string
default: ""
group: "Ingress"
show_if: "ssl.createIssuer=false"
- variable: external_secrets.rabbitmq_existingSecret
label: "RabbitMQ Secrets File Name"
type: string
default: ""
group: "External Secrets"
- variable: external_secrets.pgdb_existingSecret
label: "Postgres Secrets File Name"
type: string
default: ""
group: "External Secrets"
- variable: external_secrets.doc_store_existingSecret
label: "Doc Store and Minio Secrets File Name"
type: string
default: ""
group: "External Secrets"
- variable: external_secrets.app_env_existingSecret
label: "App Envs Secrets File Name"
type: string
default: ""
group: "External Secrets"

View File

@ -1,3 +0,0 @@
{{- define "imagePullSecret" }}
{{- printf "{\"auths\":{\"%s\":{\"username\":\"%s\",\"password\":\"%s\"}}}" .Values.dockerRegistry.host .Values.dockerRegistry.loginid .Values.dockerRegistry.password | b64enc }}
{{- end }}

View File

@ -1,46 +0,0 @@
{{- if and .Values.ingress.enabled .Values.ssl.createIssuer (empty .Values.ssl.tls_secret_name) }}
apiVersion: v1
kind: Secret
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-issuer-api-token-secret
type: Opaque
stringData:
api-token: {{ .Values.ssl.token | default "default-api-token" | quote }}
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-cert-issuer
spec:
acme:
email: {{ .Values.ssl.email }}
server: {{ .Values.ssl.server }}
privateKeySecretRef:
name: {{ .Release.Name }}-cert-issuer-key
solvers:
{{- if eq .Values.ssl.issuer "cloudflare" }}
- dns01:
cloudflare:
apiTokenSecretRef:
name: {{ .Release.Name }}-issuer-api-token-secret
key: api-token
{{- end }}
{{- if eq .Values.ssl.issuer "digitalocean" }}
- dns01:
digitalocean:
tokenSecretRef:
name: {{ .Release.Name }}-issuer-api-token-secret
key: api-token
{{- end }}
{{- if eq .Values.ssl.issuer "http" }}
- http01:
ingress:
ingressClassName: {{ .Values.ingress.ingressClass }}
{{- end }}
---
{{- end}}

View File

@ -1,21 +0,0 @@
{{- if and .Values.ingress.enabled .Values.ssl.createIssuer .Values.ssl.generateCerts (empty .Values.ssl.tls_secret_name) }}
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-ssl-cert
spec:
dnsNames:
- {{ .Values.ingress.appHost | quote }}
{{- if and .Values.minio.local_setup .Values.ingress.minioHost }}
- {{ .Values.ingress.minioHost | quote }}
{{- end }}
{{- if and .Values.rabbitmq.local_setup .Values.ingress.rabbitmqHost }}
- {{ .Values.ingress.rabbitmqHost | quote }}
{{- end }}
issuerRef:
name: {{ .Release.Name }}-cert-issuer
secretName: {{ .Release.Name }}-ssl-cert
{{- end}}

View File

@ -1,66 +0,0 @@
{{- if empty .Values.external_secrets.app_env_existingSecret}}
apiVersion: v1
kind: Secret
type: Opaque
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-app-secrets
stringData:
SECRET_KEY: {{ .Values.env.secret_key | default "60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5" | quote }}
{{- if .Values.redis.local_setup }}
REDIS_URL: "redis://{{ .Release.Name }}-redis.{{ .Release.Namespace }}.svc.{{ .Values.env.default_cluster_domain | default "cluster.local" }}:6379/"
{{- else }}
REDIS_URL: {{ .Values.env.remote_redis_url | default "" | quote }}
{{- end }}
{{- if .Values.postgres.local_setup }}
DATABASE_URL: "postgresql://{{ .Values.env.pgdb_username }}:{{ .Values.env.pgdb_password }}@{{ .Release.Name }}-pgdb.{{ .Release.Namespace }}.svc.{{ .Values.env.default_cluster_domain | default "cluster.local" }}/{{ .Values.env.pgdb_name }}"
{{- else if .Values.env.pgdb_remote_url }}
DATABASE_URL: {{ .Values.env.pgdb_remote_url}}
{{- else }}
DATABASE_URL: ""
{{ end }}
{{- if .Values.rabbitmq.local_setup }}
AMQP_URL: "amqp://{{ .Values.rabbitmq.default_user}}:{{ .Values.rabbitmq.default_password}}@{{ .Release.Name }}-rabbitmq.{{ .Release.Namespace }}.svc.{{ .Values.env.default_cluster_domain | default "cluster.local" }}/"
{{- else if .Values.rabbitmq.external_rabbitmq_url }}
AMQP_URL: {{ .Values.rabbitmq.external_rabbitmq_url}}
{{- else }}
AMQP_URL: ""
{{ end }}
---
{{- end }}
apiVersion: v1
kind: ConfigMap
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-app-vars
data:
SENTRY_DSN: {{ .Values.env.sentry_dsn | default "" | quote}}
SENTRY_ENVIRONMENT: {{ .Values.env.sentry_environment | default "" | quote}}
DEBUG: "0"
DOCKERIZED: "1"
GUNICORN_WORKERS: "1"
MINIO_ENDPOINT_SSL: {{ .Values.minio.env.minio_endpoint_ssl | default false | ternary "1" "0" | quote }}
API_KEY_RATE_LIMIT: {{ .Values.env.api_key_rate_limit | default "60/minute" | quote }}
{{- if .Values.ingress.appHost }}
WEB_URL: "http://{{ .Values.ingress.appHost }}"
{{- else }}
WEB_URL: ""
{{- end }}
{{- if eq .Values.env.cors_allowed_origins "*"}}
CORS_ALLOWED_ORIGINS: "*"
{{- else if and .Values.ingress.appHost .Values.env.cors_allowed_origins }}
CORS_ALLOWED_ORIGINS: "http://{{ .Values.ingress.appHost }},https://{{ .Values.ingress.appHost }},{{ .Values.env.cors_allowed_origins }}"
{{- else if .Values.env.cors_allowed_origins }}
CORS_ALLOWED_ORIGINS: "{{ .Values.env.cors_allowed_origins }}"
{{- else if .Values.ingress.appHost}}
CORS_ALLOWED_ORIGINS: "http://{{ .Values.ingress.appHost }},https://{{ .Values.ingress.appHost }}"
{{- else }}
CORS_ALLOWED_ORIGINS: ""
{{- end }}

View File

@ -1,26 +0,0 @@
{{- if empty .Values.external_secrets.doc_store_existingSecret }}
apiVersion: v1
kind: Secret
type: Opaque
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-doc-store-secrets
stringData:
FILE_SIZE_LIMIT: {{ .Values.env.doc_upload_size_limit | default 5242880 | quote }}
AWS_S3_BUCKET_NAME: {{ .Values.env.docstore_bucket | default "" | quote }}
{{- if .Values.minio.local_setup }}
USE_MINIO: "1"
MINIO_ROOT_USER: {{ .Values.minio.root_user | default "admin" | quote }}
MINIO_ROOT_PASSWORD: {{ .Values.minio.root_password | default "password" | quote}}
AWS_ACCESS_KEY_ID: {{ .Values.minio.root_user | default "admin" | quote }}
AWS_SECRET_ACCESS_KEY: {{ .Values.minio.root_password | default "password" | quote }}
AWS_S3_ENDPOINT_URL: http://{{ .Release.Name }}-minio:9000
{{- else }}
USE_MINIO: "0"
AWS_ACCESS_KEY_ID: {{ .Values.env.aws_access_key | default "" | quote }}
AWS_SECRET_ACCESS_KEY: {{ .Values.env.aws_secret_access_key | default "" | quote }}
AWS_S3_ENDPOINT_URL: {{ .Values.env.aws_s3_endpoint_url | quote }}
AWS_REGION: {{ .Values.env.aws_region | default "" | quote }}
{{- end }}
---
{{- end }}

View File

@ -1,12 +0,0 @@
{{- if .Values.dockerRegistry.enabled }}
apiVersion: v1
kind: Secret
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-docker-registry-credentials
data:
.dockerconfigjson: {{ include "imagePullSecret" .}}
type: kubernetes.io/dockerconfigjson
{{- end }}

View File

@ -1,28 +0,0 @@
{{- if empty .Values.external_secrets.live_env_existingSecret}}
apiVersion: v1
kind: Secret
type: Opaque
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-live-secrets
stringData:
{{- if .Values.redis.local_setup }}
REDIS_URL: "redis://{{ .Release.Name }}-redis.{{ .Release.Namespace }}.svc.cluster.local:6379/"
{{- else }}
REDIS_URL: {{ .Values.env.remote_redis_url | default "" | quote }}
{{- end }}
---
{{- end }}
apiVersion: v1
kind: ConfigMap
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-live-vars
data:
API_BASE_URL: "http://{{ .Release.Name }}-api.{{ .Release.Namespace }}.svc.cluster.local:8000/"
LIVE_SENTRY_DSN: {{ .Values.env.live_sentry_dsn | default "" | quote }}
LIVE_SENTRY_ENVIRONMENT: {{ .Values.env.live_sentry_environment | default "" | quote }}
LIVE_SENTRY_TRACES_SAMPLE_RATE: {{ .Values.env.live_sentry_traces_sample_rate | default "" | quote }}
LIVE_BASE_PATH: "/live"
---

View File

@ -1,14 +0,0 @@
{{- if and .Values.postgres.local_setup (empty .Values.external_secrets.pgdb_existingSecret) }}
apiVersion: v1
kind: Secret
type: Opaque
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-pgdb-secrets
stringData:
POSTGRES_PASSWORD: {{ .Values.env.pgdb_password | default "plane" | quote }}
POSTGRES_DB: {{ .Values.env.pgdb_name | default "plane" | quote }}
POSTGRES_USER: {{ .Values.env.pgdb_username | default "plane" | quote }}
---
{{- end }}

View File

@ -1,14 +0,0 @@
{{- if and .Values.rabbitmq.local_setup (empty .Values.external_secrets.rabbitmq_existingSecret) }}
apiVersion: v1
kind: Secret
type: Opaque
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-rabbitmq-secrets
stringData:
RABBITMQ_DEFAULT_USER: {{ .Values.rabbitmq.default_user | default "plane" | quote }}
RABBITMQ_DEFAULT_PASS: {{ .Values.rabbitmq.default_password | default "plane" |quote }}
---
{{- end }}

View File

@ -1,121 +0,0 @@
{{- if and .Values.ingress.enabled .Values.ingress.appHost }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-ingress
{{- if gt (len .Values.ingress.ingress_annotations) 0 }}
annotations:
{{- range $key, $value := .Values.ingress.ingress_annotations }}
{{ $key }}: {{ $value | quote }}
{{- end }}
{{- end }}
spec:
ingressClassName: {{ .Values.ingress.ingressClass | quote }}
rules:
- host: {{ .Values.ingress.appHost }}
http:
paths:
- backend:
service:
port:
number: 3000
name: {{ .Release.Name }}-web
path: /
pathType: Prefix
- backend:
service:
port:
number: 8000
name: {{ .Release.Name }}-api
path: /api
pathType: Prefix
- backend:
service:
port:
number: 8000
name: {{ .Release.Name }}-api
path: /auth
pathType: Prefix
- backend:
service:
port:
number: 3000
name: {{ .Release.Name }}-live
path: /live/
pathType: Prefix
- backend:
service:
port:
number: 3000
name: {{ .Release.Name }}-space
path: /spaces
pathType: Prefix
- backend:
service:
port:
number: 3000
name: {{ .Release.Name }}-admin
path: /god-mode
pathType: Prefix
{{- if and .Values.minio.local_setup .Values.env.docstore_bucket }}
- backend:
service:
port:
number: 9000
name: {{ .Release.Name }}-minio
path: /{{ .Values.env.docstore_bucket }}
pathType: Prefix
{{- end }}
{{- if and .Values.minio.local_setup .Values.ingress.minioHost }}
- host: {{ .Values.ingress.minioHost }}
http:
paths:
- backend:
service:
port:
number: 9090
name: {{ .Release.Name }}-minio
path: /
pathType: Prefix
{{- end }}
{{- if and .Values.rabbitmq.local_setup .Values.ingress.rabbitmqHost }}
- host: {{ .Values.ingress.rabbitmqHost }}
http:
paths:
- backend:
service:
port:
number: 15672
name: {{ .Release.Name }}-rabbitmq
path: /
pathType: Prefix
{{- end }}
{{- if .Values.ssl.tls_secret_name }}
tls:
- hosts:
- {{ .Values.ingress.appHost | quote }}
{{- if and .Values.minio.local_setup .Values.ingress.minioHost }}
- {{ .Values.ingress.minioHost | quote }}
{{- end }}
{{- if and .Values.rabbitmq.local_setup .Values.ingress.rabbitmqHost }}
- {{ .Values.ingress.rabbitmqHost | quote }}
{{- end }}
secretName: {{ .Values.ssl.tls_secret_name }}
{{- else if and .Values.ssl.generateCerts .Values.ssl.createIssuer }}
tls:
- hosts:
- {{ .Values.ingress.appHost | quote }}
{{- if and .Values.minio.local_setup .Values.ingress.minioHost }}
- {{ .Values.ingress.minioHost | quote }}
{{- end }}
{{- if and .Values.rabbitmq.local_setup .Values.ingress.rabbitmqHost }}
- {{ .Values.ingress.rabbitmqHost | quote }}
{{- end }}
secretName: {{ .Release.Name }}-ssl-cert
{{- end }}
{{- end }}

View File

@ -1,10 +0,0 @@
apiVersion: v1
automountServiceAccountToken: true
kind: ServiceAccount
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-srv-account
{{- if .Values.dockerRegistry.enabled }}
imagePullSecrets:
- name: {{ .Release.Name }}-docker-registry-credentials
{{- end}}

View File

@ -1,62 +0,0 @@
apiVersion: v1
kind: Service
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-admin
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-admin
spec:
{{- if not .Values.admin.assign_cluster_ip }}
clusterIP: None
{{- end }}
ports:
- name: admin-3000
port: 3000
protocol: TCP
targetPort: 3000
selector:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-admin
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-admin-wl
spec:
replicas: {{ .Values.admin.replicas | default 1 }}
selector:
matchLabels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-admin
template:
metadata:
namespace: {{ .Release.Namespace }}
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-admin
annotations:
timestamp: {{ now | quote }}
spec:
containers:
- name: {{ .Release.Name }}-admin
imagePullPolicy: {{ .Values.admin.pullPolicy | default "Always" }}
image: {{ .Values.admin.image | default "artifacts.plane.so/makeplane/plane-frontend" }}:{{ .Values.planeVersion }}
stdin: true
tty: true
resources:
requests:
memory: {{ .Values.admin.memoryRequest | default "50Mi" | quote }}
cpu: {{ .Values.admin.cpuRequest | default "50m" | quote }}
limits:
memory: {{ .Values.admin.memoryLimit | default "1000Mi" | quote }}
cpu: {{ .Values.admin.cpuLimit | default "500m" | quote}}
command:
- node
args:
- admin/server.js
- admin
serviceAccount: {{ .Release.Name }}-srv-account
serviceAccountName: {{ .Release.Name }}-srv-account
---

View File

@ -1,79 +0,0 @@
apiVersion: v1
kind: Service
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-api
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-api
spec:
{{- if not .Values.api.assign_cluster_ip }}
clusterIP: None
{{- end }}
ports:
- name: api-8000
port: 8000
protocol: TCP
targetPort: 8000
selector:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-api
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-api-wl
spec:
replicas: {{ .Values.api.replicas | default 1}}
selector:
matchLabels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-api
template:
metadata:
namespace: {{ .Release.Namespace }}
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-api
annotations:
timestamp: {{ now | quote }}
spec:
containers:
- name: {{ .Release.Name }}-api
imagePullPolicy: {{ .Values.api.pullPolicy | default "Always" }}
image: {{ .Values.api.image | default "artifacts.plane.so/makeplane/plane-backend" }}:{{ .Values.planeVersion }}
stdin: true
tty: true
resources:
requests:
memory: {{ .Values.api.memoryRequest | default "50Mi" | quote }}
cpu: {{ .Values.api.cpuRequest | default "50m" | quote }}
limits:
memory: {{ .Values.api.memoryLimit | default "1000Mi" | quote }}
cpu: {{ .Values.api.cpuLimit | default "500m" | quote}}
command:
- ./bin/docker-entrypoint-api.sh
envFrom:
- configMapRef:
name: {{ .Release.Name }}-app-vars
optional: false
- secretRef:
name: {{ if not (empty .Values.external_secrets.app_env_existingSecret) }}{{ .Values.external_secrets.app_env_existingSecret }}{{ else }}{{ .Release.Name }}-app-secrets{{ end }}
optional: false
- secretRef:
name: {{ if not (empty .Values.external_secrets.doc_store_existingSecret) }}{{ .Values.external_secrets.doc_store_existingSecret }}{{ else }}{{ .Release.Name }}-doc-store-secrets{{ end }}
optional: false
readinessProbe:
failureThreshold: 30
httpGet:
path: /
port: 8000
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
serviceAccount: {{ .Release.Name }}-srv-account
serviceAccountName: {{ .Release.Name }}-srv-account
---

View File

@ -1,49 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-beat-worker-wl
spec:
replicas: {{ .Values.beatworker.replicas | default 1 }}
selector:
matchLabels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-beat-worker
template:
metadata:
namespace: {{ .Release.Namespace }}
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-beat-worker
annotations:
timestamp: {{ now | quote }}
spec:
containers:
- name: {{ .Release.Name }}-beat-worker
imagePullPolicy: {{ .Values.beatworker.pullPolicy | default "Always" }}
image: {{ .Values.beatworker.image | default "artifacts.plane.so/makeplane/plane-backend" }}:{{ .Values.planeVersion }}
stdin: true
tty: true
resources:
requests:
memory: {{ .Values.beatworker.memoryRequest | default "50Mi" | quote }}
cpu: {{ .Values.beatworker.cpuRequest | default "50m" | quote }}
limits:
memory: {{ .Values.beatworker.memoryLimit | default "1000Mi" | quote }}
cpu: {{ .Values.beatworker.cpuLimit | default "500m" | quote}}
command:
- ./bin/docker-entrypoint-beat.sh
envFrom:
- configMapRef:
name: {{ .Release.Name }}-app-vars
optional: false
- secretRef:
name: {{ if not (empty .Values.external_secrets.app_env_existingSecret) }}{{ .Values.external_secrets.app_env_existingSecret }}{{ else }}{{ .Release.Name }}-app-secrets{{ end }}
optional: false
- secretRef:
name: {{ if not (empty .Values.external_secrets.doc_store_existingSecret) }}{{ .Values.external_secrets.doc_store_existingSecret }}{{ else }}{{ .Release.Name }}-doc-store-secrets{{ end }}
optional: false
serviceAccount: {{ .Release.Name }}-srv-account
serviceAccountName: {{ .Release.Name }}-srv-account
---

View File

@ -1,68 +0,0 @@
apiVersion: v1
kind: Service
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-live
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-live
spec:
{{- if not .Values.live.assign_cluster_ip }}
clusterIP: None
{{- end }}
ports:
- name: live-3000
port: 3000
protocol: TCP
targetPort: 3000
selector:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-live
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-live-wl
spec:
replicas: {{ .Values.live.replicas | default 1}}
selector:
matchLabels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-live
template:
metadata:
namespace: {{ .Release.Namespace }}
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-live
annotations:
timestamp: {{ now | quote }}
spec:
containers:
- name: {{ .Release.Name }}-live
imagePullPolicy: {{ .Values.live.pullPolicy | default "Always" }}
image: {{ .Values.live.image | default "artifacts.plane.so/makeplane/plane-live" }}:{{ .Values.planeVersion }}
stdin: true
tty: true
resources:
requests:
memory: {{ .Values.live.memoryRequest | default "50Mi" | quote }}
cpu: {{ .Values.live.cpuRequest | default "50m" | quote }}
limits:
memory: {{ .Values.live.memoryLimit | default "1000Mi" | quote }}
cpu: {{ .Values.live.cpuLimit | default "500m" | quote}}
command:
- node
args:
- live/dist/server.js
envFrom:
- configMapRef:
name: {{ .Release.Name }}-live-vars
optional: false
- secretRef:
name: {{ if not (empty .Values.external_secrets.live_env_existingSecret) }}{{ .Values.external_secrets.live_env_existingSecret }}{{ else }}{{ .Release.Name }}-live-secrets{{ end }}
optional: false
serviceAccount: {{ .Release.Name }}-srv-account
serviceAccountName: {{ .Release.Name }}-srv-account
---

View File

@ -1,35 +0,0 @@
apiVersion: batch/v1
kind: Job
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-api-migrate-{{ .Release.Revision }}
spec:
backoffLimit: 3
template:
metadata:
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-api-migrate
annotations:
timestamp: {{ now | quote }}
spec:
containers:
- name: {{ .Release.Name }}-api-migrate
image: {{ .Values.api.image | default "artifacts.plane.so/makeplane/plane-backend" }}:{{ .Values.planeVersion }}
command:
- ./bin/docker-entrypoint-migrator.sh
imagePullPolicy: {{ .Values.api.pullPolicy | default "Always" }}
envFrom:
- configMapRef:
name: {{ .Release.Name }}-app-vars
optional: false
- secretRef:
name: {{ if not (empty .Values.external_secrets.app_env_existingSecret) }}{{ .Values.external_secrets.app_env_existingSecret }}{{ else }}{{ .Release.Name }}-app-secrets{{ end }}
optional: false
- secretRef:
name: {{ if not (empty .Values.external_secrets.doc_store_existingSecret) }}{{ .Values.external_secrets.doc_store_existingSecret }}{{ else }}{{ .Release.Name }}-doc-store-secrets{{ end }}
optional: false
restartPolicy: OnFailure
serviceAccount: {{ .Release.Name }}-srv-account
serviceAccountName: {{ .Release.Name }}-srv-account
---

View File

@ -1,118 +0,0 @@
{{- if .Values.minio.local_setup }}
apiVersion: v1
kind: Service
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-minio
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-minio
spec:
{{- if not .Values.minio.assign_cluster_ip }}
clusterIP: None
{{- end }}
ports:
- name: minio-api-9000
port: 9000
protocol: TCP
targetPort: 9000
- name: minio-console-9090
port: 9090
protocol: TCP
targetPort: 9090
selector:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-minio
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-minio-wl
spec:
selector:
matchLabels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-minio
serviceName: {{ .Release.Name }}-minio
template:
metadata:
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-minio
spec:
containers:
- image: {{ .Values.minio.image }}
imagePullPolicy: {{ .Values.minio.pullPolicy | default "IfNotPresent" }}
name: {{ .Release.Name }}-minio
stdin: true
tty: true
# command:
args:
- server
- /data
- --console-address
- :9090
envFrom:
- secretRef:
name: {{ if not (empty .Values.external_secrets.doc_store_existingSecret) }}{{ .Values.external_secrets.doc_store_existingSecret }}{{ else }}{{ .Release.Name }}-doc-store-secrets{{ end }}
optional: false
volumeMounts:
- mountPath: /data
name: pvc-{{ .Release.Name }}-minio-vol
subPath: ''
serviceAccount: {{ .Release.Name }}-srv-account
serviceAccountName: {{ .Release.Name }}-srv-account
volumeClaimTemplates:
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
namespace: {{ .Release.Namespace }}
name: pvc-{{ .Release.Name }}-minio-vol
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.minio.volumeSize | default "1Gi" | quote }}
storageClassName: {{ .Values.minio.storageClass }}
volumeMode: Filesystem
---
apiVersion: batch/v1
kind: Job
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-minio-bucket-{{ .Release.Revision }}
spec:
backoffLimit: 6
completionMode: NonIndexed
template:
metadata:
namespace: {{ .Release.Namespace }}
spec:
restartPolicy: OnFailure
initContainers:
- name: init
image: busybox
command: ['sh', '-c', "until nslookup {{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.{{ .Values.env.default_cluster_domain | default "cluster.local" }}; do echo waiting for {{ .Release.Name }}-minio; sleep 2; done"]
containers:
- command:
- /bin/sh
args:
- '-c'
- >-
/usr/bin/mc config host add plane-app-minio
http://{{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.{{ .Values.env.default_cluster_domain | default "cluster.local" }}:9000 "$AWS_ACCESS_KEY_ID" "$AWS_SECRET_ACCESS_KEY";
/usr/bin/mc mb plane-app-minio/$AWS_S3_BUCKET_NAME;
/usr/bin/mc anonymous set download plane-app-minio/$AWS_S3_BUCKET_NAME; exit 0;
envFrom:
- secretRef:
name: {{ if not (empty .Values.external_secrets.doc_store_existingSecret) }}{{ .Values.external_secrets.doc_store_existingSecret }}{{ else }}{{ .Release.Name }}-doc-store-secrets{{ end }}
optional: false
image: {{ .Values.minio.image_mc }}
imagePullPolicy: {{ .Values.minio.pullPolicy }}
name: {{ .Release.Name }}-minio-bucket
serviceAccount: {{ .Release.Name }}-srv-account
serviceAccountName: {{ .Release.Name }}-srv-account
terminationGracePeriodSeconds: 120
{{- end }}

View File

@ -1,72 +0,0 @@
{{- if .Values.postgres.local_setup }}
apiVersion: v1
kind: Service
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-pgdb
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-pgdb
spec:
{{- if not .Values.postgres.assign_cluster_ip }}
clusterIP: None
{{- end }}
ports:
- name: pg-{{ .Values.postgres.servicePort }}
port: {{ .Values.postgres.servicePort }}
protocol: TCP
targetPort: 5432
selector:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-pgdb
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-pgdb-wl
spec:
selector:
matchLabels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-pgdb
serviceName: {{ .Release.Name }}-pgdb
template:
metadata:
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-pgdb
spec:
containers:
- image: {{ .Values.postgres.image }}
imagePullPolicy: {{ .Values.postgres.pullPolicy | default "IfNotPresent" }}
name: {{ .Release.Name }}-pgdb
stdin: true
tty: true
env:
- name: PGDATA
value: /var/lib/postgresql/data/plane
envFrom:
- secretRef:
name: {{ if not (empty .Values.external_secrets.pgdb_existingSecret) }}{{ .Values.external_secrets.pgdb_existingSecret }}{{ else }}{{ .Release.Name }}-pgdb-secrets{{ end }}
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: pvc-{{ .Release.Name }}-pgdb-vol
subPath: ''
serviceAccount: {{ .Release.Name }}-srv-account
serviceAccountName: {{ .Release.Name }}-srv-account
volumeClaimTemplates:
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
namespace: {{ .Release.Namespace }}
name: pvc-{{ .Release.Name }}-pgdb-vol
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.postgres.volumeSize | default "1Gi" | quote }}
storageClassName: {{ .Values.postgres.storageClass }}
volumeMode: Filesystem
{{- end }}

View File

@ -1,73 +0,0 @@
{{- if .Values.rabbitmq.local_setup }}
apiVersion: v1
kind: Service
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-rabbitmq
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-rabbitmq
spec:
{{- if not .Values.rabbitmq.assign_cluster_ip }}
clusterIP: None
{{- end }}
ports:
- name: rabbitmq-{{ .Values.rabbitmq.servicePort }}
port: {{ .Values.rabbitmq.servicePort }}
protocol: TCP
targetPort: 5672
- name: rabbitmq-mgmt-{{ .Values.rabbitmq.managementPort }}
port: {{ .Values.rabbitmq.managementPort }}
protocol: TCP
targetPort: 15672
selector:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-rabbitmq
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-rabbitmq-wl
spec:
selector:
matchLabels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-rabbitmq
serviceName: {{ .Release.Name }}-rabbitmq
template:
metadata:
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-rabbitmq
spec:
containers:
- image: {{ .Values.rabbitmq.image }}
imagePullPolicy: {{ .Values.rabbitmq.pullPolicy | default "IfNotPresent" | quote }}
name: {{ .Release.Name }}-rabbitmq
stdin: true
tty: true
envFrom:
- secretRef:
name: {{ if not (empty .Values.external_secrets.rabbitmq_existingSecret) }}{{ .Values.external_secrets.rabbitmq_existingSecret }}{{ else }}{{ .Release.Name }}-rabbitmq-secrets{{ end }}
optional: false
volumeMounts:
- mountPath: /var/lib/rabbitmq
name: pvc-{{ .Release.Name }}-rabbitmq-vol
subPath: ''
serviceAccount: {{ .Release.Name }}-srv-account
serviceAccountName: {{ .Release.Name }}-srv-account
volumeClaimTemplates:
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
namespace: {{ .Release.Namespace }}
name: pvc-{{ .Release.Name }}-rabbitmq-vol
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.rabbitmq.volumeSize | default "100Mi" | quote }}
storageClassName: {{ .Values.rabbitmq.storageClass }}
volumeMode: Filesystem
{{- end }}

View File

@ -1,68 +0,0 @@
{{- if .Values.redis.local_setup }}
apiVersion: v1
kind: Service
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-redis
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-redis
spec:
{{- if not .Values.redis.assign_cluster_ip }}
clusterIP: None
{{- end }}
ports:
- name: redis-{{ .Values.redis.servicePort }}
port: {{ .Values.redis.servicePort }}
protocol: TCP
targetPort: 6379
selector:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-redis
---
# REDIS WORKLOAD
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-redis-wl
spec:
selector:
matchLabels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-redis
serviceName: {{ .Release.Name }}-redis
template:
metadata:
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-redis
spec:
containers:
- image: {{ .Values.redis.image }}
imagePullPolicy: {{ .Values.redis.pullPolicy | default "IfNotPresent" }}
name: {{ .Release.Name }}-redis
stdin: true
tty: true
volumeMounts:
- mountPath: /data
name: pvc-{{ .Release.Name }}-redis-vol
subPath: ''
serviceAccount: {{ .Release.Name }}-srv-account
serviceAccountName: {{ .Release.Name }}-srv-account
volumeClaimTemplates:
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
namespace: {{ .Release.Namespace }}
name: pvc-{{ .Release.Name }}-redis-vol
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.redis.volumeSize | default "100Mi" | quote }}
storageClassName: {{ .Values.redis.storageClass }}
volumeMode: Filesystem
{{- end }}

View File

@ -1,62 +0,0 @@
apiVersion: v1
kind: Service
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-space
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-space
spec:
{{- if not .Values.space.assign_cluster_ip }}
clusterIP: None
{{- end }}
ports:
- name: space-3000
port: 3000
protocol: TCP
targetPort: 3000
selector:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-space
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-space-wl
spec:
replicas: {{ .Values.space.replicas | default 1 }}
selector:
matchLabels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-space
template:
metadata:
namespace: {{ .Release.Namespace }}
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-space
annotations:
timestamp: {{ now | quote }}
spec:
containers:
- name: {{ .Release.Name }}-space
imagePullPolicy: {{ .Values.space.pullPolicy | default "Always" }}
image: {{ .Values.space.image | default "artifacts.plane.so/makeplane/plane-space" }}:{{ .Values.planeVersion }}
stdin: true
tty: true
resources:
requests:
memory: {{ .Values.space.memoryRequest | default "50Mi" | quote }}
cpu: {{ .Values.space.cpuRequest | default "50m" | quote }}
limits:
memory: {{ .Values.space.memoryLimit | default "1000Mi" | quote }}
cpu: {{ .Values.space.cpuLimit | default "500m" | quote}}
command:
- node
args:
- space/server.js
- space
serviceAccount: {{ .Release.Name }}-srv-account
serviceAccountName: {{ .Release.Name }}-srv-account
---

View File

@ -1,62 +0,0 @@
apiVersion: v1
kind: Service
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-web
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-web
spec:
{{- if not .Values.web.assign_cluster_ip }}
clusterIP: None
{{- end }}
ports:
- name: web-3000
port: 3000
protocol: TCP
targetPort: 3000
selector:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-web
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-web-wl
spec:
replicas: {{ .Values.web.replicas | default 1 }}
selector:
matchLabels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-web
template:
metadata:
namespace: {{ .Release.Namespace }}
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-web
annotations:
timestamp: {{ now | quote }}
spec:
containers:
- name: {{ .Release.Name }}-web
imagePullPolicy: {{ .Values.web.pullPolicy | default "Always" }}
image: {{ .Values.web.image | default "artifacts.plane.so/makeplane/plane-frontend" }}:{{ .Values.planeVersion }}
stdin: true
tty: true
resources:
requests:
memory: {{ .Values.web.memoryRequest | default "50Mi" | quote }}
cpu: {{ .Values.web.cpuRequest | default "50m" | quote }}
limits:
memory: {{ .Values.web.memoryLimit | default "1000Mi" | quote }}
cpu: {{ .Values.web.cpuLimit | default "500m" | quote}}
command:
- node
args:
- web/server.js
- web
serviceAccount: {{ .Release.Name }}-srv-account
serviceAccountName: {{ .Release.Name }}-srv-account
---

View File

@ -1,48 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-worker-wl
spec:
replicas: {{ .Values.worker.replicas | default 1 }}
selector:
matchLabels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-worker
template:
metadata:
namespace: {{ .Release.Namespace }}
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-worker
annotations:
timestamp: {{ now | quote }}
spec:
containers:
- name: {{ .Release.Name }}-worker
imagePullPolicy: {{ .Values.worker.pullPolicy | default "Always" }}
image: {{ .Values.worker.image | default "artifacts.plane.so/makeplane/plane-backend" }}:{{ .Values.planeVersion }}
stdin: true
tty: true
resources:
requests:
memory: {{ .Values.worker.memoryRequest | default "50Mi" | quote }}
cpu: {{ .Values.worker.cpuRequest | default "50m" | quote }}
limits:
memory: {{ .Values.worker.memoryLimit | default "1000Mi" | quote }}
cpu: {{ .Values.worker.cpuLimit | default "500m" | quote}}
command:
- ./bin/docker-entrypoint-worker.sh
envFrom:
- configMapRef:
name: {{ .Release.Name }}-app-vars
optional: false
- secretRef:
name: {{ if not (empty .Values.external_secrets.app_env_existingSecret) }}{{ .Values.external_secrets.app_env_existingSecret }}{{ else }}{{ .Release.Name }}-app-secrets{{ end }}
optional: false
- secretRef:
name: {{ if not (empty .Values.external_secrets.doc_store_existingSecret) }}{{ .Values.external_secrets.doc_store_existingSecret }}{{ else }}{{ .Release.Name }}-doc-store-secrets{{ end }}
optional: false
serviceAccount: {{ .Release.Name }}-srv-account
serviceAccountName: {{ .Release.Name }}-srv-account
---

View File

@ -1,182 +0,0 @@
planeVersion: stable
dockerRegistry:
enabled: false
host: "index.docker.io/v1/"
loginid: ""
password: ""
ingress:
enabled: true
appHost: "plane.example.com"
minioHost: ""
rabbitmqHost: ""
ingressClass: "nginx"
ingress_annotations: {"nginx.ingress.kubernetes.io/proxy-body-size": "5m"}
# SSL Configuration - Valid only if ingress.enabled is true
ssl:
tls_secret_name: "" # If you have a custom TLS secret name
# If you want to use Let's Encrypt, set createIssuer and generateCerts to true
createIssuer: false
issuer: "http" # Allowed : cloudflare, digitalocean, http
token: "" # not required for http
server: https://acme-v02.api.letsencrypt.org/directory
email: plane@example.com
generateCerts: false
redis:
local_setup: true
image: valkey/valkey:7.2.5-alpine
servicePort: 6379
storageClass: ""
volumeSize: 100Mi
pullPolicy: IfNotPresent
assign_cluster_ip: false
postgres:
local_setup: true
image: postgres:15.7-alpine
servicePort: 5432
storageClass: ""
volumeSize: 1Gi
pullPolicy: IfNotPresent
assign_cluster_ip: false
rabbitmq:
local_setup: true
image: rabbitmq:3.13.6-management-alpine
pullPolicy: IfNotPresent
servicePort: 5672
managementPort: 15672
storageClass: ""
volumeSize: 100Mi
default_user: plane
default_password: plane
external_rabbitmq_url: ''
assign_cluster_ip: false
minio:
image: minio/minio:latest
image_mc: minio/mc:latest
local_setup: true
pullPolicy: IfNotPresent
root_password: password
root_user: admin
storageClass: ""
volumeSize: 1Gi
assign_cluster_ip: false
env:
minio_endpoint_ssl: false
web:
replicas: 1
memoryLimit: 1000Mi
cpuLimit: 500m
cpuRequest: 50m
memoryRequest: 50Mi
image: artifacts.plane.so/makeplane/plane-frontend
pullPolicy: Always
assign_cluster_ip: false
space:
replicas: 1
memoryLimit: 1000Mi
cpuLimit: 500m
cpuRequest: 50m
memoryRequest: 50Mi
image: artifacts.plane.so/makeplane/plane-space
pullPolicy: Always
assign_cluster_ip: false
admin:
replicas: 1
memoryLimit: 1000Mi
cpuLimit: 500m
cpuRequest: 50m
memoryRequest: 50Mi
image: artifacts.plane.so/makeplane/plane-admin
pullPolicy: Always
assign_cluster_ip: false
live:
replicas: 1
memoryLimit: 1000Mi
cpuLimit: 500m
cpuRequest: 50m
memoryRequest: 50Mi
image: artifacts.plane.so/makeplane/plane-live
pullPolicy: Always
assign_cluster_ip: false
api:
replicas: 1
memoryLimit: 1000Mi
cpuLimit: 500m
cpuRequest: 50m
memoryRequest: 50Mi
image: artifacts.plane.so/makeplane/plane-backend
pullPolicy: Always
assign_cluster_ip: false
worker:
replicas: 1
memoryLimit: 1000Mi
cpuLimit: 500m
cpuRequest: 50m
memoryRequest: 50Mi
image: artifacts.plane.so/makeplane/plane-backend
pullPolicy: Always
beatworker:
replicas: 1
memoryLimit: 1000Mi
cpuLimit: 500m
cpuRequest: 50m
memoryRequest: 50Mi
image: artifacts.plane.so/makeplane/plane-backend
pullPolicy: Always
external_secrets:
# Name of the existing Kubernetes Secret resource; see README for more details
rabbitmq_existingSecret: ''
pgdb_existingSecret: ''
doc_store_existingSecret: ''
app_env_existingSecret: ''
live_env_existingSecret: ''
env:
# NEXT_PUBLIC_DEPLOY_URL: ""
# REDIS
remote_redis_url: "" #INCASE OF REMOTE REDIS ONLY
# POSTGRES DB VALUES
pgdb_username: plane
pgdb_password: plane
pgdb_name: plane
pgdb_remote_url: "" #INCASE OF REMOTE PG DB URL ONLY
# DATA STORE
docstore_bucket: "uploads"
doc_upload_size_limit: "5242880" # 5MB
# REQUIRED IF MINIO LOCAL SETUP IS FALSE
aws_access_key: ""
aws_secret_access_key: ""
aws_region: ""
aws_s3_endpoint_url: ""
secret_key: "60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5"
sentry_dsn: ""
sentry_environment: ""
cors_allowed_origins: ""
default_cluster_domain: cluster.local
live_sentry_dsn: ""
live_sentry_environment: ""
live_sentry_traces_sample_rate: ""
api_key_rate_limit: "60/minute"

View File

@ -1,2 +0,0 @@
enabled: true
hostname: plane.dvirlabs.com

View File

@ -1,20 +0,0 @@
enabled: true
app: plane
# Prometheus usage:
# targets:
# - plane-app.plane-ce.svc.cluster.local:80
# scheme: http
# External HTTP check:
external_check:
url: https://plane.dvirlabs.com
expected_codes:
"502": critical
"404": warning
"1033": critical
uptime_kuma:
enabled: true
url: https://plane.dvirlabs.com
tag: dev-tools

View File

@ -1,42 +0,0 @@
planeVersion: stable
ingress:
ingressClass: traefik
appHost: plane.dvirlabs.com
postgres:
storageClass: nfs-client
volumeSize: 20Gi
redis:
storageClass: nfs-client
volumeSize: 1Gi
rabbitmq:
storageClass: nfs-client
volumeSize: 500Mi
minio:
storageClass: nfs-client
volumeSize: 10Gi
env:
pgdb_username: plane
pgdb_password: plane
pgdb_name: plane
docstore_bucket: uploads
admin:
image: docker.io/makeplane/plane-admin
api:
image: docker.io/makeplane/plane-api
web:
image: docker.io/makeplane/plane-frontend
space:
image: docker.io/makeplane/plane-space
live:
image: docker.io/makeplane/plane-live