Project management refers to tasks of planning, organizing, and executing tasks and resources to achieve specific goals within defined constraints such as budgets, scope and time. Jira, developed by Atlassian, is one of the popular project management tools in the market today. It allows teams to create and track projects, set priorities, assign responsibilities, and monitor progress in real time. What has contributed to its popularity is the cool features such as customizable workflows and support for various project management methodologies, such as Agile and Scrum. It also offers reporting and analytics features that enable data-driven decision-making.
Plane is an open-source alternative to the popular Jira project management Tool. This tool has begun to gain popularity due to its cool features and simplicity. It offers users a flexible approach to project management, starting with a simple task-tracking tool and allowing them to seamlessly embrace diverse project management methodologies such as Agile, Waterfall, etc., as per their evolving needs.
There are several features associated with the Plane Project management tool, including:
- GitHub Sync: This allows you to streamline the planning process by syncing your GitHub issues with Plane. This will in turn help keep all your issues in one place for better tracking and collaboration.
- Issue Planning and Tracking: On Plane, you are able to create issues and add details easily using a powerful rich text editor that supports file uploads. You can also add sub-properties and references to issues for better organization and tracking.
- Issue Attachments: With Plane, you can collaborate effectively with teams by attaching files to issues. This makes it easy for the team to find and share important project-related documents.
- Layouts: It also allows users to modify their project view with their preferred layout. They are able to choose from List, Calendar or Kanban on how to visualize the project.
- Cycles: The cycles will make it easier to keep your team on track and productive. You will also get insights into your project’s progress with burn-down charts and other vital features.
- Modules: Breaking down a large project into smaller and manageable modules gives you the ability to assign them to different teams to easily track and plan your project’s progress.
- Command K: The new Command + K menu gives you the opportunity to enjoy a better user experience. You are able to manage and navigate through your projects from one convenient location with ease.
There are two options offered when setting up Plane. These are:
- Plane Cloud: This is a hosted version where you only need to create a new account and quickly get started.
- Plane Self-hosted: This is the option for those who want to run it in their local environment. Here, several configurations are involved and the user has full control over the setup.
In this guide, we will learn how to set up the self-hosted Plane project management tool – Jira Open Source Alternative.
1. Install Docker and Docker Compose
The recommended option when setting up the self-hosted Plane Project Management Tool is to use Docker Compose. You need to ensure Docker and Docker-compose have been installed.
Install Docker using this guide
Install Docker-Compose using this guide:
2. Download and Configure Plane Project Management Tool
We will then proceed and clone the GitHub repository that provides the files. Ensure git
has been installed:
##On Debian/Ubuntu
sudo apt update && sudo apt install git -y
##On Rhel/Rocky/Alma/CentOS
sudo yum install git -y
Now clone the repository and switch to the directory:
git clone --depth 1 -b master https://github.com/makeplane/plane.git && cd plane
The directory has the .env.example file that holds all the required environment variables for Plane. We will use the file to create the .env file. To achieve that, we will use the setup.sh script as shown:
./setup.sh http://<your_ip|domain_name>
For example:
./setup.sh https://plane.computingforgeeks.com
Now you will have the environment variables file
vim .env
The file has several variables, modify the required ones for your setup.
# Frontend
# Extra image domains that need to be added for Next Image
NEXT_PUBLIC_EXTRA_IMAGE_DOMAINS=
# Google Client ID for Google OAuth
NEXT_PUBLIC_GOOGLE_CLIENTID=""
# Github ID for Github OAuth
NEXT_PUBLIC_GITHUB_ID=""
# Github App Name for GitHub Integration
NEXT_PUBLIC_GITHUB_APP_NAME=""
# Sentry DSN for error monitoring
NEXT_PUBLIC_SENTRY_DSN=""
# Enable/Disable OAUTH - default 0 for selfhosted instance
NEXT_PUBLIC_ENABLE_OAUTH=0
# Enable/Disable sentry
NEXT_PUBLIC_ENABLE_SENTRY=0
# Enable/Disable session recording
NEXT_PUBLIC_ENABLE_SESSION_RECORDER=0
# Enable/Disable event tracking
NEXT_PUBLIC_TRACK_EVENTS=0
# Slack for Slack Integration
NEXT_PUBLIC_SLACK_CLIENT_ID=""
# Backend
# Debug value for api server use it as 0 for production use
DEBUG=0
# Error logs
SENTRY_DSN=""
# Database Settings
PGUSER="plane"
PGPASSWORD="plane"
PGHOST="plane-db"
PGDATABASE="plane"
DATABASE_URL=postgresql://${PGUSER}:${PGPASSWORD}@${PGHOST}/${PGDATABASE}
# Redis Settings
REDIS_HOST="plane-redis"
REDIS_PORT="6379"
REDIS_URL="redis://${REDIS_HOST}:6379/"
# Email Settings
EMAIL_HOST=""
EMAIL_HOST_USER=""
EMAIL_HOST_PASSWORD=""
EMAIL_PORT=587
EMAIL_FROM="Team Plane <[email protected]>"
EMAIL_USE_TLS="1"
EMAIL_USE_SSL="0"
# AWS Settings
AWS_REGION=""
AWS_ACCESS_KEY_ID="access-key"
AWS_SECRET_ACCESS_KEY="secret-key"
AWS_S3_ENDPOINT_URL="http://plane-minio:9000"
# Changing this requires change in the nginx.conf for uploads if using minio setup
AWS_S3_BUCKET_NAME="uploads"
# Maximum file upload limit
FILE_SIZE_LIMIT=5242880
# GPT settings
OPENAI_API_KEY=""
GPT_ENGINE=""
# Github
GITHUB_CLIENT_SECRET="" # For fetching release notes
# Settings related to Docker
DOCKERIZED=1
# set to 1 If using the pre-configured minio setup
USE_MINIO=1
# Nginx Configuration
NGINX_PORT=127.0.0.1:80
# Default Creds
DEFAULT_EMAIL="[email protected]"
DEFAULT_PASSWORD="Passw0rd!"
# SignUps
ENABLE_SIGNUP="1"
# Auto generated and Required that will be generated from setup.sh
NEXT_PUBLIC_API_BASE_URL=https://plane.computingforgeeks.com
SECRET_KEY="22d69igbubb9z3rinevxi7aloiepsdvygomp3he8zb393qonj0"
WEB_URL=https://plane.computingforgeeks.com
After setting up the environment variables such the Nginx port to 127.0.0.1:80(you can leave the default if you don’t want to secure the traffic with HTTPS) and the default user creds save the file and create the required volumes to persist the data.
3. Create Persistent Volumes for Plane
Plane requires 3 volumes to store data for the Redis, PostgreSQL and Minio containers. So we will create the volumes as shown below:
First, create the directories:
sudo mkdir -p /plane/data/redis
sudo mkdir /plane/data/pgdata
sudo mkdir /plane/data/minio
Set the required permissions:
sudo chmod 775 -R /plane/data
sudo chown -R $USER:docker /plane/data
On Rhel-based systems, configure SELinux as shown:
sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
Now proceed and create the Docker volumes as shown:
- For Redis
docker volume create --driver local \
--opt type=none \
--opt device=/plane/data/redis \
--opt o=bind plane_redisdata
- For PostgreSQL
docker volume create --driver local \
--opt type=none \
--opt device=/plane/data/pgdata \
--opt o=bind plane_pgdata
- For Minio
docker volume create --driver local \
--opt type=none \
--opt device=/plane/data/minio \
--opt o=bind plane_uploads
Once created, view the volumes with the command:
$ docker volume list
DRIVER VOLUME NAME
local plane_pgdata
local plane_redisdata
local plane_uploads
4. Run Self-Hosted Plane Project Management Tool
After all the above activities have been performed, issue the command below to start Plane:
docker compose -f docker-compose-hub.yml up -d
Sample Output:
[+] Running 78/9
✔ plane-db 7 layers [⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 32.3s
✔ plane-api 21 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 27.0s
✔ createbuckets 4 layers [⣿⣿⣿⣿] 0B/0B Pulled 28.9s
✔ plane-worker Pulled 27.0s
✔ plane-proxy 11 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 14.4s
✔ plane-minio 5 layers [⣿⣿⣿⣿⣿] 0B/0B Pulled 33.4s
✔ plane-web 15 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 38.4s
✔ plane-beat-worker Pulled 27.0s
✔ plane-redis 6 layers [⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 18.0s
[+] Running 13/13
✔ Network plane_default Created 0.1s
✔ Volume "plane_uploads" Created 0.0s
✔ Volume "plane_redisdata" Created 0.0s
✔ Volume "plane_pgdata" Created 0.0s
✔ Container plane-redis Created 0.3s
✔ Container plane-minio Created 0.4s
✔ Container plane-db Created 0.3s
✔ Container planebackend Created 0.0s
✔ Container plane-createbuckets-1 Created 0.0s
✔ Container planebeatworker Created 0.0s
✔ Container planebgworker Created 0.0s
✔ Container planefrontend Created 0.0s
✔ Container planeproxy Created 0.0s
View if all the containers are running:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
97e530b38afa makeplane/plane-proxy:latest "/docker-entrypoint.…" 9 seconds ago Up 4 seconds 127.0.0.1:80->80/tcp planeproxy
37e38ccc4c2e makeplane/plane-frontend:latest "docker-entrypoint.s…" 20 seconds ago Up 4 seconds 3000/tcp planefrontend
b012cf6c3794 makeplane/plane-worker:latest "./bin/worker" 31 seconds ago Up 5 seconds 8000/tcp planebgworker
dad00f2f31a6 makeplane/plane-worker:latest "./bin/beat" 31 seconds ago Up 5 seconds 8000/tcp planebeatworker
c837499e6c20 makeplane/plane-backend:latest "./bin/takeoff" 34 seconds ago Up 7 seconds 8000/tcp planebackend
2ff90b28ba85 postgres:15.2-alpine "docker-entrypoint.s…" 35 seconds ago Up 7 seconds 5432/tcp plane-db
32ad92170fed minio/minio "/usr/bin/docker-ent…" 35 seconds ago Up 7 seconds 9000/tcp plane-minio
c6b24b4eb349 redis:6.2.7-alpine "docker-entrypoint.s…" 32 minutes ago Up 32 minutes 6379/tcp plane-redis
We now have Plane exposed on port 80 on localhost only.
5. Access and Use Plane Project Management Tool
Now you will have Plane running and accessible only on localhost using the URL http://localhost or http://domain_name/

Login using the creds set in the variables file. If unchanged, the default values are username “[email protected]” password “password123“. You can also sign up with a new account since the feature was enabled in the variables file. If you do not want new sign-ups, you can disable it.
Once authenticated, you will be required to set up the profile.

Then create a workspace.

You can then invite workers for collaboration.

Voila! This is the Plane Project Management Tool dashboard.

Create your first project.

The project will now be available as shown.

You can then edit the project as desired.

The Plane dashboard looks like this.

6. Secure Plane Project Management Tool with SSL
It is also possible to secure the Plane Frontend using SSL. To achieve that, you need to generate certificates for your domain name. These can be self-signed or trusted certs.
- Using Let’sEncrypt
For Trusted SSL certs, we can use Let’sEncrypt.
##On Debian/Ubuntu
sudo apt update
sudo apt install certbot
# Fedora
sudo dnf install certbot
##On Rhel/Rocky/Alma/CentOS
sudo yum -y install epel-release
sudo yum -y install certbot
Once installed, generate certs with the command:
sudo certbot certonly --standalone
Proceed with the creation and provide the domain name:
Please enter the domain name(s) you would like on your certificate (comma and/or
space separated) (Enter 'c' to cancel): plane.computingforgeeks.com
Requesting a certificate for plane.computingforgeeks.com
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/plane.computingforgeeks.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/plane.computingforgeeks.com/privkey.pem
This certificate expires on 2022-12-30.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Create a dedicated directory for the certs:
sudo mkdir -p /etc/plane/ssl
sudo chmod -R 775 /etc/plane/ssl
Copy the certs to the dedicated directory;
sudo cp /etc/letsencrypt/live/plane.computingforgeeks.com/fullchain.pem /etc/plane/ssl
sudo cp /etc/letsencrypt/live/plane.computingforgeeks.com/privkey.pem /etc/plane/ssl
- Using Self-Signed certs
It is also possible to create self-signed certs with the command:
mkdir -p certs
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout certs/privkey.pem \
-addext "subjectAltName = DNS:plane.computingforgeeks.com" \
-x509 -days 365 -out certs/fullchain.pem
Also here, you need to copy the certs to the dedicated directory before you proceed.
sudo mkdir -p /etc/plane/ssl && sudo chmod -R 775 /etc/plane/ssl
sudo cp certs/* /etc/plane/ssl
The next step is to install and configure a web server for reverse proxy. Here, we will use Nginx.
##On Debian/Ubuntu
sudo apt install nginx -y
##On Rhel/Rocky/Alma/CentOS
sudo yum install nginx -y
Then we will create a virtualhost file:
sudo vim /etc/nginx/conf.d/plane.conf
In the file, add the lines:
server {
listen 443 ssl;
server_name plane.computingforgeeks.com;
# SSL certificates
ssl_certificate /etc/plane/ssl/fullchain.pem;
ssl_certificate_key /etc/plane/ssl/privkey.pem;
# Additional SSL settings if needed
# ssl_protocols TLSv1.2 TLSv1.3;
# ssl_ciphers ...
location / {
proxy_pass http://localhost:80/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect http:// https://;
}
}
After this, you need to disable the Nginx default config:
##On debian/Ubuntu
sudo rm /etc/nginx/sites-enabled/default
Now restart nginx:
sudo systemctl restart nginx
If you have a firewall enabled, allow HTTPS through it:
##For UFW
sudo ufw allow 443/tcp
sudo ufw reload
##For Firewalld
sudo firewall-cmd --add-port=443/tcp --permanent
sudo firewall-cmd --reload
Now access the services using HTTPS remotely as shown:

Closing Thoughts
In this guide, we have learned how to run the self-hosted Plane Project Management Tool – Jira Open Source Alternative. This should now help you manage your projects easily in your organization.
See more:
- Secure Taiga Project Management Platform with Let’s Encrypt SSL
- Install Taiga Project Management Tool on CentOS
- Why it is important to estimate the time of IT project development
- Best Project Management Professional (PMP) Certification Books