diff --git a/docs/self-hosting/govern/environment-variables.md b/docs/self-hosting/govern/environment-variables.md
index 05229b8..36a78d6 100644
--- a/docs/self-hosting/govern/environment-variables.md
+++ b/docs/self-hosting/govern/environment-variables.md
@@ -77,18 +77,16 @@ This is where you'll make all configuration changes. Remember to restart the ins
### Database settings
-| Variable | Description | Default Value |
-| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |
-| **PGHOST** | Hostname or IP address of your PostgreSQL server. | plane-db |
-| **PGDATABASE** | Name of the PostgreSQL database Plane will use. | plane |
-| **POSTGRES_USER** | Username for PostgreSQL authentication. | plane |
-| **POSTGRES_PASSWORD** | Password for PostgreSQL authentication. **Critical:** Use a strong, unique password here. | plane |
-| **POSTGRES_DB** | Same as PGDATABASE - the name of the PostgreSQL database. | plane |
-| **POSTGRES_PORT** | TCP port your PostgreSQL server is listening on. | 5432 |
-| **PGDATA** | Directory path where PostgreSQL data is stored. Only relevant if you're managing PostgreSQL within the same container/system. | /var/lib/postgresql/data |
-| **DATABASE_URL** | Full connection string for PostgreSQL. If provided, this takes precedence over individual connection parameters. Format: `postgresql://username:password@host:port/dbname` | |
-| **FOLLOWER_POSTGRES_URI** | Connection string for a PostgreSQL read replica. Used for read-heavy operations to reduce load on the primary database. | Same as DATABASE_URL |
-| **PLANE_PI_DATABASE_URL** | Connection string for the Plane Intelligence database. A separate database used by the PI service. | postgresql://plane:plane@plane-db/plane_pi |
+| Variable | Description | Default Value |
+| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
+| **PGHOST** | Hostname or IP address of your PostgreSQL server. | plane-db |
+| **PGDATABASE** | Name of the PostgreSQL database Plane will use. | plane |
+| **POSTGRES_USER** | Username for PostgreSQL authentication. | plane |
+| **POSTGRES_PASSWORD** | Password for PostgreSQL authentication. **Critical:** Use a strong, unique password here. | plane |
+| **POSTGRES_DB** | Same as PGDATABASE - the name of the PostgreSQL database. | plane |
+| **POSTGRES_PORT** | TCP port your PostgreSQL server is listening on. | 5432 |
+| **PGDATA** | Directory path where PostgreSQL data is stored. Only relevant if you're managing PostgreSQL within the same container/system. | /var/lib/postgresql/data |
+| **DATABASE_URL** | Full connection string for PostgreSQL. If provided, this takes precedence over individual connection parameters. Format: `postgresql://username:password@host:port/dbname` | |
### Redis settings
@@ -164,14 +162,13 @@ This is where you'll make all configuration changes. Remember to restart the ins
### OpenSearch
-| Variable | Description | Default Value |
-| --------------------------- | --------------------------------------------------------------- | ------------------------------------ |
-| **OPENSEARCH_ENABLED** | Enable OpenSearch integration | 1 |
-| **OPENSEARCH_URL** | OpenSearch endpoint URL | https://opensearch.example.com:9200/ |
-| **OPENSEARCH_USERNAME** | Authentication username | admin |
-| **OPENSEARCH_PASSWORD** | Authentication password | your-secure-password |
-| **OPENSEARCH_INDEX_PREFIX** | Prefix for all index names (useful for multi-tenant setups) | (empty) |
-| **OPENSEARCH_ML_MODEL_ID** | OpenSearch ML model ID used for embedding-based search features | (empty) |
+| Variable | Description | Default Value |
+| --------------------------- | ----------------------------------------------------------- | ------------------------------------ |
+| **OPENSEARCH_ENABLED** | Enable OpenSearch integration | 1 |
+| **OPENSEARCH_URL** | OpenSearch endpoint URL | https://opensearch.example.com:9200/ |
+| **OPENSEARCH_USERNAME** | Authentication username | admin |
+| **OPENSEARCH_PASSWORD** | Authentication password | your-secure-password |
+| **OPENSEARCH_INDEX_PREFIX** | Prefix for all index names (useful for multi-tenant setups) | (empty) |
### Plane AI
@@ -186,6 +183,17 @@ To start Plane AI services, set each replica count to `1`:
| **PI_WORKER_REPLICAS** | Plane AI Worker replica count | Yes |
| **PI_MIGRATOR_REPLICAS** | Plane AI Migrator replica count | Yes |
+#### Database settings
+
+::: info Plane AI database
+Plane AI uses a separate PostgreSQL database. Create a new database (e.g. `plane_pi`) on your PostgreSQL server, then set **PLANE_PI_DATABASE_URL** to its connection string. Example: `postgresql://user:password@host:5432/plane_pi`
+:::
+
+| Variable | Description | Default Value |
+| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |
+| **PLANE_PI_DATABASE_URL** | Connection string for the Plane AI database. A separate database used by the PI service. | postgresql://plane:plane@plane-db/plane_pi |
+| **FOLLOWER_POSTGRES_URI** | Connection string for a Plane PostgreSQL DB read replica. Used for read-heavy operations to reduce load on the primary database. | Same as DATABASE_URL |
+
#### LLM provider API keys
Plane AI supports multiple LLM providers. Configure one or more by adding their API keys.
diff --git a/docs/self-hosting/methods/install-methods-commercial/kubernetes.md b/docs/self-hosting/methods/install-methods-commercial/kubernetes.md
index 0253f84..b2429f0 100644
--- a/docs/self-hosting/methods/install-methods-commercial/kubernetes.md
+++ b/docs/self-hosting/methods/install-methods-commercial/kubernetes.md
@@ -437,27 +437,32 @@ airgapped:
#### Plane AI deployment
-| Setting | Default | Required | Description |
-| -------------------------------- | :----------------------------------------------: | :------: | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| services.pi.enabled | false | No | Set to `true` to enable the Plane AI service and its API, worker, beat, and migrator workloads. |
-| services.pi.replicas | 1 | Yes | Number of replicas for the Plane AI API deployment. It must be >=1. |
-| services.pi.memoryLimit | 1000Mi | | Memory limit for the Plane AI API deployment. |
-| services.pi.cpuLimit | 500m | | CPU limit for the Plane AI API deployment. |
-| services.pi.memoryRequest | 50Mi | | Memory request for the Plane AI API deployment. |
-| services.pi.cpuRequest | 50m | | CPU request for the Plane AI API deployment. |
-| services.pi.image | artifacts.plane.so/makeplane/plane-pi-commercial | | Docker image for the Plane AI service. |
-| services.pi.pullPolicy | Always | | Image pull policy for the Plane AI deployment. |
-| services.pi.assign_cluster_ip | false | | Set it to `true` if you want to assign `ClusterIP` to the Plane AI API service. |
-| services.pi.nodeSelector | {} | | Node selector for the Plane AI API deployment. |
-| services.pi.tolerations | [] | | Tolerations for the Plane AI API deployment. |
-| services.pi.affinity | {} | | Affinity rules for the Plane AI API deployment. |
-| services.pi.labels | {} | | Custom labels to add to the Plane AI API deployment. |
-| services.pi.annotations | {} | | Custom annotations to add to the Plane AI API deployment. |
-| env.pg_pi_db_name | plane_pi | | PostgreSQL database name used by Plane AI when `postgres.local_setup=true`. |
-| env.pg_pi_db_remote_url | "" | | PostgreSQL connection URL for Plane AI when using a remote database. Required when `postgres.local_setup=false` and Plane AI is enabled. |
-| env.pi_envs.internal_secret | tyfvfqvBJAgpm9bzvf3r4urJer0Ehfdubk | | Internal secret used by Plane AI for OAuth and internal APIs. |
-| env.pi_envs.plane_api_host | "" | | Override for the Plane API host URL used by Plane AI. Defaults to the license domain. |
-| env.pi_envs.cors_allowed_origins | "" | | CORS allowed origins for Plane AI API. Defaults to the license domain. |
+::: info Plane AI database
+Plane AI uses a separate PostgreSQL database. Create a new database (e.g. `plane_pi`) and connect it using `env.pg_pi_db_remote_url` in values, or **PLANE_PI_DATABASE_URL** when using `pi_api_env_existingSecret`.
+:::
+
+| Setting | Default | Required | Description |
+| --------------------------------- | :----------------------------------------------: | :------: | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| services.pi.enabled | false | No | Set to `true` to enable the Plane AI service and its API, worker, beat, and migrator workloads. |
+| services.pi.replicas | 1 | Yes | Number of replicas for the Plane AI API deployment. It must be >=1. |
+| services.pi.memoryLimit | 1000Mi | | Memory limit for the Plane AI API deployment. |
+| services.pi.cpuLimit | 500m | | CPU limit for the Plane AI API deployment. |
+| services.pi.memoryRequest | 50Mi | | Memory request for the Plane AI API deployment. |
+| services.pi.cpuRequest | 50m | | CPU request for the Plane AI API deployment. |
+| services.pi.image | artifacts.plane.so/makeplane/plane-pi-commercial | | Docker image for the Plane AI service. |
+| services.pi.pullPolicy | Always | | Image pull policy for the Plane AI deployment. |
+| services.pi.assign_cluster_ip | false | | Set it to `true` if you want to assign `ClusterIP` to the Plane AI API service. |
+| services.pi.nodeSelector | {} | | Node selector for the Plane AI API deployment. |
+| services.pi.tolerations | [] | | Tolerations for the Plane AI API deployment. |
+| services.pi.affinity | {} | | Affinity rules for the Plane AI API deployment. |
+| services.pi.labels | {} | | Custom labels to add to the Plane AI API deployment. |
+| services.pi.annotations | {} | | Custom annotations to add to the Plane AI API deployment. |
+| env.pg_pi_db_name | plane_pi | | PostgreSQL database name used by Plane AI when `postgres.local_setup=true`. |
+| env.pg_pi_db_remote_url | "" | | PostgreSQL connection URL for Plane AI when using a remote database. Required when `postgres.local_setup=false` and Plane AI is enabled. |
+| env.pi_envs.follower_postgres_uri | Same as Plane DATABASE_URL | No | Connection string for a Plane PostgreSQL DB read replica. Used for read-heavy operations to reduce load on the primary database. |
+| env.pi_envs.internal_secret | tyfvfqvBJAgpm9bzvf3r4urJer0Ehfdubk | | Internal secret used by Plane AI for OAuth and internal APIs. |
+| env.pi_envs.plane_api_host | "" | | Override for the Plane API host URL used by Plane AI. Defaults to the license domain. |
+| env.pi_envs.cors_allowed_origins | "" | | CORS allowed origins for Plane AI API. Defaults to the license domain. |
#### Plane AI Worker Deployment
@@ -659,6 +664,7 @@ To configure the external secrets for your application, you need to define speci
| | GITLAB_CLIENT_ID | Required if `services.silo.connectors.gitlab.enabled` is true | GitLab client ID | your_gitlab_client_id |
| | GITLAB_CLIENT_SECRET | Required if `services.silo.connectors.gitlab.enabled` is true | GitLab client secret key | your_gitlab_client_secret_key |
| pi_api_env_existingSecret | PLANE_PI_DATABASE_URL | Required if `services.pi.enabled=true` | PostgreSQL connection URL for Plane AI database | **k8s service example**: `postgresql://plane:plane@plane-pgdb.plane-ns.svc.cluster.local/plane_pi`
**external**: `postgresql://username:password@your-db-host:5432/plane_pi` |
+| | FOLLOWER_POSTGRES_URI | No | Connection string for a PostgreSQL read replica | Same as DATABASE_URL. Used for read-heavy operations to reduce load on the primary database. **k8s**: `postgresql://plane:plane@plane-pgdb.plane-ns.svc.cluster.local:5432/plane` |
| | AMQP_URL | Required if `services.pi.enabled=true` | RabbitMQ connection URL | **k8s service example**: `amqp://plane:plane@plane-rabbitmq.plane-ns.svc.cluster.local:5672/`
**external**: `amqp://username:password@your-rabbitmq-host:5672/` |
| | AES_SECRET_KEY | Required if `services.pi.enabled=true` | AES secret key for Plane AI | dsOdt7YrvxsTIFJ37pOaEVvLxN8KGBCr (or your own value) |
| | OPENAI_API_KEY | required if `services.pi.ai_providers.openai.enabled` is true | OpenAI API key | your_openai_api_key |
diff --git a/docs/self-hosting/methods/kubernetes.md b/docs/self-hosting/methods/kubernetes.md
index 9e42c96..d77f99a 100644
--- a/docs/self-hosting/methods/kubernetes.md
+++ b/docs/self-hosting/methods/kubernetes.md
@@ -435,27 +435,32 @@ airgapped:
#### Plane AI deployment
-| Setting | Default | Required | Description |
-| -------------------------------- | :----------------------------------------------: | :------: | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| services.pi.enabled | false | No | Set to `true` to enable the Plane AI service and its API, worker, beat, and migrator workloads. |
-| services.pi.replicas | 1 | Yes | Number of replicas for the Plane AI API deployment. It must be >=1. |
-| services.pi.memoryLimit | 1000Mi | | Memory limit for the Plane AI API deployment. |
-| services.pi.cpuLimit | 500m | | CPU limit for the Plane AI API deployment. |
-| services.pi.memoryRequest | 50Mi | | Memory request for the Plane AI API deployment. |
-| services.pi.cpuRequest | 50m | | CPU request for the Plane AI API deployment. |
-| services.pi.image | artifacts.plane.so/makeplane/plane-pi-commercial | | Docker image for the Plane AI service. |
-| services.pi.pullPolicy | Always | | Image pull policy for the Plane AI deployment. |
-| services.pi.assign_cluster_ip | false | | Set it to `true` if you want to assign `ClusterIP` to the Plane AI API service. |
-| services.pi.nodeSelector | {} | | Node selector for the Plane AI API deployment. |
-| services.pi.tolerations | [] | | Tolerations for the Plane AI API deployment. |
-| services.pi.affinity | {} | | Affinity rules for the Plane AI API deployment. |
-| services.pi.labels | {} | | Custom labels to add to the Plane AI API deployment. |
-| services.pi.annotations | {} | | Custom annotations to add to the Plane AI API deployment. |
-| env.pg_pi_db_name | plane_pi | | PostgreSQL database name used by Plane AI when `postgres.local_setup=true`. |
-| env.pg_pi_db_remote_url | "" | | PostgreSQL connection URL for Plane AI when using a remote database. Required when `postgres.local_setup=false` and Plane AI is enabled. |
-| env.pi_envs.internal_secret | tyfvfqvBJAgpm9bzvf3r4urJer0Ehfdubk | | Internal secret used by Plane AI for OAuth and internal APIs. |
-| env.pi_envs.plane_api_host | "" | | Override for the Plane API host URL used by Plane AI. Defaults to the license domain. |
-| env.pi_envs.cors_allowed_origins | "" | | CORS allowed origins for Plane AI API. Defaults to the license domain. |
+::: info Plane AI database
+Plane AI uses a separate PostgreSQL database. Create a new database (e.g. `plane_pi`) and connect it using `env.pg_pi_db_remote_url` in values, or **PLANE_PI_DATABASE_URL** when using `pi_api_env_existingSecret`.
+:::
+
+| Setting | Default | Required | Description |
+| --------------------------------- | :----------------------------------------------: | :------: | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| services.pi.enabled | false | No | Set to `true` to enable the Plane AI service and its API, worker, beat, and migrator workloads. |
+| services.pi.replicas | 1 | Yes | Number of replicas for the Plane AI API deployment. It must be >=1. |
+| services.pi.memoryLimit | 1000Mi | | Memory limit for the Plane AI API deployment. |
+| services.pi.cpuLimit | 500m | | CPU limit for the Plane AI API deployment. |
+| services.pi.memoryRequest | 50Mi | | Memory request for the Plane AI API deployment. |
+| services.pi.cpuRequest | 50m | | CPU request for the Plane AI API deployment. |
+| services.pi.image | artifacts.plane.so/makeplane/plane-pi-commercial | | Docker image for the Plane AI service. |
+| services.pi.pullPolicy | Always | | Image pull policy for the Plane AI deployment. |
+| services.pi.assign_cluster_ip | false | | Set it to `true` if you want to assign `ClusterIP` to the Plane AI API service. |
+| services.pi.nodeSelector | {} | | Node selector for the Plane AI API deployment. |
+| services.pi.tolerations | [] | | Tolerations for the Plane AI API deployment. |
+| services.pi.affinity | {} | | Affinity rules for the Plane AI API deployment. |
+| services.pi.labels | {} | | Custom labels to add to the Plane AI API deployment. |
+| services.pi.annotations | {} | | Custom annotations to add to the Plane AI API deployment. |
+| env.pg_pi_db_name | plane_pi | | PostgreSQL database name used by Plane AI when `postgres.local_setup=true`. |
+| env.pg_pi_db_remote_url | "" | | PostgreSQL connection URL for Plane AI when using a remote database. Required when `postgres.local_setup=false` and Plane AI is enabled. |
+| env.pi_envs.follower_postgres_uri | Same as Plane DATABASE_URL | No | Connection string for a Plane PostgreSQL DB read replica. Used for read-heavy operations to reduce load on the primary database. |
+| env.pi_envs.internal_secret | tyfvfqvBJAgpm9bzvf3r4urJer0Ehfdubk | | Internal secret used by Plane AI for OAuth and internal APIs. |
+| env.pi_envs.plane_api_host | "" | | Override for the Plane API host URL used by Plane AI. Defaults to the license domain. |
+| env.pi_envs.cors_allowed_origins | "" | | CORS allowed origins for Plane AI API. Defaults to the license domain. |
#### Plane AI Worker Deployment
@@ -657,6 +662,7 @@ To configure the external secrets for your application, you need to define speci
| | GITLAB_CLIENT_ID | Required if `services.silo.connectors.gitlab.enabled` is true | GitLab client ID | your_gitlab_client_id |
| | GITLAB_CLIENT_SECRET | Required if `services.silo.connectors.gitlab.enabled` is true | GitLab client secret key | your_gitlab_client_secret_key |
| pi_api_env_existingSecret | PLANE_PI_DATABASE_URL | Required if `services.pi.enabled=true` | PostgreSQL connection URL for Plane AI database | **k8s service example**: `postgresql://plane:plane@plane-pgdb.plane-ns.svc.cluster.local/plane_pi`
**external**: `postgresql://username:password@your-db-host:5432/plane_pi` |
+| | FOLLOWER_POSTGRES_URI | No | Connection string for a PostgreSQL read replica | Same as DATABASE_URL. Used for read-heavy operations to reduce load on the primary database. **k8s**: `postgresql://plane:plane@plane-pgdb.plane-ns.svc.cluster.local:5432/plane` |
| | AMQP_URL | Required if `services.pi.enabled=true` | RabbitMQ connection URL | **k8s service example**: `amqp://plane:plane@plane-rabbitmq.plane-ns.svc.cluster.local:5672/`
**external**: `amqp://username:password@your-rabbitmq-host:5672/` |
| | AES_SECRET_KEY | Required if `services.pi.enabled=true` | AES secret key for Plane AI | dsOdt7YrvxsTIFJ37pOaEVvLxN8KGBCr (or your own value) |
| | OPENAI_API_KEY | required if `services.pi.ai_providers.openai.enabled` is true | OpenAI API key | your_openai_api_key |