LIVEReading: Run Your Own Project Manager: Plane on DockerTotal time: 12 minSteps: 6Worked first time: 72% LIVEReading: Run Your Own Project Manager: Plane on DockerTotal time: 12 minSteps: 6Worked first time: 72%
CBW
Run Your Own Project Manager: Plane on Docker
Mediumgithub.com/makeplane/plane2026-06-17

Run Your Own Project Manager: Plane on Docker

Plane is a free, open-source alternative to Jira and Linear. This guide gets you a fully working self-hosted instance running on your own machine or server using Docker.

// Build stats

  • Total time12 min
  • Number of steps6
  • DifficultyMedium
  • Worked first time72%
// Before you start

What you need

  • A Linux, Mac, or Windows machine with at least 4 GB RAM
  • Docker Desktop installed and running (docker.com/get-started)
  • Docker Compose included (comes with Docker Desktop)
  • A terminal or command prompt you can type into
  • Port 80 free on your machine (no other web server running)
01
Step 1 of 6

Download the official Plane setup script

2 min

Plane provides an official install script that downloads everything you need. This single command pulls the script from Plane's servers and runs it. It will create a folder called 'plane-selfhost' in your current directory and place all the required config files inside it.

Terminal · mac
$ curl -fsSL https://raw.githubusercontent.com/makeplane/plane/master/deploy/selfhost/install.sh | bash
What you should see
You should see lines like 'Downloading docker-compose.yml...' and 'Downloading plane.env...' followed by a success message and instructions to configure your environment.
This might happen

curl: command not found on some Linux servers

Run 'sudo apt install curl -y' (Ubuntu/Debian) or 'sudo yum install curl -y' (CentOS/RHEL) first, then retry.

02
Step 2 of 6

Enter the Plane folder the script created

1 min

The install script created a new directory called 'plane-selfhost' where all the configuration files live. You need to move into that folder before running any further commands.

Terminal · mac
$ cd plane-selfhost
What you should see
Your terminal prompt changes to show you are now inside the plane-selfhost directory. Run 'ls' and you should see files like docker-compose.yml and plane.env.
03
Step 3 of 6

Set your domain or IP address in the config file

3 min

Plane needs to know what address it will be reached at. Open the file called 'plane.env' in any text editor. Find the line that says 'WEB_URL=http://localhost' and change 'localhost' to your server's IP address or domain name if you are hosting on a remote server. If you are just testing on your own computer, leave it as localhost. Also check the line 'SECRET_KEY' — it should already have a random value; leave it as-is.

Terminal · mac
$ nano plane.env
What you should see
The plane.env file opens in your terminal. You can scroll through it with arrow keys. Press Ctrl+X, then Y, then Enter to save and exit after making your change.
This might happen

nano is not installed on some minimal Linux servers

Use 'vi plane.env' instead. Press 'i' to edit, make your change, then press Escape, type ':wq', and press Enter to save.

04
Step 4 of 6

Pull all Docker images

5-10 min

This command downloads all the pieces Plane needs: the web app, the API server, the background worker, and the database. It can take several minutes depending on your internet speed. You only need to do this once — Docker caches the images locally.

Terminal · mac
$ docker compose pull
What you should see
You will see a list of services being pulled, each showing download progress bars. When finished, every service should show 'Pull complete' or 'Already exists'.
This might happen

'docker compose' not found — older Docker versions use 'docker-compose' with a hyphen

Try 'docker-compose pull' instead. If that also fails, update Docker Desktop to the latest version.

05
Step 5 of 6

Start Plane

2 min

This command starts all Plane services in the background. The '-d' flag means detached — it runs silently so your terminal stays free. Plane will be ready about 30 seconds after this command finishes.

Terminal · mac
$ docker compose up -d
What you should see
You will see each service name followed by 'Started' or 'Running'. There should be no lines showing 'Error' or 'Exit'.
This might happen

Port 80 is already in use — you will see 'address already in use' error

Open docker-compose.yml, find the line '- 80:80' under the proxy service, and change the left number to an unused port like 8080. Then rerun 'docker compose up -d' and access Plane at http://localhost:8080.

06
Step 6 of 6

Open Plane and create your admin account

3 min

Open your web browser and go to http://localhost (or the IP/domain you set in step 3). You will land on the Plane sign-up page. Create your first account — this becomes the workspace owner. After signing in, you will be prompted to create a workspace and your first project.

Terminal · mac
$ open http://localhost
What you should see
The Plane sign-up screen loads in your browser. You can register with an email and password. No external email verification is required by default.
This might happen

Page does not load immediately after 'docker compose up'

Wait 30-60 seconds for all services to finish starting, then refresh. If it still fails, run 'docker compose ps' to check that all services show status 'Up'.

// Status

cooked. baked. worked.

A fully working Plane workspace running at http://localhost where you can create projects, track tasks, run sprints, write docs, and invite teammates — all on infrastructure you control.

// the honest bit

The honest part

This setup runs Plane over plain HTTP with no SSL. It is fine for local or internal network use, but do not expose it to the public internet without adding HTTPS — Plane's docs cover adding a reverse proxy with SSL. Email notifications are disabled by default; enabling them requires editing SMTP settings in plane.env. Plane updates frequently and the self-hosted version may lag a few weeks behind the cloud version. Backups are your responsibility — the data lives in Docker volumes on your machine.