Kanboard is an open source project management software focused on the Kanban methodology. Kanban is a project management methodology originally developed by Toyota but has been adopted widely by most organizations to improve efficiency. The Kanban methodology helps you visualize your workflow and deliver more with minimal work in progress. In this article we look at the steps used to install Kanboard on Ubuntu 20.04 with Nginx web server.
Here are the key features of Kanboard project management platform.
- It is a free and open source
- It enables you to customize your boards according to your business activities
- Has native support for reports and analytics
- You can have multiple projects with the ability to drag and drop tasks
- Provides an easy to use web dashboard that can be accessed from anywhere with a modern browser
- Capability to extend functionalities with plugins and integration to other external services
Kanboard Dependencies
- Data Store – By default Kanboard use SQLite but you can replace it with a relational database like MySQL/MariaDB or PostgreSQL. MySQL >= 5.6 or MariaDB >= 10. Mysql/Postgres is recommended for a large team that demands high-availability configuration
- Web Servers: You can use Nginx, Apache or Caddy Server
- PHP >= 5.6.0
- PHP Extensions Required:
PHP Extension | Note |
---|---|
pdo_sqlite | Only if you use SQLite |
pdo_mysql | Only if you use Mysql/MariaDB |
pdo_pgsql | Only if you use Postgres |
gd | |
mbstring | |
openssl | |
json | |
hash | |
ctype | |
session | |
filter | |
xml | |
SimpleXML | |
dom |
Optional PHP extensions
PHP Extension | Note |
---|---|
zip | Used to install plugins from the website |
ldap | Only for LDAP authentication |
Installing Kanboard on Ubuntu 20.04 LTS
Follow the steps in the next sections to install Kanboard on Ubuntu 20.04 LTS. You may consider performing a full system updates before you continue.
sudo apt update
sudo apt -y upgrade
sudo reboot
Step 1: Install MariaDB database server
Let’s start with the installation of MariaDB database server on Ubuntu:
sudo apt install mariadb-server mariadb-client -y
Secure the application by setting root password:
$ sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
Update authentication plugin:
$ sudo mysql -u root
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root';
FLUSH PRIVILEGES;
\q
Once the installation is complete, create a database with a user. First, log in to the database CLI as a root user.
$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 62
Server version: 10.3.25-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
Then run the commands to create database and user with required privileges
CREATE DATABASE kanboard CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;;
GRANT ALL PRIVILEGES ON kanboard.* TO 'kanboard'@'localhost' IDENTIFIED BY 'StrongPassword';
FLUSH PRIVILEGES;
\q
Step 2: Install PHP extensions and Nginx Web server
Next is the installation of PHP, required extensions and Nginx web server.
sudo apt update
sudo apt install php php-{fpm,mbstring,cli,json,opcache,zip,xml,gd,ldap,mysql,json,sqlite3}
Accept installation prompts:
...
Suggested packages:
apache2-doc apache2-suexec-pristine | apache2-suexec-custom www-browser php-pear libgd-tools openssl-blacklist
The following NEW packages will be installed:
apache2 apache2-bin apache2-data apache2-utils fontconfig-config fonts-dejavu-core libapache2-mod-php7.4 libapr1 libaprutil1 libaprutil1-dbd-sqlite3
libaprutil1-ldap libfontconfig1 libgd3 libjansson4 libjbig0 libjpeg-turbo8 libjpeg8 liblua5.2-0 libonig5 libtiff5 libwebp6 libxpm4 libzip5 php php-cli
php-common php-fpm php-gd php-json php-ldap php-mbstring php-mysql php-sqlite3 php-xml php-zip php7.4 php7.4-cli php7.4-common php7.4-fpm php7.4-gd
php7.4-json php7.4-ldap php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-readline php7.4-sqlite3 php7.4-xml php7.4-zip ssl-cert
0 upgraded, 50 newly installed, 0 to remove and 0 not upgraded.
Need to get 10.1 MB of archives.
After this operation, 40.1 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Install Nginx web server package.
sudo apt install nginx -y
Step 3: Download and Install Kanboard
There are two standard installation options for Kanboard:
- From stable release
- From Github development branch
To download a specific stable release of Kanboard, check Kanboard releases page. As of this writing, the latest release is version 1.2.18
Let’s download the latest stable release:
export VER=1.2.18
wget https://github.com/kanboard/kanboard/archive/v$VER.tar.gz
tar xvf v$VER.tar.gz
rm -f v$VER.tar.gz
sudo mv kanboard-$VER/ /var/www/kanboard
To download the development release, use:
sudo git clone https://github.com/kanboard/kanboard.git
Create Kanboard configuration file
Copy Kanboard configuration template.
sudo cp /var/www/kanboard/config.default.php /var/www/kanboard/config.php
sudo vim /var/www/kanboard/config.php
The file config.php
should contain database access values.
// Database driver: sqlite, mysql or postgres (sqlite by default)
define('DB_DRIVER', 'mysql');
// Mysql/Postgres username
define('DB_USERNAME', 'kanboard');
// Mysql/Postgres password
define('DB_PASSWORD', 'StrongPassword');
// Mysql/Postgres hostname
define('DB_HOSTNAME', 'localhost');
// Mysql/Postgres database name
define('DB_NAME', 'kanboard');
This extensive configuration reference for Kanboard is helpful for proper configuration of other features like LDAP authentication, SMTP settings, Brute-force protection, Logging, Secure HTTP headers settings e.t.c.
Make www-data user and group the owner of the directory:
sudo chown -R www-data:www-data /var/www/kanboard
Step 4: Configure Nginx Web Server
Create Nginx configuration file /etc/nginx/conf.d/kanboard.conf
sudo vim /etc/nginx/conf.d/kanboard.conf
Paste the following contents and modify to suit your use.
server {
listen 80;
#listen 443 ssl;
#ssl_certificate /etc/nginx/ssl/kanboard.crt;
#ssl_certificate_key /etc/nginx/ssl/kanboard.key;
server_name kanboard.example.com; # Set domain name
index index.php;
root /var/www/kanboard;
client_max_body_size 32M;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
location ~* ^.+\.(log|sqlite)$ {
return 404;
}
location ~ /\.ht {
return 404;
}
location ~* ^.+\.(ico|jpg|gif|png|css|js|svg|eot|ttf|woff|woff2|otf)$ {
log_not_found off;
expires 7d;
etag on;
}
gzip on;
gzip_comp_level 3;
gzip_disable "msie6";
gzip_vary on;
gzip_types
text/javascript
application/javascript
application/json
text/xml
application/xml
application/rss+xml
text/css
text/plain;
}
Uncomment SSL configuration lines if you wish to use https
Using Let’s Encrypt SSL
This example is for http to https redirection and Let’s Encrypt SSL certificate
# HTTP
server {
listen 80;
server_name kanboard.example.com;
root /var/www/kanboard;
location / {
rewrite ^ https://kanboard.example.com$request_uri? permanent;
}
}
# HTTPS
server {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/kanboard.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kanboard.example.com/privkey.pem;
server_name kanboard.example.com;
index index.php;
root /var/www/kanboard;
client_max_body_size 32M;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
location ~* ^.+\.(log|sqlite)$ {
return 404;
}
location ~ /\.ht {
return 404;
}
location ~* ^.+\.(ico|jpg|gif|png|css|js|svg|eot|ttf|woff|woff2|otf)$ {
log_not_found off;
expires 7d;
etag on;
}
gzip on;
gzip_comp_level 3;
gzip_disable "msie6";
gzip_vary on;
gzip_types
text/javascript
application/javascript
application/json
text/xml
application/xml
application/rss+xml
text/css
text/plain;
}
Check configuration syntax
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
If it returns OK
then you can start nginx service
sudo systemctl disable --now apache2
sudo systemctl restart nginx
sudo systemctl enable nginx
Check nginx service status:
$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-01-26 08:49:19 UTC; 10s ago
Docs: man:nginx(8)
Main PID: 18730 (nginx)
Tasks: 2 (limit: 1137)
Memory: 2.6M
CGroup: /system.slice/nginx.service
├─18730 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─18731 nginx: worker process
Jan 26 08:49:19 ubuntu systemd[1]: Starting A high performance web server and a reverse proxy server...
Jan 26 08:49:19 ubuntu systemd[1]: Started A high performance web server and a reverse proxy server.
Step 5: Access Kanboard Web UI
Access Kanboard Web UI by opening the link http://kanboard.example.com with your favorite web browser. Replace kanboard.example.com
with your correct domain name.
To login use:
Username: admin
Password: admin
You should get to a dashboard like below
Reset admin password
Improve dashboard access security by setting an admin password under Admin > Users Management > admin > Change password
Input current and new password for admin user.
You’ve successfully install Kanboard project management on Ubuntu 20.04 with Nginx as a web server.
Similar guides:
Install Taiga Project Management Tool on CentOS 8
Install Taiga Project Management Platform on Ubuntu 20.04