How to Install Plane Project Management Tool on Ubuntu 20.04

Plane is a simple, extensible, open-source project and product management tool. It allows users to start with a basic task-tracking tool and gradually adopt various project management frameworks like Agile, Waterfall, and many more.

Prerequisite

Root access to your Ubuntu 20.04 server.

Update the System

Before start, update the apt packages,

apt update -y

apt upgrade -y

Install Docker CE and Docker Compose

Install packages to allow apt to use a repository over HTTPS,

apt-get install ca-certificates curl gnupg

Add Docker's official GPG key,

sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

chmod a+r /etc/apt/keyrings/docker.gpg

Use the following command to set up the repository,

echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Update the apt package index,

apt-get update

Install Docker Engine

Install Docker Engine and Docker Compose,

apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Output:

root@vps:~# sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  docker-ce-rootless-extras pigz slirp4netns
Suggested packages:
  aufs-tools cgroupfs-mount | cgroup-lite

Install Plane with Docker Compose

Once the Docker CE and Docker Compose are installed follow the below steps to install the plane using Docker Compose,

For this, Clone the Repository and change the directory,

git clone --depth 1 -b master https://github.com/makeplane/plane.git && cd plane

Output:

root@vps:~# git clone --depth 1 -b master https://github.com/makeplane/plane.git && cd plane
Cloning into 'plane'...
remote: Enumerating objects: 1327, done.
remote: Counting objects: 100% (1327/1327), done.
remote: Compressing objects: 100% (1132/1132), done.
remote: Total 1327 (delta 270), reused 663 (delta 146), pack-reused 0
Receiving objects: 100% (1327/1327), 6.45 MiB | 11.27 MiB/s, done.
Resolving deltas: 100% (270/270), done.
root@vps:~/plane#

Run setup.sh

This script sets up the environment with the IP address or the Domain name,

./setup.sh http://plane.domainhere.info

Note: Replace the plane.domainhere.info with your actual domain name or IP address

Now you will have .env in the environment variables file,

vi .env

The file has several variables, modify the required ones for your setup,

root@vps:~/plane# cat .env
# 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=""
# For Telemetry, set it to "app.plane.so"
NEXT_PUBLIC_PLAUSIBLE_DOMAIN=""
# public boards deploy url
NEXT_PUBLIC_DEPLOY_URL=""

# 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 <team@mailer.plane.so>"
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_BASE="https://api.openai.com/v1" # change if using a custom endpoint
OPENAI_API_KEY="sk-" # add your openai key here
GPT_ENGINE="gpt-3.5-turbo" # use "gpt-4" if you have access

# 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=80

# Default Creds
DEFAULT_EMAIL="captain@plane.so"
DEFAULT_PASSWORD="password123"

# SignUps
ENABLE_SIGNUP="1"
# Auto generated and Required that will be generated from setup.sh

NEXT_PUBLIC_API_BASE_URL=http://plane.domainhere.info
SECRET_KEY="hmicgxkn4hodt267cgodo1uri4basn9mihhvt1d1tambidryzr"
WEB_URL=http://plane.domainhere.info

Secure Plane Project Management Tool with SSL

Secure the Plane Frontend using SSL, to do that, we need to generate certificates for your domain name using Let's Encrypt,

Install certbot using the below command,

apt install certbot

Once installation is completed, generate certs using below command,

certbot certonly --standalone

Output:

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: a

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y
Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel): plane.domainhere.info
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for plane.domainhere.info
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/plane.domainhere.info/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/plane.domainhere.info/privkey.pem
   Your cert will expire on 2023-11-30. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

root@vps:~#

Replace the plane.domainhere.info with the actual domain name

Create a dedicated directory for the SSL certs,

mkdir -p /etc/plane/ssl

chmod -R 775 /etc/plane/ssl

Copy the certs to the dedicated directory,

cp /etc/letsencrypt/live/plane.domainhere.info/fullchain.pem /etc/plane/ssl

cp /etc/letsencrypt/live/plane.domainhere.info/privkey.pem /etc/plane/ssl

Now install and configure a Nginx Web Server for reverse proxy. Here, we will use Nginx,

apt install nginx -y

Next, We will create a vHost file for the domain,

vi /etc/nginx/conf.d/plane.domainhere.info.conf

In the file, add the below lines,

server {
    listen 443 ssl;
    server_name plane.domainhere.info;

    # 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://;
    }
}

Once the vHost file is created, you need to disable the Nginx default config using the below command,

rm /etc/nginx/sites-enabled/default

Now restart the nginx using the below command,

systemctl restart nginx

Enable the firewall on your server and allow HTTPS through it,

ufw enable
ufw allow 443/tcp
ufw reload

Output:

root@vps:~/plane# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
root@vps:~/plane# ufw allow 443/tcp
Rules updated
Rules updated (v6)
root@vps:~/plane# ufw reload
Firewall reloaded
root@vps:~/plane# 

Now, Start the Plane with Docker Compose using the below command,

docker compose -f docker-compose-hub.yml up

Use the below command to work the plane in the backend,

docker compose -f docker-compose-hub.yml up -d

Now access the services using HTTPS.

Access Plane Project Management Tool

Open your browser and navigate to https://plane.domainhere.info to login onto your Plane instance,

Replace plane.domainhere.info with your actual domain name

images

Login using the creds set in the variables file, If unchanged, the default values are username “captain@plane.so” password “password123“. You can also sign up with a new account since the feature was enabled in the variables file.

Once authenticated, you will be required to set up the profile,

images

Fill the details to create a workspace,

images

You can invite workers for collaboration,

images

This is the Plane Project Management Tool Welcome Page,

images

This is the Plane Project Management Tool dashboard,

images

Done.


CrownCloud - Get a SSD powered KVM VPS at $4.5/month!
Use the code WELCOME for 10% off!

1 GB RAM / 25 GB SSD / 1 CPU Core / 1 TB Bandwidth per month

Available Locations: LAX | MIA | ATL | FRA | AMS