From ea2e234ba8adde942fefd9c6bbe608781d66f113 Mon Sep 17 00:00:00 2001 From: danciaclara Date: Tue, 9 Sep 2025 17:04:18 +0530 Subject: [PATCH 1/6] Kubernetes Airgapped Edition --- mint.json | 9 ++++++++- self-hosting/methods/airgapped-edition.mdx | 4 ++-- self-hosting/methods/kubernetes.mdx | 6 +++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/mint.json b/mint.json index e831fc5b..950a431c 100644 --- a/mint.json +++ b/mint.json @@ -72,7 +72,14 @@ "self-hosting/methods/kubernetes", "self-hosting/methods/coolify", "self-hosting/methods/portainer", - "self-hosting/methods/airgapped-edition", + { + "group": "Airgapped edition", + "pages": [ + "self-hosting/methods/airgapped-edition", + "self-hosting/methods/airgapped-edition-kubernetes" + ] + }, + "self-hosting/methods/podman-quadlets" ] }, diff --git a/self-hosting/methods/airgapped-edition.mdx b/self-hosting/methods/airgapped-edition.mdx index d5f4844e..9c1a4ad0 100644 --- a/self-hosting/methods/airgapped-edition.mdx +++ b/self-hosting/methods/airgapped-edition.mdx @@ -1,6 +1,6 @@ --- -title: Deploy Plane Commercial Airgapped Edition -sidebarTitle: Airgapped Edition +title: Deploy Plane Commercial in an Airgapped Docker Environment +sidebarTitle: For Docker --- This guide walks you through setting up the Commercial Airgapped Edition in an offline environment using our pre-packaged installation bundle. diff --git a/self-hosting/methods/kubernetes.mdx b/self-hosting/methods/kubernetes.mdx index 75b4e131..d53a0cf1 100644 --- a/self-hosting/methods/kubernetes.mdx +++ b/self-hosting/methods/kubernetes.mdx @@ -26,7 +26,7 @@ Ensure you're using use **Helm chart v1.3.0**. 1. Open terminal or any other command-line app that has access to Kubernetes tools on your local system. 2. Set the following environment variables: ```bash - PLANE_VERSION=v1.13.0 + PLANE_VERSION=v1.14.1 ``` ```bash DOMAIN_NAME= @@ -83,7 +83,7 @@ Ensure you're using use **Helm chart v1.3.0**. ``` Make sure you set the required environment variables listed below: - - `planeVersion: v1.13.0` + - `planeVersion: v1.14.1` - `license.licenseDomain: ` - `license.licenseServer: https://prime.plane.so` - `ingress.enabled: ` @@ -113,7 +113,7 @@ If you want to upgrade to a paid plan, see [Plan upgrades](https://docs.plane.so | Setting | Default | Required | Description | |---|:---:|:---:|---| - | planeVersion | v1.13.0 | Yes | Specifies the version of Plane to be deployed. Copy this from `prime.plane.so.` | + | planeVersion | v1.14.1 | Yes | Specifies the version of Plane to be deployed. Copy this from `prime.plane.so.` | | license.licenseServer | `https://prime.plane.so` | Yes | Sets the value of the `licenseServer` that gets you your license and validates it periodically. Don't change this. | | license.licenseDomain | '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. | From 93102641a8206fb5556f1d8f123f205e4cca0161 Mon Sep 17 00:00:00 2001 From: danciaclara Date: Tue, 9 Sep 2025 17:05:02 +0530 Subject: [PATCH 2/6] minor edit --- mint.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mint.json b/mint.json index 950a431c..869109f6 100644 --- a/mint.json +++ b/mint.json @@ -73,7 +73,7 @@ "self-hosting/methods/coolify", "self-hosting/methods/portainer", { - "group": "Airgapped edition", + "group": "Airgapped Edition", "pages": [ "self-hosting/methods/airgapped-edition", "self-hosting/methods/airgapped-edition-kubernetes" From 685c1d9a7ca14f81518ad39ddb74b8b62cf0c197 Mon Sep 17 00:00:00 2001 From: danciaclara Date: Tue, 9 Sep 2025 17:07:23 +0530 Subject: [PATCH 3/6] added Kuberneted page --- .../methods/airgapped-edition-kubernetes.mdx | 197 ++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 self-hosting/methods/airgapped-edition-kubernetes.mdx diff --git a/self-hosting/methods/airgapped-edition-kubernetes.mdx b/self-hosting/methods/airgapped-edition-kubernetes.mdx new file mode 100644 index 00000000..95a8fcd9 --- /dev/null +++ b/self-hosting/methods/airgapped-edition-kubernetes.mdx @@ -0,0 +1,197 @@ +--- +title: Deploy Plane Commercial in an Airgapped Kubernetes Environment +sidebarTitle: For Kubernetes +--- + +This guide walks you through installing Plane Enterprise in a Kubernetes cluster without internet access. You'll use Helm charts and pre-packaged Docker images to deploy a fully functional Plane instance. + +## What you'll need + +Before starting, ensure you have: + +- Helm 3.x installed +- kubectl with access to your target Kubernetes cluster + +## Install Plane + +1. Get the Plane Enterprise Helm chart from the official release: + + ```bash + # Using wget + wget https://github.com/makeplane/helm-charts/releases/download/plane-enterprise-1.4.1/plane-enterprise-1.4.1.tgz + + # Using curl + curl -L -O https://github.com/makeplane/helm-charts/releases/download/plane-enterprise-1.4.1/plane-enterprise-1.4.1.tgz + ``` + +2. Contact [**sales@plane.so**](mailto:sales@plane.so) to get your installation download URL and license file. + +2. On a machine with internet access, download the installation package: + + ```bash + curl -LO + ``` + + The download may take 15 minutes. Once complete, you no longer need internet access. + +3. Transfer the `airgapped-{arch}.tar.gz` file to your air-gapped machine. + +4. Extract the package on your air-gapped machine: + + ```bash + mkdir -p airgapped + tar -xvzf airgapped-amd64.tar.gz -C airgapped + cd airgapped + ``` + + You'll find these Docker image .tar files for your airgapped installation in this folder. + + - `admin-commercial-.tar` - Admin service image + - `backend-commercial-.tar` - API/worker/beat-worker/migrator service image + - `email-commercial-.tar` - Email service image + - `live-commercial-.tar` - Live service image + - `monitor-commercial-.tar` - Monitor service image + - `proxy-commercial-.tar` - Plane-proxy service image + - `silo-commercial-.tar` - Silo service image + - `space-commercial-.tar` - Space service image + - `web-commercial-.tar` - Web service image + - `minio-latest.tar` - Plane-minio service image + - `postgres-15.7-alpine.tar` - Plane-db service image + - `rabbitmq-3.13.6-management-alpine.tar` - Plane-mq service image + - `valkey-7.2.5-alpine.tar` - Plane-redis service image + + + For this installation, you can ignore the extra files in this folder (e.g., `docker-compose.yml`, `install.sh`, `plane.env`, etc.). + + +5. Load the images into your local Docker registry or private registry: + + ```bash + # Load each image into Docker + docker load -i .tar + + # Tag and push each image to your private registry + docker tag / + docker push / + ``` + +6. Create Custom Values File + + ```bash + # Extract the Helm chart to access the values file + helm show values plane-enterprise-1.4.1.tgz > custom-values.yaml + ``` + +7. Edit the `custom-values.yaml` file to point to your local/private registry images and configure important settings: + + ```yaml + # Example of image updates in custom-values.yaml + license: + licenseDomain: 'plane.example.com' + + airgapped: + enabled: true + # if using Custom Root CA for S3 storage + s3SecretName: "s3-custom-ca" + s3SecretKey: "s3-custom-ca.crt" + + services: + web: + image: /web-commercial: + + api: + image: /backend-commercial: + + space: + image: /space-commercial: + + admin: + image: /admin-commercial: + + live: + image: /live-commercial: + + monitor: + image: /monitor-commercial: + + silo: + image: /silo-commercial: + + iframely: + image: /iframely:v1.2.0 + + # Database and infrastructure images + redis: + image: /valkey:7.2.5-alpine + + postgres: + image: /postgres:15.7-alpine + + rabbitmq: + image: /rabbitmq:3.13.6-management-alpine + + minio: + image: /minio:latest + image_mc: /mc:latest + + env: + storageClass: '' + ``` + +8. Install Plane Commercial Airgapped edition using your customized values file: + + ```bash + helm install plane-app plane-enterprise-1.4.1.tgz \ + --create-namespace \ + --namespace plane \ + -f custom-values.yaml \ + --timeout 10m \ + --wait \ + --wait-for-jobs + ``` + +## Verify installation + +Check that all components are running properly: + +```bash +# Check all pods +kubectl get pods -n plane + +# Check services +kubectl get services -n plane + +# Check ingress +kubectl get ingress -n plane + +# Check persistent volumes +kubectl get pv,pvc -n plane + +# Get the ingress URL +kubectl get ingress -n plane -o wide +``` + +## Additional configuration + +For more advanced Plane configuration options, refer to the [Kubernetes documentation](https://developers.plane.so/self-hosting/methods/kubernetes#configuration-settings). + + +## Activate your license + +Once your air-gapped installation is running, you'll need to activate your workspace with the provided license file. + +You should have received the `license_key.json` file as part of your air-gapped package. If you don't have this file, contact our support team. + + +1. Go to your [Workspace Settings](https://docs.plane.so/core-concepts/workspaces/overview#workspace-settings) in the Plane application. +2. Select **Billing and plans** on the right pane. +3. Click the **Activate this workspace** button. + ![Upload license file](/images/activate-license/upload-airgapped-license-file.webp) +4. Upload the license file `license_key.json` to activate your workspace. + +You now have Plane running in your air-gapped environment. If you run into any issues, check the logs using the commands above, or reach out to our support team for assistance. + + +*Optional* +Once everything is working, you can safely delete the `airgapped` folder that contains the installation script and image files to free up space. + \ No newline at end of file From 4a16d7b0f6d5e10472f450161700471d1a02459d Mon Sep 17 00:00:00 2001 From: danciaclara Date: Tue, 9 Sep 2025 17:21:26 +0530 Subject: [PATCH 4/6] added airgapped settings --- self-hosting/methods/kubernetes.mdx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/self-hosting/methods/kubernetes.mdx b/self-hosting/methods/kubernetes.mdx index d53a0cf1..fff8ac01 100644 --- a/self-hosting/methods/kubernetes.mdx +++ b/self-hosting/methods/kubernetes.mdx @@ -114,9 +114,17 @@ If you want to upgrade to a paid plan, see [Plan upgrades](https://docs.plane.so | Setting | Default | Required | Description | |---|:---:|:---:|---| | planeVersion | v1.14.1 | Yes | Specifies the version of Plane to be deployed. Copy this from `prime.plane.so.` | - | license.licenseServer | `https://prime.plane.so` | Yes | Sets the value of the `licenseServer` that gets you your license and validates it periodically. Don't change this. | | license.licenseDomain | '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. | + #### Airgapped settings + + | Setting | Default | Required | Description | + |---|:---:|:---:|---| + | airgapped.enabled | false | No | Specifies the airgapped mode the Plane API runs in. | + | airgapped.s3SecretName | "s3-custom-ca" | No | Name of the Secret that contains the CA certificate (.crt). The Secret must include a data key whose filename matches the basename of `airgapped.s3SecretKey` (default: `s3-custom-ca.crt`). Used to override S3’s CA when `airgapped.enabled=true`. Applying this secret looks like: `kubectl -n plane create secret generic plane-s3-ca \ --from-file=s3-custom-ca.crt=/path/to/your/ca.crt` | + | airgapped.s3SecretKey | "s3-custom-ca.crt" | No | Key name of the secret to load the Custom Root CA from `airgapped.s3SecretName` | + + #### Postgres | Setting | Default | Required | Description | From 0cf2f43bac4e9881c1a3a5da216fdf3718035ad1 Mon Sep 17 00:00:00 2001 From: danciaclara Date: Tue, 9 Sep 2025 17:36:17 +0530 Subject: [PATCH 5/6] fixed review suggestions --- .../methods/airgapped-edition-kubernetes.mdx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/self-hosting/methods/airgapped-edition-kubernetes.mdx b/self-hosting/methods/airgapped-edition-kubernetes.mdx index 95a8fcd9..a53f033a 100644 --- a/self-hosting/methods/airgapped-edition-kubernetes.mdx +++ b/self-hosting/methods/airgapped-edition-kubernetes.mdx @@ -87,13 +87,13 @@ Before starting, ensure you have: ```yaml # Example of image updates in custom-values.yaml license: - licenseDomain: 'plane.example.com' + licenseDomain: 'plane.example.com' airgapped: - enabled: true - # if using Custom Root CA for S3 storage - s3SecretName: "s3-custom-ca" - s3SecretKey: "s3-custom-ca.crt" + enabled: true + # if using Custom Root CA for S3 storage + s3SecretName: "s3-custom-ca" + s3SecretKey: "s3-custom-ca.crt" services: web: @@ -135,7 +135,7 @@ Before starting, ensure you have: image_mc: /mc:latest env: - storageClass: '' + storageClass: '' ``` 8. Install Plane Commercial Airgapped edition using your customized values file: From 69e9fe3711b08adac02dec94fd790f452bc7017d Mon Sep 17 00:00:00 2001 From: Manish Gupta <59428681+mguptahub@users.noreply.github.com> Date: Tue, 9 Sep 2025 17:38:40 +0530 Subject: [PATCH 6/6] Refactor Kubernetes service definitions for clarity --- .../methods/airgapped-edition-kubernetes.mdx | 88 +++++++++---------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/self-hosting/methods/airgapped-edition-kubernetes.mdx b/self-hosting/methods/airgapped-edition-kubernetes.mdx index a53f033a..c39f7161 100644 --- a/self-hosting/methods/airgapped-edition-kubernetes.mdx +++ b/self-hosting/methods/airgapped-edition-kubernetes.mdx @@ -96,43 +96,43 @@ Before starting, ensure you have: s3SecretKey: "s3-custom-ca.crt" services: - web: - image: /web-commercial: - - api: - image: /backend-commercial: - - space: - image: /space-commercial: - - admin: - image: /admin-commercial: - - live: - image: /live-commercial: - - monitor: - image: /monitor-commercial: - - silo: - image: /silo-commercial: - - iframely: - image: /iframely:v1.2.0 - - # Database and infrastructure images - redis: - image: /valkey:7.2.5-alpine - - postgres: - image: /postgres:15.7-alpine - - rabbitmq: - image: /rabbitmq:3.13.6-management-alpine - - minio: - image: /minio:latest - image_mc: /mc:latest + web: + image: /web-commercial: + + api: + image: /backend-commercial: + + space: + image: /space-commercial: + + admin: + image: /admin-commercial: + + live: + image: /live-commercial: + + monitor: + image: /monitor-commercial: + + silo: + image: /silo-commercial: + + iframely: + image: /iframely:v1.2.0 + + # Database and infrastructure images + redis: + image: /valkey:7.2.5-alpine + + postgres: + image: /postgres:15.7-alpine + + rabbitmq: + image: /rabbitmq:3.13.6-management-alpine + + minio: + image: /minio:latest + image_mc: /mc:latest env: storageClass: '' @@ -142,12 +142,12 @@ Before starting, ensure you have: ```bash helm install plane-app plane-enterprise-1.4.1.tgz \ - --create-namespace \ - --namespace plane \ - -f custom-values.yaml \ - --timeout 10m \ - --wait \ - --wait-for-jobs + --create-namespace \ + --namespace plane \ + -f custom-values.yaml \ + --timeout 10m \ + --wait \ + --wait-for-jobs ``` ## Verify installation @@ -194,4 +194,4 @@ You now have Plane running in your air-gapped environment. If you run into any i *Optional* Once everything is working, you can safely delete the `airgapped` folder that contains the installation script and image files to free up space. - \ No newline at end of file +