Skip to content

Commit 57d73fb

Browse files
Merge pull request #188 from makeplane/preview
Docker Airgapped updates and image fixes
2 parents 45c2fed + 7beb3fc commit 57d73fb

10 files changed

Lines changed: 121 additions & 164 deletions

File tree

-7.49 KB
Loading
20.6 KB
Loading
58.6 KB
Loading
34.1 KB
Loading
20.2 KB
Loading

mint.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,8 @@
153153
"group": "Manage licenses",
154154
"pages": [
155155
"self-hosting/manage/manage-licenses/activate-pro-and-business",
156-
"self-hosting/manage/manage-licenses/activate-enterprise"
156+
"self-hosting/manage/manage-licenses/activate-enterprise",
157+
"self-hosting/manage/manage-licenses/activate-airgapped"
157158
]
158159
},
159160
"self-hosting/manage/view-logs",

self-hosting/govern/advanced-search.mdx

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -249,26 +249,7 @@ Instead, Plane batches updates through Redis. When a signal fires, the update go
249249
The batching pattern also provides resilience. If OpenSearch is temporarily unavailable, updates accumulate in Redis and process once connectivity returns. This requires Redis 6.2+ which supports the LPOP count operation needed for efficient batch retrieval.
250250

251251
### The complete flow
252-
```
253-
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
254-
│ Plane Web │────▶│ Plane API │────▶│ OpenSearch │
255-
│ (Search) │ │ (Query) │ │ (Indices) │
256-
└─────────────────┘ └─────────────────┘ └─────────────────┘
257-
258-
│ Database signals
259-
260-
┌─────────────────┐
261-
│ Redis Queue │
262-
│ (Batching) │
263-
└─────────────────┘
264-
265-
│ Celery task (every 5s)
266-
267-
┌─────────────────┐
268-
│ Celery Worker │────▶ Batch updates
269-
│ (Processing) │
270-
└─────────────────┘
271-
```
252+
![OpenSeach flow](/images/open-search/opensearch-flow.webp)
272253

273254
When you search, queries bypass this synchronization process entirely. The Plane API sends your search query directly to OpenSearch, which returns results almost instantly. Your database isn't involved in search queries at all — this is the key to search performance.
274255

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
title: Activate Airgapped Edition license
3+
sidebarTitle: Activate Airgapped
4+
---
5+
6+
Once your air-gapped installation is running, you'll need to activate your workspace with the license file.
7+
8+
1. Login to the [Prime portal](https://prime.plane.so/licenses) with the same email address you used to purchase the paid plan.
9+
2. Go to [Manage licenses](https://prime.plane.so/licenses).
10+
3. Click **Download license** to download the license file for your Plane version.
11+
![Download license file](/images/activate-license/download-license.webp)
12+
4. Navigate to the [Workspace Settings](https://docs.plane.so/core-concepts/workspaces/overview#workspace-settings) in the Plane application.
13+
5. Select **Billing and plans** on the right pane.
14+
6. Click the **Activate this workspace** button.
15+
![Upload license file](/images/activate-license/upload-airgapped-license-file.webp)
16+
7. Upload the license file to activate your workspace.
17+
18+
You now have Plane running in your air-gapped environment. If you run into any issues, check the logs, or reach out to our support team for assistance.

self-hosting/methods/airgapped-edition-kubernetes.mdx

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ sidebarTitle: For Kubernetes
88
Airgapped deployments are available exclusively for Business plan customers. Contact our [sales team](mailto:sales@plane.so) for pricing and licensing information.
99
</Note>
1010

11-
This guide walks you through deploying Plane Enterprise in an airgapped Kubernetes environment using Helm charts and pre-packaged Docker images.
11+
This guide walks you through deploying Plane Commercial in an airgapped Kubernetes environment using Helm charts and pre-packaged Docker images.
1212

1313
## What you'll need
1414

@@ -30,6 +30,7 @@ Consider these alternatives:
3030
- **Redis**: Replace with Valkey or a managed Redis service
3131
- **PostgreSQL**: Use a managed PostgreSQL service
3232
- **RabbitMQ**: Use a managed message queue service
33+
- **OpenSearch**: Use a managed OpenSearch or Elasticsearch service
3334
</Warning>
3435

3536
## Install Plane
@@ -58,6 +59,7 @@ Consider these alternatives:
5859
- `rabbitmq:3.13.6-management-alpine`
5960
- `minio/minio:latest`
6061
- `minio/mc:latest`
62+
- `opensearchproject/opensearch:3.3.2`
6163

6264
If you're using `local_setup: true` for any of these services, you'll need to pull and transfer these images separately.
6365
</Note>
@@ -269,22 +271,9 @@ Consider these alternatives:
269271
kubectl get ingress -n plane -o wide
270272
```
271273

272-
## Activate your license
273-
274-
Once your air-gapped installation is running, you'll need to activate your workspace with the license file.
275-
276-
1. Login to the [Prime portal](https://prime.plane.so/licenses) with the same email address you used to purchase the paid plan.
277-
2. Go to [Manage licenses](https://prime.plane.so/licenses).
278-
3. Click **Download license** to download the license file for your Plane version.
279-
![Download license file](/images/activate-license/download-license.webp)
280-
4. Navigate to the [Workspace Settings](https://docs.plane.so/core-concepts/workspaces/overview#workspace-settings) in the Plane application.
281-
6. Select **Billing and plans** on the right pane.
282-
7. Click the **Activate this workspace** button.
283-
![Upload license file](/images/activate-license/upload-airgapped-license-file.webp)
284-
8. Upload the license file to activate your workspace.
285-
286-
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.
274+
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.
287275

276+
6. [Activate your license key](/self-hosting/manage/manage-licenses/activate-airgapped).
288277

289278
## Additional configuration
290279

self-hosting/methods/airgapped-edition.mdx

Lines changed: 95 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -8,139 +8,119 @@ sidebarTitle: For Docker
88
Airgapped deployments are available exclusively for Business plan customers. Contact our [sales team](mailto:sales@plane.so) for pricing and licensing information.
99
</Note>
1010

11-
This guide walks you through setting up the Commercial Airgapped Edition in an offline environment using our pre-packaged installation bundle.
11+
This guide walks you through deploying Plane Commercial in an airgapped Docker environment using Docker Compose and pre-configured images from your private registry.
1212

1313
## Prerequisites
14-
Before we get started, make sure your air-gapped machine has:
1514

16-
- Docker (version 24 or later) up and running
15+
Before starting, ensure you have:
16+
17+
- Docker (version 24 or later) installed and running
1718
- Docker Compose Plugin installed (you should be able to run `docker compose` or `docker-compose`)
18-
- The Plane air-gapped package we provide includes:
19-
- Docker image files (`.tar` format)
20-
- Configuration files (`docker-compose.yml` and `plane.env`)
21-
- Installation script (`install.sh`)
22-
23-
### Required files
24-
25-
- `docker-compose.yml` - Docker Compose configuration for service orchestration
26-
- `plane.env` - Default configuration file containing environment variables
27-
- `admin-commercial-<version>.tar` - Docker image for admin service
28-
- `backend-commercial-<version>.tar` - Docker image for api/worker/beat-worker/migrator service
29-
- `email-commercial-<version>.tar` - Docker image for email service
30-
- `live-commercial-<version>.tar` - Docker image for live service
31-
- `monitor-commercial-<version>.tar` - Docker image for monitor service
32-
- `proxy-commercial-<version>.tar` - Docker image for plane-proxy service
33-
- `silo-commercial-<version>.tar` - Docker image for silo service
34-
- `space-commercial-<version>.tar` - Docker image for space service
35-
- `web-commercial-<version>.tar` - Docker image for web service
36-
- `minio-latest.tar` - Docker image for plane-minio service
37-
- `postgres-15.7-alpine.tar` - Docker image for plane-db service
38-
- `rabbitmq-3.13.6-management-alpine.tar` - Docker image for plane-mq service
39-
- `valkey-7.2.5-alpine.tar` - Docker image for plane-redis service
19+
- Access to a private Docker registry containing Plane images
20+
- Required ports opened to access the application (80, 443)
21+
22+
<Warning>
23+
While Docker can run stateful services with persistent volumes, we strongly recommend using external managed services for better reliability in backup/restore operations and disaster recovery.
24+
25+
Consider these alternatives:
26+
- **MinIO**: Replace with AWS S3, Google Cloud Storage, or any S3-compatible service
27+
- **Redis**: Replace with Valkey or a managed Redis service
28+
- **PostgreSQL**: Use a managed PostgreSQL service
29+
- **RabbitMQ**: Use a managed message queue service
30+
- **OpenSearch**: Use a managed OpenSearch or Elasticsearch service
31+
</Warning>
4032

4133
## Install Plane
42-
1. Get in touch with sales@plane.so to get your installation download URL and the license file.
4334

44-
2. On a machine that has internet access, download the installation package:
35+
1. **Prepare Docker images for airgapped environment**
4536

46-
```bash
47-
curl -LO <asset-download-url>
48-
```
49-
50-
The download may take 15 minutes. Once the file is downloaded you no longer need internet access.
37+
Refer to [this document](/self-hosting/methods/clone-docker-images) to download the Docker images from the Plane artifact registry to your internal registry.
5138

52-
3. Transfer the `airgapped-{arch}.tar.gz` file to your air-gapped machine.
39+
<Note>
40+
**Important**
41+
This process will NOT download or clone these infrastructure images:
42+
- `valkey/valkey:7.2.11-alpine`
43+
- `postgres:15.7-alpine`
44+
- `rabbitmq:3.13.6-management-alpine`
45+
- `minio/minio:latest`
46+
- `minio/mc:latest`
47+
- `opensearchproject/opensearch:3.3.2`
5348

54-
4. Once you have the file on your air-gapped machine, extract the package.
49+
If you're using local infrastructure services, you'll need to pull and transfer these images separately.
50+
</Note>
5551

56-
```bash
57-
mkdir -p airgapped
58-
tar -xvzf airgapped-amd64.tar.gz -C airgapped
59-
cd airgapped
60-
```
52+
2. **Download Docker Compose configuration**
6153

62-
The airgapped directory contains your `plane.env`, `docker-compose.yml`, and `install.sh` files which are used in the following steps.
54+
Download the Docker Compose configuration files from the official release.
6355

64-
5. Run the installation script:
6556
```bash
66-
bash install.sh
57+
# Download docker-compose.yml
58+
curl -fsSL https://prime.plane.so/releases/<plane-version>/docker-compose.yml -o docker-compose.yml
59+
60+
# Download environment template
61+
curl -fsSL https://prime.plane.so/releases/<plane-version>/variables.env -o plane.env
6762
```
6863

69-
The script will guide you through the process step by step. Here's what to expect:
70-
71-
```bash
72-
**********************************************************
73-
You are about to install/upgrade Plane as airgapped setup
74-
75-
Pre-requisites:
76-
77-
- Docker installed and running
78-
- Docker version 24 or higher
79-
- docker-compose or docker compose installed
80-
- A tarball of all the images
81-
- A docker-compose.yml file (docker-compose.yml)
82-
- A plane.env file (plane.env)
83-
**********************************************************
84-
85-
Enter the directory to install Plane (default: /home/ubuntu/planeairgapped):
86-
87-
Enter the domain or ip address to access Plane (default: 127.0.0.1): plane.mycompany.com
88-
89-
**********************************************************
90-
Verify the final configuration:
91-
- Setup Directory: /home/ubuntu/planeairgapped
92-
- App Domain: plane.mycompany.com
93-
- Installation Type: New
94-
**********************************************************
95-
```
96-
97-
Once you confirm your settings, the installer will:
98-
- Copy the `docker-compose.yml` and `plane.env` files to your chosen installation directory.
99-
- Create the necessary folders for data and logs.
100-
- Load all the Docker images into your local Docker registry.
101-
102-
You'll see something like this when the installation completes:
103-
```bash
104-
**********************************************************
105-
Plane Setup is ready to configure and start
106-
107-
Use below commands to configure and start Plane
108-
Switch to the setup directory
109-
cd /home/ubuntu/planeairgapped
110-
Start the services
111-
docker compose -f docker-compose.yml --env-file plane.env up -d
112-
Check logs of migrator service and wait for it to finish using below command
113-
docker compose logs -f migrator
114-
Check logs of api service and wait for it to start using below command
115-
docker compose logs -f api
116-
Once the api service is started, you can access Plane at http://plane.mycompany.com
117-
**********************************************************
118-
Installation completed successfully
119-
You can access Plane at http://plane.mycompany.com
120-
```
121-
122-
After installation, your directory structure will look like this:
64+
3. **Configure environment variables**
65+
66+
Edit the `plane.env` file to configure your deployment:
67+
12368
```bash
124-
~/planeairgapped/
125-
├── docker-compose.yml
126-
├── plane.env
127-
├── data/
128-
└── logs/
129-
```
69+
# Generate a unique machine signature
70+
export MACHINE_SIGNATURE=$(uuidgen)
13071

131-
## Environment variables
72+
# Set your domain
73+
export DOMAIN_NAME=plane.yourcompany.com
74+
export WEB_URL=https://plane.yourcompany.com
75+
export CORS_ALLOWED_ORIGINS=https://plane.yourcompany.com
76+
```
13277

133-
The following key environment variables are automatically configured during installation:
78+
**Update image references** in `docker-compose.yml` to point to your private registry:
79+
80+
```yaml
81+
services:
82+
web:
83+
image: your-registry.io/plane/web-commercial:${APP_RELEASE_VERSION}
84+
85+
api:
86+
image: your-registry.io/plane/backend-commercial:${APP_RELEASE_VERSION}
87+
88+
space:
89+
image: your-registry.io/plane/space-commercial:${APP_RELEASE_VERSION}
90+
91+
admin:
92+
image: your-registry.io/plane/admin-commercial:${APP_RELEASE_VERSION}
93+
94+
live:
95+
image: your-registry.io/plane/live-commercial:${APP_RELEASE_VERSION}
96+
97+
monitor:
98+
image: your-registry.io/plane/monitor-commercial:${APP_RELEASE_VERSION}
99+
100+
silo:
101+
image: your-registry.io/plane/silo-commercial:${APP_RELEASE_VERSION}
102+
```
134103
135-
- `MACHINE_SIGNATURE` - A unique UUID generated for your installation
136-
- `DOMAIN_NAME` - The domain or IP address where Plane will be accessible
137-
- `WEB_URL` - The full URL where Plane will be accessible (e.g., `http://your-domain`)
138-
- `CORS_ALLOWED_ORIGINS` - Allowed origins for CORS (Cross-Origin Resource Sharing)
104+
**Infrastructure services** (if using local setup):
105+
```yaml
106+
services:
107+
redis:
108+
image: valkey/valkey:7.2.11-alpine
109+
110+
postgres:
111+
image: postgres:15.7-alpine
112+
113+
rabbitmq:
114+
image: rabbitmq:3.13.6-management-alpine
115+
116+
minio:
117+
image: minio/minio:latest
118+
```
139119
140120
## Start Plane
141-
1. To get Plane up and running, navigate to your installation directory and start the services:
121+
122+
1. Start the services:
142123
```bash
143-
cd ~/planeairgapped
144124
docker compose --env-file plane.env up -d
145125
```
146126

@@ -155,22 +135,10 @@ The following key environment variables are automatically configured during inst
155135
docker compose logs -f api
156136
```
157137

158-
The api is healthy when you see`: api-1 listening at`
159-
160-
Once both services are running smoothly, you can access Plane by opening your browser and going to the domain or IP address you configured during installation.
161-
162-
## Activate your license
138+
The API is healthy when you see: `api-1 listening at`
163139

164-
Once your air-gapped installation is running, you'll need to activate your workspace with the license file.
165-
166-
1. Login to the [Prime portal](https://prime.plane.so/licenses) with the same email address you used to purchase the paid plan.
167-
2. Go to [Manage licenses](https://prime.plane.so/licenses).
168-
3. Click **Download license** to download the license file for your Plane version.
169-
![Download license file](/images/activate-license/download-license.webp)
170-
4. Navigate to the [Workspace Settings](https://docs.plane.so/core-concepts/workspaces/overview#workspace-settings) in the Plane application.
171-
6. Select **Billing and plans** on the right pane.
172-
6. Click the **Activate this workspace** button.
173-
![Upload license file](/images/activate-license/upload-airgapped-license-file.webp)
174-
7. Upload the license file to activate your workspace.
140+
Once all services are running smoothly, you can access Plane by opening your browser and going to the domain you configured.
141+
142+
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.
175143

176-
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.
144+
3. [Activate your license key](/self-hosting/manage/manage-licenses/activate-airgapped)

0 commit comments

Comments
 (0)