Skip to content

Kanboard

Visual Project Management

Kanboard is a free and open-source project management software that uses the Kanban methodology. It provides a clean, visual way to track work progress and manage projects with a focus on simplicity and efficiency.

Why Choose Kanboard?

  • Visual kanban - drag-and-drop with WIP limits
  • Team collaboration - multi-user with role-based permissions
  • Time tracking - burndown charts and due dates
  • Flexible - custom fields with plugin system

Install

Infrastructure as Code

This Kanboard instance is deployed using OpenTofu with custom Incus images. The infrastructure configuration manages container provisioning and persistent storage volumes.

Custom Kanboard Image

The Kanboard Incus image is built and maintained at forgejo.benoit.jp.net/Benoit/Laminar.

Infrastructure Configuration

The OpenTofu configuration provisions:

  • Incus instance running custom Kanboard image
  • Two persistent storage volumes:
    • /var/www/kanboard/data - Database and uploaded files
    • /var/backups/kanboard - Backup storage
OpenTofu Configuration
resource "incus_storage_volume" "kanboard_var_www_kanboard_data" {
  name = "kanboard_var_www_kanboard_data"
  pool = incus_storage_pool.default.name
  config = {
    "initial.gid"  = "33"
    "initial.uid"  = "33"
    "initial.mode" = "770"
  }
}

resource "incus_storage_volume" "kanboard_var_backups_kanboard" {
  name = "kanboard_var_backups_kanboard"
  pool = incus_storage_pool.default.name
}

resource "incus_instance" "kanboard" {
  name  = "kanboard"
  image = "laminar.incus:kanboard-1.2.47-1benoitjpnet"

  device {
    name = "var_www_kanboard_data"
    type = "disk"
    properties = {
      path   = "/var/www/kanboard/data"
      source = incus_storage_volume.kanboard_var_www_kanboard_data.name
      pool   = incus_storage_pool.default.name
    }
  }

  device {
    name = "var_backups_kanboard"
    type = "disk"
    properties = {
      path   = "/var/backups/kanboard"
      source = incus_storage_volume.kanboard_var_backups_kanboard.name
      pool   = incus_storage_pool.default.name
    }
  }
}

Deploy Infrastructure

Apply OpenTofu configuration
tofu apply

After provisioning, configure Kanboard by editing /var/www/kanboard/config.php with your database settings and preferences.

Upgrade

Incus Image Upgrade

When upgrading to a newer Incus image version, follow these steps to migrate your data.

Backup current instance configuration before upgrading:

Enter Incus container
incus shell kanboard

Backup configuration file

cp /var/www/kanboard/config.php /var/backups/kanboard/

Deploy to new Incus image and restore configuration:

Update OpenTofu configuration

Edit your OpenTofu configuration file to update the image version:

resource "incus_instance" "kanboard" {
  name  = "kanboard"
  image = "laminar.incus:kanboard-NEW-VERSION"  # Update this line
  # ...
}

Apply infrastructure changes

Provision new Incus container
tofu apply
Enter Incus container
incus shell kanboard

Restore configuration file

cp /var/backups/kanboard/config.php /var/www/kanboard/

Run database migrations

cd /var/www/kanboard
./cli db:migrate

Restart web server

systemctl restart apache2

Upgrade Complete

Your Kanboard instance is now running on the new Incus image with all data intact!

Advanced Configuration

  • Performance Optimization


    config.php optimization
    <?php
    // Performance settings
    define('CACHE_DRIVER', 'file');
    define('SESSION_DURATION', 2592000); // 30 days
    define('BRUTEFORCE_LOCKDOWN_DURATION', 900);
    define('BRUTEFORCE_CAPTCHA', 3);
    
    // Email optimization
    define('MAIL_TRANSPORT', 'smtp');
    define('MAIL_SMTP_HOSTNAME', 'localhost');
    
  • Security Hardening


    config.php security
    <?php
    // Security settings
    define('TOTP_ISSUER', 'Your-Kanboard');
    define('PASSWORD_RESET', true);
    define('LDAP_AUTH', false);
    
    // Disable registration if not needed
    define('HIDE_LOGIN_FORM', false);
    define('DISABLE_LOGOUT', false);
    
  • Notification Setup


    config.php notifications
    <?php
    // Email notifications
    define('MAIL_FROM', 'kanboard@yourcompany.com');
    define('MAIL_TRANSPORT', 'smtp');
    define('MAIL_SMTP_HOSTNAME', 'mail.yourcompany.com');
    define('MAIL_SMTP_PORT', 587);
    define('MAIL_SMTP_ENCRYPTION', 'tls');
    
  • API Configuration


    config.php API
    <?php
    // API settings
    define('API_AUTHENTICATION_TOKEN', 'your-secret-token');
    define('API_AUTHENTICATION_HEADER', 'X-API-Auth');
    
    // Webhook settings
    define('WEBHOOK_TOKEN', 'your-webhook-token');
    

Related Documentation: - Infrastructure Overview - Complete self-hosting architecture - Web Server Configuration - Apache/Nginx setup guides