| title | Upgrade from Community to Commercial Edition |
|---|---|
| description | Upgrade self-hosted Plane to the latest version. Step-by-step guide for updating your Plane installation safely. |
| keywords | plane upgrade community to commercial, edition migration, plane pro upgrade, plane business upgrade, self-hosting upgrade |
The Commercial edition comes with the free plan and the flexibility to upgrade to a paid plan at any point.
Warning
The instructions provided on this page are specific to installations using Docker. If you are running Plane on Kubernetes, you'll need to manually create a database dump and back up your file storage by copying the relevant volumes or storage paths.
- Install the Commercial Edition on a fresh machine, not the one running the Plane Community Edition.
- Be sure to log in as the root user or as a user with sudo access. The
/optfolder requires sudo or root privileges.
:::tabs key:upgrade-options == Standard setup (built-in DB & storage) {#standard-setup}
This upgrade path is for installations using Plane's default PostgreSQL database and MinIO object storage.
-
Download the latest version of
setup.sh.curl -fsSL https://github.com/makeplane/plane/releases/latest/download/setup.sh -o setup.sh
-
Run the setup.sh backup script to take the backup of the Community Edition instance.
./setup.sh backup
-
When done, your data will be backed up to the folder shown on the screen. e.g.,
/plane-selfhost/plane-app/backup/20240522-1027This folder will contain 3tar.gzfiles.pgdata.tar.gzredisdata.tar.gzuploads.tar.gz
-
Copy all the three files from the server running the Community Edition to any folder on the server running the Commercial Edition.
e.g.,
~/ce-backup
-
Start any command-line interface like Terminal and go into the folder with the back-up files.
cd ~/ce-backup -
Copy and paste the script below on Terminal and hit Enter.
TARGET_DIR=/opt/plane/data sudo mkdir -p $TARGET_DIR for FILE in *.tar.gz; do if [ -e "$FILE" ]; then tar -xzvf "$FILE" -C "$TARGET_DIR" else echo "No .tar.gz files found in the current directory." exit 1 fi done mv $TARGET_DIR/pgdata/ $TARGET_DIR/db mv $TARGET_DIR/redisdata/ $TARGET_DIR/redis mkdir -p $TARGET_DIR/minio mv $TARGET_DIR/uploads/ $TARGET_DIR/minio/uploads/ -
This script will extract your Community Edition data and restore it to
/opt/plane/data.
== Managed services (external DB and storage) {#managed-services}
This upgrade path is for installations using external or managed database and object storage services (like AWS RDS and S3). Since your data already lives in external services, you only need to update your configuration — no backup and restore required.
-
Open the
plane.envfile located at/opt/plane/plane.env. -
Configure database connection.
-
Find the
DATABASE_URLenvironment variable. -
Verify it points to your external database:
DATABASE_URL=postgresql://user:password@your-db-host:5432/planeIf you need to change it, update the value with your managed database connection string.
-
Configure object storage
- Find the
#DATASTORE SETTINGSsection inplane.env - Update these environment variables for your external storage:
USE_MINIO=0 AWS_REGION=us-east-1 AWS_ACCESS_KEY_ID=<your-access-key> AWS_SECRET_ACCESS_KEY=<your-secret-key> AWS_S3_ENDPOINT_URL=https://s3.amazonaws.com AWS_S3_BUCKET_NAME=plane-uploads
:::info Setting
USE_MINIO=0disables the local MinIO service and enables external object storage (S3 or S3-compatible services). ::: - Find the
-
-
Restart Plane services to apply the configuration:
prime-cli restart
Your Commercial Edition instance is now connected to your existing external database and storage. :::
:::details Manual backup and restore without CLI
Use this method if you prefer to back up data manually or if the setup.sh script isn't working for your environment.
- PostgreSQL database (all Plane data)
- MinIO uploads (attachments, images, files)
- Plane CE and Commercial versions should be compatible
- Shell access to both servers
- Docker installed on both servers
-
Create backup folders:
mkdir -p ~/ce-backups/db mkdir -p ~/ce-backups/minio/uploads cd ~/ce-backups
-
Back up PostgreSQL data:
docker cp plane-app-plane-db-1:/var/lib/postgresql/data/. db/
-
Back up MinIO uploads:
docker cp plane-app-plane-minio-1:/export/uploads minio/uploads/
-
Verify backup sizes:
du -sh db minio/uploads
Make sure sizes look reasonable (not just a few KB).
-
Transfer backup to Commercial server:
scp -r ~/ce-backups user@commercial-server:/tmp/
-
Stop Plane:
prime-cli stop
Verify all containers are down:
docker ps
-
Back up existing Commercial data (safety precaution):
mv /opt/plane/data/db /opt/plane/data/db.bak mv /opt/plane/data/minio/uploads /opt/plane/data/minio/uploads.bak
-
Restore PostgreSQL:
mv /tmp/ce-backups/db /opt/plane/data/db
-
Restore MinIO uploads:
mv /tmp/ce-backups/minio/uploads /opt/plane/data/minio/uploads
-
Start Plane:
prime-cli restart
- Login works
- Projects are visible
- Attachments open correctly
If something fails, restore from the backup you created in step 2:
prime-cli stop
rm -rf /opt/plane/data/db
mv /opt/plane/data/db.bak /opt/plane/data/db
rm -rf /opt/plane/data/minio/uploads
mv /opt/plane/data/minio/uploads.bak /opt/plane/data/minio/uploads
prime-cli restart:::