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/

Plane Project Management Tool Jira Open Source Alternative 1

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.

Plane Project Management Tool Jira Open Source Alternative 2

Then create a workspace.

Plane Project Management Tool Jira Open Source Alternative 3

You can then invite workers for collaboration.

Plane Project Management Tool Jira Open Source Alternative 4

Voila! This is the Plane Project Management Tool dashboard.

Plane Project Management Tool Jira Open Source Alternative 5

Create your first project.

Plane Project Management Tool Jira Open Source Alternative 6

The project will now be available as shown.

Plane Project Management Tool Jira Open Source Alternative 7

You can then edit the project as desired.

Plane Project Management Tool Jira Open Source Alternative 8

The Plane dashboard looks like this.

Plane Project Management Tool Jira Open Source Alternative 9

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:

Plane Project Management Tool Jira Open Source Alternative 10

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:

LEAVE A REPLY

Please enter your comment!
Please enter your name here