diff --git a/mint.json b/mint.json index e831fc5b..869109f6 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-kubernetes.mdx b/self-hosting/methods/airgapped-edition-kubernetes.mdx new file mode 100644 index 00000000..c39f7161 --- /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. + 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..fff8ac01 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,10 +113,18 @@ 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.` | - | 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. | + | planeVersion | v1.14.1 | Yes | Specifies the version of Plane to be deployed. Copy this from `prime.plane.so.` | | 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 |