Plane
Overview
This SecureAnyCloud image runs Plane v1.3.1, the open source project and issue tracking tool from makeplane, on Ubuntu 24.04 LTS. Plane is a self-hosted alternative to Jira and Linear. Teams organise work into workspaces and projects, then track it as issues (work items) with states, priorities, labels, assignees and estimates. Work items are grouped into cycles and modules and viewed as lists, kanban boards, calendars or spreadsheets.
The image ships the stock upstream Plane Community self-host stack, run with Docker Compose under a systemd service that starts it on boot. The stack bundles a PostgreSQL 15 database, a Valkey cache, a RabbitMQ queue and a MinIO object store for attachments. It also includes the Plane API, background workers, the web, space and admin front ends and a websocket service, all behind a built-in reverse proxy on port 80. Every image is pinned by tag or digest and baked into the image, so nothing is pulled on first boot.
What you get:
- Plane v1.3.1 (stock upstream
makeplane/plane-*images, pinned), run by systemd through Docker Compose - The Plane web console, REST API and websocket service behind a reverse proxy on
:80 - A bundled PostgreSQL 15, Valkey, RabbitMQ and MinIO, all on the same VM
- A per-VM database password, storage keys, application secret key and queue password, generated on first boot
- A first administrator user with a per-VM password, and a per-VM administrative REST API key, generated on first boot and recorded in a root-only file
- A ready-to-use workspace and "Getting Started" project, seeded on first boot
docker.service,plane-configure.service,plane-firstboot.serviceandplane.serviceas systemd units, enabled and active- No baked-in administrator account or shipped data, and an 8 GiB swapfile so the stack runs comfortably on Standard_B2s
- 24/7 SecureAnyCloud support
Prerequisites
You need an active Azure subscription, an SSH key pair, and a VNet with a subnet in the target region.
Standard_B2s (2 vCPU / 4 GiB RAM) is a sensible starting point. Size up for heavier teams.
Configure the network security group (NSG) to allow inbound 22/tcp from your management network and 80/tcp for the web console. Also allow 443/tcp if you terminate TLS.
Plane serves plain HTTP on port 80. For production, front it with your own domain and TLS (see the production hardening step). After the VM comes up, the stack takes two to four minutes to finish its first-boot database migrations.
Step 1 - Deploy from the Azure Marketplace
Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Plane by SecureAnyCloud, and select Create.
On the Basics tab, pick your subscription, resource group, region and size. Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22) and HTTP (80).
Select Review + create, then Create.
Step 2 - Deploy from the Azure CLI
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:plane-ubuntu-24-04:default:latest
az vm create \
--resource-group <your-rg> \
--name plane \
--image sac1647283583153:plane-ubuntu-24-04:default:latest \
--size Standard_B2s \
--admin-username azureuser \
--ssh-key-values ~/.ssh/id_ed25519.pub \
--vnet-name <your-vnet> --subnet <your-subnet> \
--public-ip-sku Standard
az vm open-port --resource-group <your-rg> --name plane --port 80 --priority 1010Step 3 - Connect to your VM
ssh azureuser@<vm-public-ip>Step 4 - Confirm the stack is running
The systemd units bring the whole Docker Compose stack up on boot. Confirm that the units are active and every container is running:
sudo systemctl is-active docker plane-configure plane-firstboot plane
sudo docker compose -f /opt/plane/docker-compose.yaml --env-file /opt/plane/plane.env ps --format '{{.Service}}\t{{.Status}}' | sortThe units should show active, and all twelve services should be up: api, worker, beat-worker, web, space, admin, live, proxy, plane-db, plane-redis, plane-mq and plane-minio.
Step 5 - Retrieve your per-VM credentials
On first boot, the appliance generates every secret uniquely for this VM. It writes the ones you need to a root-only file. Read the file with the secret values redacted:
sudo sed -E 's/^(PLANE_ADMIN_PASSWORD=).*/\1********/; s/^(PLANE_API_KEY=).*/\1********/' /root/plane-credentials.txtThe file holds your web console URL, the administrator email and password, the per-VM REST API key, and the seeded workspace slug and project id. Store the password and API key somewhere safe.
Step 6 - Confirm the API and the REST API key
Confirm that the Plane instance API and web app answer through the proxy on port 80:
curl -s http://127.0.0.1/api/instances/ | jq '{instance: .instance.instance_name, version: .instance.current_version, setup: .instance.is_setup_done}'
curl -s -o /dev/null -w "web app -> HTTP %{http_code}\n" http://127.0.0.1/Next, test the per-VM REST API key end to end. A bogus key is rejected, the real key lists projects, and you can create a work item and read it back. The commands read the key, workspace slug and project id straight from the credentials file:
API_KEY=$(sudo grep '^PLANE_API_KEY=' /root/plane-credentials.txt | cut -d= -f2-)
SLUG=$(sudo grep '^PLANE_WORKSPACE_SLUG=' /root/plane-credentials.txt | cut -d= -f2-)
PROJECT=$(sudo grep '^PLANE_PROJECT_ID=' /root/plane-credentials.txt | cut -d= -f2-) BASE="http://127.0.0.1/api/v1/workspaces/$SLUG" curl -s -o /dev/null -w "bogus key -> HTTP %{http_code} (rejected)\n" -H "X-API-Key: bogus" "$BASE/projects/" curl -s -o /dev/null -w "per-VM key -> HTTP %{http_code}\n" -H "X-API-Key: $API_KEY" "$BASE/projects/"
ITEM=$(curl -s -X POST "$BASE/projects/$PROJECT/issues/" -H "X-API-Key: $API_KEY" -H 'Content-Type: application/json' -d '{"name":"Ship the release"}' | jq -r .id)
curl -s "$BASE/projects/$PROJECT/issues/$ITEM/" -H "X-API-Key: $API_KEY" | jq -r '"created + read back: " + .name'Step 7 - Sign in to the web console
Open http://<vm-public-ip>/ in a browser. Sign in with the administrator email and password from your credentials file. The image has no default account, and the credentials are unique to this VM.
Step 8 - Open your workspace and project
After you sign in, Plane opens the seeded SecureAnyCloud workspace. Its Projects view lists the "Getting Started" project that first boot created for you. Create more projects from here, or open the seeded one to start working.
Step 9 - Work with issues on the board
Open a project's Work items to see its issues. Each work item carries a state, priority, assignees, labels and estimates.
Switch between list, board (kanban), calendar and spreadsheet layouts. Group work into cycles and modules.
Step 10 - Open a work item
Select a work item to open its detail panel. There you set its state, assignees, priority, dates, labels and description. You can also add sub-items, links and comments, and follow its full activity history.
Step 11 - Production hardening
For a production deployment, put Plane behind your own domain name and TLS. The appliance re-derives its public address on every boot, so the console works over the VM's public IP out of the box. Point a DNS record at the VM and serve HTTPS before you invite your team.
Plane's built-in proxy can terminate TLS for you. Edit /opt/plane/plane.env and set APP_DOMAIN, WEB_URL, CORS_ALLOWED_ORIGINS and SITE_ADDRESS. For automatic certificates, also set CERT_EMAIL. Then run sudo systemctl restart plane.
Keep the credentials file readable only by root. Restrict the network security group to the smallest set of source addresses that need access.
Source code and licensing
Plane is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). This image ships stock, unmodified upstream Plane Community Edition images, configured only through the environment file and systemd.
Under section 13 of the AGPL, the complete corresponding source for the version running on this appliance is the pinned upstream release, available at github.com/makeplane/plane (release v1.3.1).
The SecureAnyCloud charge covers packaging, security patching, image maintenance and support. It does not cover the Plane software itself, which remains free.
Maintenance
The Ubuntu base is patched at build time and ships with unattended security upgrades enabled. To update Plane itself, follow the upstream self-host upgrade process for the pinned release line.
The bundled PostgreSQL data lives on the VM's OS disk in a Docker volume. Before you upgrade, back it up with your normal disk-snapshot or pg_dump workflow.
Support
SecureAnyCloud maintains this image and provides 24/7 support. For help deploying or operating Plane on Azure, contact SecureAnyCloud support through the Azure Marketplace listing or at secureanycloud.com.
Deploy on Azure
Launch Plane on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.
View this image
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com
Overview
Plane is an open source project and issue tracking tool, a self-hosted alternative to Jira and Linear. Teams plan and track work in workspaces and projects, using work items that carry states, priorities, labels, assignees, estimates and sub-items. Work items group into cycles for time-boxed sprints and modules for longer streams of work. You can view the same backlog as a list, a kanban board, a calendar or a spreadsheet.
This SecureAnyCloud AMI delivers Plane Community v1.3.1, fully installed and wired as a twelve-container appliance behind a single reverse proxy. The web console answers on port 80 within a few minutes of launch. It runs on infrastructure you control, with no per-seat licence fee and no project data leaving your AWS account.
What is in the image
The image runs twelve long-running containers, all on a private Docker Compose bridge network. Only the proxy publishes a host port. The database, cache, queue and object store are not reachable from outside the instance at all.
Component Image Role Host port
proxy makeplane/plane-proxy:v1.3.1 reverse proxy and the single front door 80, 443
web makeplane/plane-frontend:v1.3.1 the main Plane web application none
admin makeplane/plane-admin:v1.3.1 instance administration console none
space makeplane/plane-space:v1.3.1 public shared views and pages none
live makeplane/plane-live:v1.3.1 live collaborative editing server none
api makeplane/plane-backend:v1.3.1 Django REST API none
worker makeplane/plane-backend:v1.3.1 asynchronous background worker none
beat-worker makeplane/plane-backend:v1.3.1 scheduled job runner none
plane-db postgres:15.7-alpine PostgreSQL database (all projects and work items) none
plane-redis valkey/valkey:7.2.11-alpine Valkey cache none
plane-mq rabbitmq:3.13.6-management-alpine RabbitMQ task queue none
plane-minio minio/minio (digest pinned) S3 compatible object store for attachments none
A thirteenth compose service, migrator, runs the database migration set to completion at boot and then exits. It is a job, not a long-running component.
A note on names. The container is called plane-redis for upstream compatibility, but the engine it runs is Valkey, not Redis. The table above shows what actually runs.
What SecureAnyCloud adds
- No shared secret ever ships. The image is captured with no database, no administrator account and only temporary secret values, and the stack is never started before capture. On your instance's first boot, the database password, the Django
SECRET_KEYthat signs sessions, the object store access and secret keys, the queue password and the live collaboration server key are all generated on your instance. The database initialises against them, and an administrator account plus a REST API key are written to a root-only file. - A dedicated gp3 data volume at
/var/lib/planecarries the entire stateful tier: the Docker data-root, the containerd image and snapshot store, the PostgreSQL cluster, the cache, the queue and uploaded attachments. It is mounted by filesystem UUID, so it reproduces on every instance. You can resize, snapshot and back it up independently of the operating system disk. - The appliance learns its own address on every boot from EC2 instance metadata (IMDSv2) and rewrites the application URL and allowed origins, so the web console keeps working after a stop and start.
- A ready-to-use workspace and project are created during that same first boot, so the tracker is usable the moment the instance comes up.
- The base operating system is fully patched, with unattended security upgrades enabled.
Licensing
Plane is free software under the GNU Affero General Public License v3.0. At the shipped tag, LICENSE.txt at v1.3.1 is the AGPL v3, and COPYRIGHT.txt reads "Plane Software, Inc. and contributors ... SPDX-License-Identifier: AGPL-3.0-only". The v1.3.1 tree contains no ee/ or enterprise/ directory. The whole shipped codebase is therefore AGPL-3.0-only, and nothing in this image is a paid, Pro or Enterprise feature.
This image ships stock, unmodified upstream Plane images, pinned by tag and by digest, and configured externally through an environment file and systemd units. As AGPL section 13 requires, the Corresponding Source for the network-hosted appliance is the pinned upstream release: github.com/makeplane/plane/releases/tag/v1.3.1.
The SecureAnyCloud charge covers packaging, security patching, image maintenance and support. Plane itself charges nothing.
Launching the instance
Subscribe to the listing in AWS Marketplace and launch the AMI. The recommended instance type is m5.large (2 vCPU, 8 GiB RAM).
Plane's own guidance is at least 4 GiB of RAM for the self-hosted stack. The image adds a swapfile on the data volume for the first-boot migration spike.
Your security group needs:
Port Protocol Purpose
22 TCP SSH administration
80 TCP Plane web console and REST API
443 TCP HTTPS, once you terminate TLS with your own certificate
Restrict port 22, and ideally 80 and 443, to your own networks.
Two EBS volumes are attached: a 50 GiB operating system root volume and a 100 GiB gp3 data volume mounted at /var/lib/plane.
Connecting to your instance
SSH in as the login user for the OS variant you launched.
OS variant Login user Example
Ubuntu 24.04 LTS ubuntu ssh -i your-key.pem ubuntu@<public-ip>
First boot
First boot generates every secret on your own instance, initialises the database, runs the full Django migration set and creates your administrator account and seed workspace. On an m5.large this takes a few minutes. The appliance writes a sentinel file when it finishes.
sudo test -f /var/lib/sac/data/plane-firstboot.done && echo "first boot complete"first boot completeConfirm the systemd units that own the appliance are all enabled:
sudo systemctl is-enabled docker.service plane-configure.service plane-firstboot.service plane.service sac-plane-swap.serviceenabled enabled enabled enabled enabledplane-configure.service runs on every boot and resolves the instance's current public address from IMDSv2. plane-firstboot.service is a one-shot unit that runs only once, gated on the sentinel above. plane.service brings the compose stack up and is gated on that same sentinel, so the stack cannot start before the per-instance secrets exist.
Retrieving your credentials
Every credential is unique to your instance and is written to a root-only file at /root/plane-credentials.txt.
The file holds these keys:
sudo grep -oE '^[A-Z_]+=' /root/plane-credentials.txtPLANE_URL= PLANE_ADMIN_EMAIL= PLANE_ADMIN_PASSWORD= <set-at-first-boot>= PLANE_WORKSPACE_SLUG= PLANE_PROJECT_ID=Read the whole file to get the values:
sudo cat /root/plane-credentials.txtPLANE_URL=<PLANE_URL> PLANE_ADMIN_EMAIL=<PLANE_ADMIN_EMAIL> PLANE_ADMIN_PASSWORD=<PLANE_ADMIN_PASSWORD> PLANE_API_KEY=<PLANE_API_KEY> PLANE_WORKSPACE_SLUG=<PLANE_WORKSPACE_SLUG> PLANE_PROJECT_ID=<PLANE_PROJECT_ID>Store these values somewhere safe, and change the administrator password after you sign in. The file is mode 0600 and owned by root, so only a user who can already become root on the instance can read it.
Verifying the deployment
Every container is up
sudo docker compose -f /opt/plane/docker-compose.yaml --env-file /opt/plane/plane.env ps --format 'table {{.Service}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'SERVICE IMAGE STATUS PORTS admin makeplane/plane-admin:v1.3.1 Up 11 minutes (healthy) 80/tcp, 3000/tcp api makeplane/plane-backend:v1.3.1 Up 11 minutes 8000/tcp beat-worker makeplane/plane-backend:v1.3.1 Up 11 minutes 8000/tcp live makeplane/plane-live:v1.3.1 Up 11 minutes 3000/tcp plane-db postgres:15.7-alpine Up 11 minutes 5432/tcp plane-minio minio/minio@sha256:14cea493d9a34af32f524e538b8346cf79f3321eff8e708c1e2960462bd8936e Up 11 minutes 9000/tcp plane-mq rabbitmq:3.13.6-management-alpine Up 11 minutes 4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 15691-15692/tcp, 25672/tcp plane-redis valkey/valkey:7.2.11-alpine Up 11 minutes 6379/tcp proxy makeplane/plane-proxy:v1.3.1 Up 11 minutes 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 443/udp, 2019/tcp space makeplane/plane-space:v1.3.1 Up 11 minutes 3000/tcp web makeplane/plane-frontend:v1.3.1 Up 11 minutes (healthy) 80/tcp, 3000/tcp worker makeplane/plane-backend:v1.3.1 Up 11 minutes 8000/tcpThe PORTS column shows the security model in one view. Every container except proxy lists only its container port. None of them is bound to a host address, so PostgreSQL, Valkey, RabbitMQ and MinIO cannot be reached from the network even if your security group were wide open.
The API and the web console answer
curl -s -o /dev/null -w 'API /api/instances/ HTTP %{http_code}\n' http://127.0.0.1/api/instances/
curl -s -o /dev/null -w 'web UI / HTTP %{http_code}\n' http://127.0.0.1/API /api/instances/ HTTP 200 web UI / HTTP 200Only the proxy is listening on the host
sudo ss -tlnp | grep -E ':(80|443|5432|6379|9000|5672) ' | awk '{print $1, $4, $6}'LISTEN 0.0.0.0:80 users:(("docker-proxy",pid=5055,fd=8)) LISTEN 0.0.0.0:443 users:(("docker-proxy",pid=5079,fd=8)) LISTEN [::]:80 users:(("docker-proxy",pid=5063,fd=8)) LISTEN [::]:443 users:(("docker-proxy",pid=5088,fd=8))Ports 5432 (PostgreSQL), 6379 (Valkey), 9000 (MinIO) and 5672 (RabbitMQ) return nothing, because they are not bound on the host.
The whole stateful tier is on the dedicated volume
findmnt -no SOURCE,TARGET,FSTYPE /var/lib/plane
findmnt -no SOURCE,TARGET,FSTYPE /var/lib/containerd/dev/nvme1n1 /var/lib/plane ext4 /dev/nvme1n1[/containerd-store] /var/lib/containerd ext4Both the Docker data-root and the containerd image store live on the data volume. This matters: Docker 29 keeps image layers under /var/lib/containerd, not under the Docker data-root. Relocating only the data-root would leave several gigabytes of Plane images on the operating system disk.
Both are bind-mounted onto the data volume, and both entries are recorded in /etc/fstab, so the layout reproduces on every instance.
grep -E 'plane|containerd' /etc/fstabUUID=985b4f29-d530-4741-bf37-d250e81c2e33 /var/lib/plane ext4 defaults,nofail 0 2 /var/lib/plane/containerd-store /var/lib/containerd none bind,nofail,x-systemd.requires-mounts-for=/var/lib/plane 0 0df -h --output=target,size,used,avail /var/lib/plane /Mounted on Size Used Avail /var/lib/plane 98G 8.2G 85G / 48G 3.4G 45GThe shipped image set is pinned
sudo docker images --format '{{.Repository}}:{{.Tag}}' | sortmakeplane/plane-admin:v1.3.1 makeplane/plane-backend:v1.3.1 makeplane/plane-frontend:v1.3.1 makeplane/plane-live:v1.3.1 makeplane/plane-proxy:v1.3.1 makeplane/plane-space:v1.3.1 minio/minio:latest postgres:15.7-alpine rabbitmq:3.13.6-management-alpine valkey/valkey:7.2.11-alpineEvery image is baked into the AMI, so your instance never pulls from a registry at first boot. The Plane images are pinned by release tag, and MinIO is additionally pinned by digest in the compose file.
sudo grep '^APP_RELEASE=' /opt/plane/plane.envAPP_RELEASE=v1.3.1Signing in to the web console
Open http://<public-ip>/ in a browser. Plane asks for your email first, then your password.
Sign in with the PLANE_ADMIN_EMAIL and PLANE_ADMIN_PASSWORD values from the credentials file. You land straight in the seed workspace. The administrator profile is already marked onboarded, so there is no setup wizard.
Open a project to see the work item list, where each item shows its state, priority, dates, assignees and labels inline.
Use the layout switcher, immediately left of Display, to move between List, Board and Calendar. The board groups by state and supports drag and drop between columns.
Configure workflow states per project under project settings. They are grouped into the five Plane state groups: Backlog, Unstarted, Started, Completed and Cancelled.
The instance administration console is at http://<public-ip>/god-mode/. Use it to configure email, authentication providers and instance-wide settings. It takes the same administrator email and password.
Using the REST API
Every instance is created with an administrative REST API key. Read it into a shell variable rather than printing it, and send it in an X-API-Key header.
List the projects in your workspace:
KEY=$(sudo grep '^PLANE_API_KEY=' /root/plane-credentials.txt | cut -d= -f2-)
SLUG=$(sudo grep '^PLANE_WORKSPACE_SLUG=' /root/plane-credentials.txt | cut -d= -f2-)
curl -s -H "X-API-Key: $KEY" "http://127.0.0.1/api/v1/workspaces/$SLUG/projects/" | jq -r '.results[] | "\(.identifier)\t\(.name)"'GS Getting StartedCreate a work item:
KEY=$(sudo grep '^PLANE_API_KEY=' /root/plane-credentials.txt | cut -d= -f2-)
SLUG=$(sudo grep '^PLANE_WORKSPACE_SLUG=' /root/plane-credentials.txt | cut -d= -f2-)
PROJ=$(sudo grep '^PLANE_PROJECT_ID=' /root/plane-credentials.txt | cut -d= -f2-)
curl -s -X POST "http://127.0.0.1/api/v1/workspaces/$SLUG/projects/$PROJ/issues/" -H "X-API-Key: $KEY" -H 'Content-Type: application/json' -d '{"name":"Check the deployment guide end to end"}' | jq -r '"created \(.sequence_id): \(.name)"'created 14: Check the deployment guide end to endAn unauthenticated or wrong key is rejected:
SLUG=$(sudo grep '^PLANE_WORKSPACE_SLUG=' /root/plane-credentials.txt | cut -d= -f2-)
curl -s -o /dev/null -w 'bogus key: HTTP %{http_code}\n' -H 'X-API-Key: not-a-real-key' "http://127.0.0.1/api/v1/workspaces/$SLUG/projects/"bogus key: HTTP 403Issue scoped API keys per user from Settings > API tokens in the web console rather than sharing the bootstrap key.
Day two operations
Managing the stack
sudo systemctl status plane --no-pager | head -5plane.service is a one-shot unit that runs docker compose up -d. To restart the whole appliance:
sudo systemctl restart plane.serviceTo read the logs of a single component:
sudo docker compose -f /opt/plane/docker-compose.yaml --env-file /opt/plane/plane.env logs --tail 20 apiUsing your own domain name and TLS
On every boot, the appliance rewrites APP_DOMAIN, WEB_URL and CORS_ALLOWED_ORIGINS to the instance's current public IPv4. This is what makes it work out of the box. When you have a DNS name you want to use instead, follow these three steps:
- Stop the per-boot rewrite so it cannot overwrite your values:
sudo systemctl disable --now plane-configure.service - Edit
/opt/plane/plane.envwith your editor of choice, settingAPP_DOMAIN=tracker.example.com,WEB_URL=https://tracker.example.comandCORS_ALLOWED_ORIGINS=https://tracker.example.com - Apply the change:
sudo systemctl restart plane.service
Check the current values at any time:
sudo grep -E '^(APP_DOMAIN|WEB_URL|CORS_ALLOWED_ORIGINS)=' /opt/plane/plane.envFor TLS, the simplest production setup is an Application Load Balancer or CloudFront distribution in front of the instance, holding an ACM certificate and forwarding to port 80. To terminate TLS on the instance instead, the bundled proxy also supports ACME directly through the CERT_EMAIL, CERT_ACME_CA and LISTEN_HTTPS_PORT variables in the same env file.
Outbound email
Plane sends workspace invitations and notifications by email. Configure your SMTP relay in the instance administration console at http://<public-ip>/god-mode/, under Email.
Backups
Everything stateful lives on the /var/lib/plane volume, so an EBS snapshot of that volume captures the database, the queue, the cache and every uploaded attachment together. Schedule snapshots with AWS Backup or a Data Lifecycle Manager policy. For a logical database dump instead, run:
sudo docker compose -f /opt/plane/docker-compose.yaml --env-file /opt/plane/plane.env exec -T plane-db pg_dump -U plane plane | gzip > /var/tmp/plane-backup.sql.gz && ls -lh /var/tmp/plane-backup.sql.gzResizing the data volume
Grow the EBS volume in the console or with the CLI, then extend the filesystem in place. This needs no downtime and no unmount:
sudo resize2fs /dev/nvme1n1 && df -h --output=target,size,avail /var/lib/planePatching
Unattended security upgrades are enabled for the operating system. Plane itself is pinned by image tag, so upgrading is a deliberate change. Edit APP_RELEASE in /opt/plane/plane.env to the new version, pull, and bring the stack back up.
Read the upstream release notes first and take a snapshot of the data volume. The migrator service runs the database migrations on the way up.
Support
SecureAnyCloud provides 24/7 technical support for this product by email and live chat.
Contact: sales@secureanycloud.com
We can help with deployment and initial configuration, creating your first workspaces and projects, inviting users and configuring roles, re-pointing the instance at your own domain, TLS termination, outbound email, attachment storage and retention, backing up the bundled database, resizing the data volume, performance tuning and patching guidance.
Deploy on AWS
Launch Plane with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com