| title | Deploy Plane with Airgapped Docker |
|---|---|
| description | Deploy Plane in airgapped environment without internet access. Complete guide for offline Plane installation. |
| keywords | plane airgapped, offline deployment, air-gapped docker, plane offline install, disconnected environment, self-hosting |
:::info Airgapped deployments are available exclusively for Enterprise Grid customers with a minimum commitment of 100 seats. Contact our sales team for trials, tailor-made pricing for lesser seats, and license information. :::
This guide walks you through deploying Plane Commercial in an airgapped Docker environment using Docker Compose and pre-configured images from your private registry.
Before starting, ensure you have:
- Docker (version 24 or later) installed and running
- Docker Compose Plugin installed (you should be able to run
docker composeordocker-compose) - Access to a private Docker registry containing Plane images
- Required ports opened to access the application (80, 443)
:::warning 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.
Consider these alternatives:
- MinIO: Replace with AWS S3, Google Cloud Storage, or any S3-compatible service
- Redis: Replace with Valkey or a managed Redis service
- PostgreSQL: Use a managed PostgreSQL service
- RabbitMQ: Use a managed message queue service
- OpenSearch: Use a managed OpenSearch or Elasticsearch service :::
-
Prepare Docker images for airgapped environment
Refer to this document to download the Docker images from the Plane artifact registry to your internal registry.
:::info This process will NOT download or clone these infrastructure images:
valkey/valkey:7.2.11-alpinepostgres:15.7-alpinerabbitmq:3.13.6-management-alpineminio/minio:latestminio/mc:latestopensearchproject/opensearch:3.3.2
If you're using local infrastructure services, you'll need to pull and transfer these images separately. :::
-
Download Docker Compose configuration
# Download docker-compose.yml curl -fsSL https://prime.plane.so/releases/<plane-version>/docker-compose-airgapped.yml -o docker-compose.yml # Download environment template curl -fsSL https://prime.plane.so/releases/<plane-version>/variables-airgapped.env -o plane.env
-
Configure environment variables
Edit the
plane.envfile to configure your deployment:# Generate a unique machine signature export MACHINE_SIGNATURE=$(uuidgen) # Set your domain export DOMAIN_NAME=plane.yourcompany.com export WEB_URL=https://plane.yourcompany.com export CORS_ALLOWED_ORIGINS=https://plane.yourcompany.com
Update image references in
docker-compose.ymlto point to your private registry:services: web: image: your-registry.io/plane/web-commercial:${APP_RELEASE_VERSION} api: image: your-registry.io/plane/backend-commercial:${APP_RELEASE_VERSION} space: image: your-registry.io/plane/space-commercial:${APP_RELEASE_VERSION} admin: image: your-registry.io/plane/admin-commercial:${APP_RELEASE_VERSION} live: image: your-registry.io/plane/live-commercial:${APP_RELEASE_VERSION} monitor: image: your-registry.io/plane/monitor-commercial:${APP_RELEASE_VERSION} silo: image: your-registry.io/plane/silo-commercial:${APP_RELEASE_VERSION}
Infrastructure services (if using local setup):
services: redis: image: valkey/valkey:7.2.11-alpine postgres: image: postgres:15.7-alpine rabbitmq: image: rabbitmq:3.13.6-management-alpine minio: image: minio/minio:latest
-
Start the services:
docker compose --env-file plane.env up -d
-
Watch the logs to make sure everything starts properly.
- To monitor the database migration process:
docker compose logs -f migrator
- To monitor the API service startup:
docker compose logs -f api
The API is healthy when you see:
api-1 listening atOnce all services are running smoothly, you can access Plane by opening your browser and going to the domain you configured.
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.