Kanboard is wonderfully simple project and task management application.

The board view gives a nice Trello like interface, where cards can be dragged & dropped across columns.

A really nice and clean user and role management system.

It has a bunch of plugins, like OAuth2, so that third party authentication systems can be used.

And again, like other software that I like, it uses SQLite out of the box which makes moving the entire application around trivial.

Additionally, I’ve started using Caddy V2 which provides LetsEncrypt SSL certificates out of the box and renews them automatically.

The list of requirements for Kanboard are very straightforward. Primarily, PHP with some extensions.

Install PHP and Extensions

sudo apt-get install -y php7.2 php7.2-gd php7.2-mbstring \
php7.2-common php7.2-opcache php7.2-cli php7.2-xml \
php7.2-fpm php7.2-sqlite php7.2-zip

Ensure php-fpm is running

Check if php-fpm is running using –

ps aux | grep php-fpm

Otherwise start it using –

service php7.2-fpm start

or

service php7.2-fpm start

Install Kanboard

Either using Git

git clone https://github.com/kanboard/kanboard.git

Or just download the latest release and unzip it.

Change access to Kanboard directory and all files

Permissions to all files in the kanboard folder needs to be changed.

chown -R * www-data:www-data kanboard

Install Plugins

If you want to install plugins from admin interface directly, you need to change the following setting in kanboard/config.php

Change default setting to true

// define('PLUGIN_INSTALLER', false);
 define('PLUGIN_INSTALLER', true);

Caddy V2 configuration

Getting the right Caddy configuration to work took some time, since most of the configs which come up in search results are the ones for the previous version of Caddy.

The config file that worked –

<URL for Kanboard> {
  root * /var/www/html/kanboard/

  route {
    encode zstd gzip

    # * Linux (socket)
    php_fastcgi unix//run/php/php7.2-fpm.sock

    # * Windows service
    # php_fastcgi 127.0.0.1:9000

    try_files {path} {path}/index.php /index.php?{query}
    file_server
  }
}