Skip to content

Commit 609cab8

Browse files
Kubernetes Airgapped edition #142
2 parents f8858ea + 7f8b11e commit 609cab8

File tree

4 files changed

+219
-7
lines changed

4 files changed

+219
-7
lines changed

mint.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,14 @@
7272
"self-hosting/methods/kubernetes",
7373
"self-hosting/methods/coolify",
7474
"self-hosting/methods/portainer",
75-
"self-hosting/methods/airgapped-edition",
75+
{
76+
"group": "Airgapped Edition",
77+
"pages": [
78+
"self-hosting/methods/airgapped-edition",
79+
"self-hosting/methods/airgapped-edition-kubernetes"
80+
]
81+
},
82+
7683
"self-hosting/methods/podman-quadlets"
7784
]
7885
},
Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
---
2+
title: Deploy Plane Commercial in an Airgapped Kubernetes Environment
3+
sidebarTitle: For Kubernetes
4+
---
5+
6+
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.
7+
8+
## What you'll need
9+
10+
Before starting, ensure you have:
11+
12+
- Helm 3.x installed
13+
- kubectl with access to your target Kubernetes cluster
14+
15+
## Install Plane
16+
17+
1. Get the Plane Enterprise Helm chart from the official release:
18+
19+
```bash
20+
# Using wget
21+
wget https://github.com/makeplane/helm-charts/releases/download/plane-enterprise-1.4.1/plane-enterprise-1.4.1.tgz
22+
23+
# Using curl
24+
curl -L -O https://github.com/makeplane/helm-charts/releases/download/plane-enterprise-1.4.1/plane-enterprise-1.4.1.tgz
25+
```
26+
27+
2. Contact [**[email protected]**](mailto:[email protected]) to get your installation download URL and license file.
28+
29+
2. On a machine with internet access, download the installation package:
30+
31+
```bash
32+
curl -LO <asset-download-url>
33+
```
34+
35+
The download may take 15 minutes. Once complete, you no longer need internet access.
36+
37+
3. Transfer the `airgapped-{arch}.tar.gz` file to your air-gapped machine.
38+
39+
4. Extract the package on your air-gapped machine:
40+
41+
```bash
42+
mkdir -p airgapped
43+
tar -xvzf airgapped-amd64.tar.gz -C airgapped
44+
cd airgapped
45+
```
46+
47+
You'll find these Docker image .tar files for your airgapped installation in this folder.
48+
49+
- `admin-commercial-<version>.tar` - Admin service image
50+
- `backend-commercial-<version>.tar` - API/worker/beat-worker/migrator service image
51+
- `email-commercial-<version>.tar` - Email service image
52+
- `live-commercial-<version>.tar` - Live service image
53+
- `monitor-commercial-<version>.tar` - Monitor service image
54+
- `proxy-commercial-<version>.tar` - Plane-proxy service image
55+
- `silo-commercial-<version>.tar` - Silo service image
56+
- `space-commercial-<version>.tar` - Space service image
57+
- `web-commercial-<version>.tar` - Web service image
58+
- `minio-latest.tar` - Plane-minio service image
59+
- `postgres-15.7-alpine.tar` - Plane-db service image
60+
- `rabbitmq-3.13.6-management-alpine.tar` - Plane-mq service image
61+
- `valkey-7.2.5-alpine.tar` - Plane-redis service image
62+
63+
<Note>
64+
For this installation, you can ignore the extra files in this folder (e.g., `docker-compose.yml`, `install.sh`, `plane.env`, etc.).
65+
</Note>
66+
67+
5. Load the images into your local Docker registry or private registry:
68+
69+
```bash
70+
# Load each image into Docker
71+
docker load -i <plane-images>.tar
72+
73+
# Tag and push each image to your private registry
74+
docker tag <image-name> <your-registry>/<image-name>
75+
docker push <your-registry>/<image-name>
76+
```
77+
78+
6. Create Custom Values File
79+
80+
```bash
81+
# Extract the Helm chart to access the values file
82+
helm show values plane-enterprise-1.4.1.tgz > custom-values.yaml
83+
```
84+
85+
7. Edit the `custom-values.yaml` file to point to your local/private registry images and configure important settings:
86+
87+
```yaml
88+
# Example of image updates in custom-values.yaml
89+
license:
90+
licenseDomain: 'plane.example.com'
91+
92+
airgapped:
93+
enabled: true
94+
# if using Custom Root CA for S3 storage
95+
s3SecretName: "s3-custom-ca"
96+
s3SecretKey: "s3-custom-ca.crt"
97+
98+
services:
99+
web:
100+
image: <your-registry.com>/web-commercial:<PLANE_VERSION>
101+
102+
api:
103+
image: <your-registry.com>/backend-commercial:<PLANE_VERSION>
104+
105+
space:
106+
image: <your-registry.com>/space-commercial:<PLANE_VERSION>
107+
108+
admin:
109+
image: <your-registry.com>/admin-commercial:<PLANE_VERSION>
110+
111+
live:
112+
image: <your-registry.com>/live-commercial:<PLANE_VERSION>
113+
114+
monitor:
115+
image: <your-registry.com>/monitor-commercial:<PLANE_VERSION>
116+
117+
silo:
118+
image: <your-registry.com>/silo-commercial:<PLANE_VERSION>
119+
120+
iframely:
121+
image: <your-registry.com>/iframely:v1.2.0
122+
123+
# Database and infrastructure images
124+
redis:
125+
image: <your-registry.com>/valkey:7.2.5-alpine
126+
127+
postgres:
128+
image: <your-registry.com>/postgres:15.7-alpine
129+
130+
rabbitmq:
131+
image: <your-registry.com>/rabbitmq:3.13.6-management-alpine
132+
133+
minio:
134+
image: <your-registry.com>/minio:latest
135+
image_mc: <your-registry.com>/mc:latest
136+
137+
env:
138+
storageClass: ''
139+
```
140+
141+
8. Install Plane Commercial Airgapped edition using your customized values file:
142+
143+
```bash
144+
helm install plane-app plane-enterprise-1.4.1.tgz \
145+
--create-namespace \
146+
--namespace plane \
147+
-f custom-values.yaml \
148+
--timeout 10m \
149+
--wait \
150+
--wait-for-jobs
151+
```
152+
153+
## Verify installation
154+
155+
Check that all components are running properly:
156+
157+
```bash
158+
# Check all pods
159+
kubectl get pods -n plane
160+
161+
# Check services
162+
kubectl get services -n plane
163+
164+
# Check ingress
165+
kubectl get ingress -n plane
166+
167+
# Check persistent volumes
168+
kubectl get pv,pvc -n plane
169+
170+
# Get the ingress URL
171+
kubectl get ingress -n plane -o wide
172+
```
173+
174+
## Additional configuration
175+
176+
For more advanced Plane configuration options, refer to the [Kubernetes documentation](https://developers.plane.so/self-hosting/methods/kubernetes#configuration-settings).
177+
178+
179+
## Activate your license
180+
181+
Once your air-gapped installation is running, you'll need to activate your workspace with the provided license file.
182+
<Note>
183+
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.
184+
</Note>
185+
186+
1. Go to your [Workspace Settings](https://docs.plane.so/core-concepts/workspaces/overview#workspace-settings) in the Plane application.
187+
2. Select **Billing and plans** on the right pane.
188+
3. Click the **Activate this workspace** button.
189+
![Upload license file](/images/activate-license/upload-airgapped-license-file.webp)
190+
4. Upload the license file `license_key.json` to activate your workspace.
191+
192+
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.
193+
194+
<Tip>
195+
*Optional*
196+
Once everything is working, you can safely delete the `airgapped` folder that contains the installation script and image files to free up space.
197+
</Tip>

self-hosting/methods/airgapped-edition.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
2-
title: Deploy Plane Commercial Airgapped Edition
3-
sidebarTitle: Airgapped Edition
2+
title: Deploy Plane Commercial in an Airgapped Docker Environment
3+
sidebarTitle: For Docker
44
---
55

66
This guide walks you through setting up the Commercial Airgapped Edition in an offline environment using our pre-packaged installation bundle.

self-hosting/methods/kubernetes.mdx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Ensure you're using use **Helm chart v1.3.0**.
2626
1. Open terminal or any other command-line app that has access to Kubernetes tools on your local system.
2727
2. Set the following environment variables:
2828
```bash
29-
PLANE_VERSION=v1.13.0
29+
PLANE_VERSION=v1.14.1
3030
```
3131
```bash
3232
DOMAIN_NAME=<subdomain.domain.tld or domain.tld>
@@ -83,7 +83,7 @@ Ensure you're using use **Helm chart v1.3.0**.
8383
```
8484

8585
Make sure you set the required environment variables listed below:
86-
- `planeVersion: v1.13.0`
86+
- `planeVersion: v1.14.1`
8787
- `license.licenseDomain: <The domain you have specified to host Plane>`
8888
- `license.licenseServer: https://prime.plane.so`
8989
- `ingress.enabled: <true | false>`
@@ -113,10 +113,18 @@ If you want to upgrade to a paid plan, see [Plan upgrades](https://docs.plane.so
113113

114114
| Setting | Default | Required | Description |
115115
|---|:---:|:---:|---|
116-
| planeVersion | v1.13.0 | Yes | Specifies the version of Plane to be deployed. Copy this from `prime.plane.so.` |
117-
| 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. |
116+
| planeVersion | v1.14.1 | Yes | Specifies the version of Plane to be deployed. Copy this from `prime.plane.so.` |
118117
| 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. |
119118

119+
#### Airgapped settings
120+
121+
| Setting | Default | Required | Description |
122+
|---|:---:|:---:|---|
123+
| airgapped.enabled | false | No | Specifies the airgapped mode the Plane API runs in. |
124+
| 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` |
125+
| airgapped.s3SecretKey | "s3-custom-ca.crt" | No | Key name of the secret to load the Custom Root CA from `airgapped.s3SecretName` |
126+
127+
120128
#### Postgres
121129

122130
| Setting | Default | Required | Description |

0 commit comments

Comments
 (0)