Independent testing Updated August 2026 387 self-hosting guides 5 VPS providers tested

guide

How to Self-Host Plane on a VPS (Complete Guide)

Install Plane, the open-source Jira alternative, on a VPS with the official installer. Covers real sizing, the 13-container stack, DNS, backups and upgrades.

Plane is an open-source project management tool - issues, cycles, modules and pages, in the same space as Jira and Linear - and it is one of the heavier self-hosted apps you can put on a small VPS. The Community Edition ships a thirteen-container stack, so the interesting part of this guide is sizing the server correctly, not typing docker compose up.

Why Self-Host Plane?

The hosted plan bills per seat. Self-hosting removes that cost and keeps issue history, attachments and project data on infrastructure you control - which matters if your issue tracker holds client names, security findings or unreleased roadmap items. The Community Edition is AGPL-3.0 licensed, so you can run it for a commercial team without a licence fee.

The trade-off is real: you own upgrades, backups and the Postgres instance. If nobody on the team wants that job, the hosted version is the honest answer.

Prerequisites

Planeโ€™s documentation states the requirements plainly:

That 4 GB floor is not padding. The stack runs web, admin, space, api, worker, beat-worker, migrator, live, a proxy, plus postgres:15.7-alpine, valkey/valkey:7.2.11-alpine, rabbitmq:3.13.6-management-alpine and minio/minio. Thirteen containers idling consume most of 4 GB before a single user logs in.

If you still need a server, Contabo, Hetzner Cloud and DigitalOcean all have plans that clear the bar - see the sizing table below, and our full VPS comparison for the wider field.

Step 1: Choose a Plan That Clears 4 GB

This is where most Plane installs go wrong. The cheapest plan at nearly every provider is 1 GB of RAM, which is a quarter of Planeโ€™s documented minimum.

PlanvCPU / RAM / DiskPriceVerdict for Plane
Contabo Cloud VPS 44 / 8 GB / 100 GB SSD5.50 EUR/mo netMeets the recommended 8 GB
Hetzner CX334 / 8 GB / 80 GB NVMe8.49 EUR/mo netMeets the recommended 8 GB
Hetzner CX232 / 4 GB / 40 GB NVMe5.49 EUR/mo netExactly the minimum; fine for a small team
DigitalOcean entry droplet1 / 1 GB / 25 GB6 USD/moToo small - will not run Plane

Deploy Ubuntu 24.04 LTS, then create a non-root user and enable the firewall:

sudo apt update && sudo apt upgrade -y
sudo adduser plane
sudo usermod -aG sudo plane
sudo ufw allow OpenSSH && sudo ufw allow 80 && sudo ufw allow 443
sudo ufw enable

Step 2: Install Docker

Plane needs Compose v2. Install from Dockerโ€™s own repository so you get docker-compose-plugin rather than the end-of-life v1 script:

sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER

Log out and back in, then confirm you have v2:

docker compose version

Step 3: Point DNS at the Server First

Do this before running the installer. It asks for your domain during setup and writes it into WEB_URL and CORS_ALLOWED_ORIGINS; if DNS is not resolving yet, certificate issuance fails and you will be editing environment files afterwards.

Create an A record for plane.example.com pointing at the VPS IP address and wait for it to resolve:

dig +short plane.example.com

Step 4: Run the Official Installer

Plane distributes a single install script that pulls prebuilt images and writes a managed docker-compose.yaml:

curl -fsSL https://prime.plane.so/install/ | sh -

The script prompts for your domain, then offers Express (defaults) or Advanced (lets you set individual variables). Express is right for a first install. When it finishes, Plane is served on ports 80 and 443, controlled by LISTEN_HTTP_PORT and LISTEN_HTTPS_PORT.

A note on the repository: the docker-compose.yml in the GitHub repo builds every service from source rather than pulling images. That is a contributor workflow - a build needs far more RAM than running the app does, and it will fail or thrash on a 4 GB VPS. Use the installer.

Open https://plane.example.com and create the first account. That account becomes the instance admin; the admin panel lives at /god-mode/, where you configure SMTP, sign-up restrictions and authentication.

Step 5: Back Up the Parts That Matter

Two things hold your data: the PostgreSQL volume and the MinIO volume (which stores every file attachment). A snapshot of the VPS covers both, but a database dump you can restore selectively is worth having:

docker exec plane-db pg_dump -U plane plane | gzip > plane-$(date +%F).sql.gz

Copy the dump off the server. A backup sitting on the disk you are backing up is not a backup.

Comparing VPS Options for Self-Hosting Plane

ProviderEntry plan clearing 4 GBPrice (per month)NotesLink
ContaboCloud VPS 4 - 4 vCPU, 8 GB, 100 GB SSD5.50 EUR netCheapest route to the recommended 8 GBContabo
Hetzner CloudCX23 - 2 vCPU, 4 GB, 40 GB NVMe5.49 EUR netMeets the minimum; CX33 at 8.49 for 8 GBHetzner
DigitalOcean2 vCPU, 4 GB, 80 GB SSD24 USDDearer, but the docs and snapshots are the best hereDigitalOcean
Vultr2 vCPU, 4 GB, 80 GB SSD20 USDCheapest of the three; wide region choiceVultr
Linode (Akamai)2 vCPU, 4 GB, 80 GB SSD24 USDPredictable performance, strong APILinode

The pattern is hard to miss: the US providers charge 20-24 USD for the 4 GB tier, roughly three to four times the European equivalent. For a self-hosted issue tracker that serves one office in one region, that gap is difficult to justify.

For the full field, see our complete VPS comparison.

Where Teams Get Caught

Sizing on the marketing page instead of the docs. Plane looks like a web app; it behaves like a small platform. Four GB is the floor, not the target.

Skipping SMTP. Without mail configured in /god-mode/, invitations never arrive and you cannot add anyone to the workspace. Set it up before onboarding the team.

Forgetting MinIO in the backup. Dumping Postgres alone gives you every issue and comment with every attachment missing.

Plane is worth the setup if your team already lives in an issue tracker and you would rather not pay per seat for it. Size the box properly, put the backups somewhere else, and it is a quiet service to run.

For more self-hosting projects and tips, browse the awesome-selfhosted list or the r/selfhosted community.

Frequently asked questions

Can I self-host Plane on a VPS with 1 GB or 2 GB of RAM?

No. Plane's own documentation sets the floor at 2 CPU cores and 4 GB of RAM, and the Community Edition compose stack starts thirteen containers including PostgreSQL, Valkey, RabbitMQ and MinIO. On a 2 GB box the installer will run but containers get OOM-killed under any real use. 4 GB is the minimum that works and 8 GB is what the docs recommend for production.

How do I upgrade Plane to a newer release?

Re-run the management script the installer placed on your server and choose the upgrade option, or from the install directory run docker compose pull followed by docker compose up -d. The migrator container applies database migrations on start, so take a PostgreSQL dump and snapshot the VPS before you upgrade. Read the release notes first, since major versions occasionally change environment variables.

Do I need a domain name to run Plane?

In practice yes. The installer asks for a domain during setup and writes it into WEB_URL and CORS_ALLOWED_ORIGINS, which the frontend and API use to talk to each other. A bare IP address works for a local trial but breaks CORS as soon as you change the address, and you cannot issue a Let's Encrypt certificate without a domain.