{"id":83486,"date":"2026-03-22T04:30:52","date_gmt":"2026-03-22T01:30:52","guid":{"rendered":"https:\/\/computingforgeeks.com\/?p=83486"},"modified":"2026-03-22T04:30:53","modified_gmt":"2026-03-22T01:30:53","slug":"install-kanboard-ubuntu","status":"publish","type":"post","link":"https:\/\/computingforgeeks.com\/install-kanboard-ubuntu\/","title":{"rendered":"Install Kanboard on Ubuntu 24.04 \/ 22.04 with Nginx and SSL"},"content":{"rendered":"\n<p>Kanboard is a free and open source project management tool that uses the Kanban methodology to help teams visualize workflows and limit work in progress. It runs as a lightweight PHP web application with support for multiple databases, plugins, and a clean drag-and-drop interface for managing tasks across boards. The project is actively maintained on <a href=\"https:\/\/github.com\/kanboard\/kanboard\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub<\/a> with regular security and feature releases &#8211; the latest being version 1.2.51 (March 2025).<\/p>\n\n\n\n<p>This guide covers installing Kanboard on Ubuntu 24.04 or 22.04 with Nginx as the web server, MariaDB as the database backend, PHP 8.x, and Let&#8217;s Encrypt SSL for HTTPS. By the end you will have a fully working Kanboard instance accessible over a secure connection.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A server running Ubuntu 24.04 or 22.04 LTS with at least 1 GB RAM<\/li>\n\n<li>Root or sudo access<\/li>\n\n<li>A registered domain name pointed to your server&#8217;s public IP (for SSL)<\/li>\n\n<li>Ports 80 and 443 (TCP) open in your firewall<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Update the System<\/h2>\n\n\n\n<p>Start by updating the package index and upgrading installed packages to get the latest security patches.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update && sudo apt upgrade -y<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Install Nginx Web Server<\/h2>\n\n\n\n<p>Install Nginx from Ubuntu&#8217;s default repositories. If you need a detailed walkthrough on <a href=\"https:\/\/computingforgeeks.com\/install-configure-nginx-ubuntu-debian\/\" target=\"_blank\" rel=\"noreferrer noopener\">Nginx configuration on Ubuntu<\/a>, check our dedicated guide.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install nginx -y<\/code><\/pre>\n\n\n\n<p>Enable and start the service so it runs on boot:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl enable --now nginx<\/code><\/pre>\n\n\n\n<p>Confirm Nginx is running:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl status nginx<\/code><\/pre>\n\n\n\n<p>The output should show <code>active (running)<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u25cf nginx.service - A high performance web server and a reverse proxy server\n     Loaded: loaded (\/usr\/lib\/systemd\/system\/nginx.service; enabled; preset: enabled)\n     Active: active (running) since ...<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Install PHP and Required Extensions<\/h2>\n\n\n\n<p>Kanboard requires PHP 8.1 or newer. Ubuntu 24.04 ships PHP 8.3 and Ubuntu 22.04 ships PHP 8.1 in the default repositories &#8211; both meet the requirement. Install PHP-FPM along with the extensions Kanboard needs:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install php-fpm php-mysql php-gd php-mbstring php-xml php-zip php-curl php-json php-opcache -y<\/code><\/pre>\n\n\n\n<p>Verify the installed PHP version:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>php -v<\/code><\/pre>\n\n\n\n<p>On Ubuntu 24.04, you should see PHP 8.3.x confirmed:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PHP 8.3.6 (cli) (built: Mar 2025)\nCopyright (c) The PHP Group\nZend Engine v4.3.6, Copyright (c) Zend Technologies\n    with Zend OPcache v8.3.6, Copyright (c), by Zend Technologies<\/code><\/pre>\n\n\n\n<p>For a more in-depth look at installing and tuning PHP on Ubuntu, see our guide on <a href=\"https:\/\/computingforgeeks.com\/installing-nginx-with-php-fpm-on-ubuntu\/\" target=\"_blank\" rel=\"noreferrer noopener\">Nginx with PHP-FPM on Ubuntu<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Install and Configure MariaDB<\/h2>\n\n\n\n<p>Install MariaDB server. Kanboard also supports SQLite (the default) and PostgreSQL, but MariaDB is a solid choice for multi-user setups.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install mariadb-server mariadb-client -y<\/code><\/pre>\n\n\n\n<p>Enable and start MariaDB:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl enable --now mariadb<\/code><\/pre>\n\n\n\n<p>Run the security hardening script to set a root password and remove test databases:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mysql_secure_installation<\/code><\/pre>\n\n\n\n<p>Answer the prompts &#8211; set a strong root password, remove anonymous users, disallow remote root login, and remove the test database. For a detailed MariaDB setup, check our <a href=\"https:\/\/computingforgeeks.com\/install-mariadb-ubuntu\/\" target=\"_blank\" rel=\"noreferrer noopener\">MariaDB installation guide on Ubuntu<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Create the Kanboard Database and User<\/h3>\n\n\n\n<p>Log in to MariaDB and create a dedicated database and user for Kanboard:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mysql -u root -p<\/code><\/pre>\n\n\n\n<p>Run the following SQL statements inside the MariaDB prompt. Replace <code>StrongPassword123<\/code> with your own secure password:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE DATABASE kanboard CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\nCREATE USER 'kanboard'@'localhost' IDENTIFIED BY 'StrongPassword123';\nGRANT ALL PRIVILEGES ON kanboard.* TO 'kanboard'@'localhost';\nFLUSH PRIVILEGES;\nEXIT;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Download and Install Kanboard<\/h2>\n\n\n\n<p>Download the latest Kanboard release from GitHub. At the time of writing, the current version is 1.2.51.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/tmp\nwget https:\/\/github.com\/kanboard\/kanboard\/archive\/refs\/tags\/v1.2.51.tar.gz<\/code><\/pre>\n\n\n\n<p>Extract the archive and move it to the web root:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tar xzf v1.2.51.tar.gz\nsudo mv kanboard-1.2.51 \/var\/www\/kanboard<\/code><\/pre>\n\n\n\n<p>Set the correct ownership so Nginx (running as <code>www-data<\/code>) can read and write files:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo chown -R www-data:www-data \/var\/www\/kanboard<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Configure Kanboard to Use MariaDB<\/h3>\n\n\n\n<p>Kanboard uses SQLite by default. To switch to MariaDB, create a local configuration file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp \/var\/www\/kanboard\/config.default.php \/var\/www\/kanboard\/config.php<\/code><\/pre>\n\n\n\n<p>Open the configuration file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo vi \/var\/www\/kanboard\/config.php<\/code><\/pre>\n\n\n\n<p>Find the database driver line and change it from <code>sqlite<\/code> to <code>mysql<\/code>. Then update the MySQL connection settings to match the database you created earlier:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Database driver: sqlite, mysql or postgres\ndefine('DB_DRIVER', 'mysql');\n\n\/\/ MySQL connection parameters\ndefine('DB_USERNAME', 'kanboard');\ndefine('DB_PASSWORD', 'StrongPassword123');\ndefine('DB_HOSTNAME', 'localhost');\ndefine('DB_NAME', 'kanboard');\ndefine('DB_PORT', '3306');<\/code><\/pre>\n\n\n\n<p>Save and close the file.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Configure Nginx for Kanboard<\/h2>\n\n\n\n<p>Create an Nginx server block for your Kanboard domain. Replace <code>kanboard.example.com<\/code> with your actual domain name throughout this section.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo vi \/etc\/nginx\/sites-available\/kanboard<\/code><\/pre>\n\n\n\n<p>Add the following configuration. Note the PHP-FPM socket path &#8211; on Ubuntu 24.04 it is <code>php8.3-fpm.sock<\/code>, on Ubuntu 22.04 use <code>php8.1-fpm.sock<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>server {\n    listen 80;\n    server_name kanboard.example.com;\n    root \/var\/www\/kanboard;\n    index index.php;\n\n    # Logs\n    access_log \/var\/log\/nginx\/kanboard_access.log;\n    error_log \/var\/log\/nginx\/kanboard_error.log;\n\n    # Deny access to sensitive files\n    location ~ \/(\\.|config\\.php|config\\.default\\.php) {\n        deny all;\n        return 404;\n    }\n\n    location \/ {\n        try_files $uri $uri\/ \/index.php$is_args$args;\n    }\n\n    location ~ \\.php$ {\n        include fastcgi_params;\n        # Ubuntu 24.04: php8.3-fpm.sock\n        # Ubuntu 22.04: php8.1-fpm.sock\n        fastcgi_pass unix:\/run\/php\/php8.3-fpm.sock;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n    }\n\n    # Cache static assets\n    location ~* \\.(js|css|png|jpg|jpeg|gif|ico|svg)$ {\n        expires 30d;\n        add_header Cache-Control \"public, no-transform\";\n    }\n}<\/code><\/pre>\n\n\n\n<p>Enable the site and remove the default Nginx page:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ln -s \/etc\/nginx\/sites-available\/kanboard \/etc\/nginx\/sites-enabled\/\nsudo rm -f \/etc\/nginx\/sites-enabled\/default<\/code><\/pre>\n\n\n\n<p>Test the Nginx configuration for syntax errors:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nginx -t<\/code><\/pre>\n\n\n\n<p>You should see a successful test result:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nginx: the configuration file \/etc\/nginx\/nginx.conf syntax is ok\nnginx: configuration file \/etc\/nginx\/nginx.conf test is successful<\/code><\/pre>\n\n\n\n<p>Reload Nginx to apply the changes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl reload nginx<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7: Configure UFW Firewall<\/h2>\n\n\n\n<p>Allow HTTP and HTTPS traffic through the firewall. If UFW is not enabled yet, enable it first:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ufw allow 80\/tcp\nsudo ufw allow 443\/tcp\nsudo ufw enable<\/code><\/pre>\n\n\n\n<p>Verify the firewall rules are active:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ufw status<\/code><\/pre>\n\n\n\n<p>The output should show both ports allowed:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Status: active\n\nTo                         Action      From\n--                         ------      ----\n80\/tcp                     ALLOW       Anywhere\n443\/tcp                    ALLOW       Anywhere\n80\/tcp (v6)                ALLOW       Anywhere (v6)\n443\/tcp (v6)               ALLOW       Anywhere (v6)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 8: Secure Kanboard with Let&#8217;s Encrypt SSL<\/h2>\n\n\n\n<p>Install Certbot and the Nginx plugin to obtain a free SSL certificate from Let&#8217;s Encrypt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install certbot python3-certbot-nginx -y<\/code><\/pre>\n\n\n\n<p>Request a certificate for your domain. Certbot will automatically configure Nginx to redirect HTTP to HTTPS:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo certbot --nginx -d kanboard.example.com<\/code><\/pre>\n\n\n\n<p>Follow the prompts to enter your email and agree to the terms. Certbot modifies your Nginx configuration to add SSL listeners on port 443 and sets up automatic certificate renewal via a systemd timer.<\/p>\n\n\n\n<p>Verify the renewal timer is active:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl status certbot.timer<\/code><\/pre>\n\n\n\n<p>The timer should show as active, running renewal checks twice daily:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u25cf certbot.timer - Run certbot twice daily\n     Loaded: loaded (\/usr\/lib\/systemd\/system\/certbot.timer; enabled; preset: enabled)\n     Active: active (waiting) since ...<\/code><\/pre>\n\n\n\n<p>You can also test the renewal process without actually renewing:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo certbot renew --dry-run<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 9: Access Kanboard and Create Your First Project<\/h2>\n\n\n\n<p>Open your browser and navigate to <code>https:\/\/kanboard.example.com<\/code>. You should see the Kanboard login page. The default admin credentials are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Username<\/strong>: admin<\/li>\n\n<li><strong>Password<\/strong>: admin<\/li>\n<\/ul>\n\n\n\n<p><strong>Change the default admin password immediately after logging in.<\/strong> Go to the user menu (top right) and select &#8220;My profile&#8221; to update your password.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Create a New Project<\/h3>\n\n\n\n<p>After logging in, click &#8220;New project&#8221; on the dashboard. Give it a name and description, then click &#8220;Save&#8221;. Kanboard creates a default board with columns like Backlog, Ready, Work in progress, and Done.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Add Tasks to Your Board<\/h3>\n\n\n\n<p>Click the &#8220;+&#8221; button on any column to add a new task. Fill in the title, assign it to a user, set a due date and color if needed. Tasks can be dragged between columns as work progresses. You can also add subtasks, comments, attachments, and time tracking entries to each task.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Manage Users and Permissions<\/h3>\n\n\n\n<p>From the admin panel (Settings icon), go to &#8220;Users&#8221; to create additional user accounts. Kanboard supports three roles &#8211; Admin, Manager, and Member. Managers can create and configure projects while members can only work on tasks assigned to them.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kanboard Production Hardening Tips<\/h2>\n\n\n\n<p>Before using Kanboard in production, consider these additional steps:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enable <a href=\"https:\/\/kanboard.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Kanboard plugins<\/a> for email notifications, LDAP authentication, or calendar sync<\/li>\n\n<li>Set up regular database backups using <code>mysqldump<\/code> or <code>mariadb-dump<\/code><\/li>\n\n<li>Configure PHP <code>session.cookie_secure = 1<\/code> and <code>session.cookie_httponly = 1<\/code> for session security<\/li>\n\n<li>Set <code>upload_max_filesize<\/code> and <code>post_max_size<\/code> in <code>php.ini<\/code> if you need larger file attachments<\/li>\n\n<li>Install <a href=\"https:\/\/computingforgeeks.com\/install-wordpress-with-nginx-on-ubuntu\/\" target=\"_blank\" rel=\"noreferrer noopener\">additional PHP applications on Nginx<\/a> like WordPress alongside Kanboard if needed<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>You now have Kanboard running on Ubuntu 24.04 or 22.04 with Nginx, MariaDB, and Let&#8217;s Encrypt SSL. The setup gives you a lightweight yet capable project management tool accessible over HTTPS. For ongoing maintenance, keep Kanboard updated by downloading new releases from the <a href=\"https:\/\/github.com\/kanboard\/kanboard\/releases\" target=\"_blank\" rel=\"noreferrer noopener\">official GitHub releases page<\/a> and replacing the files in <code>\/var\/www\/kanboard<\/code> while preserving your <code>config.php<\/code> and <code>data\/<\/code> directory.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kanboard is a free and open source project management tool that uses the Kanban methodology to help teams visualize workflows and limit work in progress. It runs as a lightweight PHP web application with support for multiple databases, plugins, and a clean drag-and-drop interface for managing tasks across boards. The project is actively maintained on &#8230; <a title=\"Install Kanboard on Ubuntu 24.04 \/ 22.04 with Nginx and SSL\" class=\"read-more\" href=\"https:\/\/computingforgeeks.com\/install-kanboard-ubuntu\/\" aria-label=\"Read more about Install Kanboard on Ubuntu 24.04 \/ 22.04 with Nginx and SSL\">Read more<\/a><\/p>\n","protected":false},"author":3,"featured_media":3739,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[299,81,349],"tags":[542,576,740],"class_list":["post-83486","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to","category-ubuntu","category-web-hosting","tag-kanban","tag-kanboard","tag-project-management"],"_links":{"self":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/83486","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/comments?post=83486"}],"version-history":[{"count":1,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/83486\/revisions"}],"predecessor-version":[{"id":163496,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/83486\/revisions\/163496"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media\/3739"}],"wp:attachment":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media?parent=83486"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/categories?post=83486"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/tags?post=83486"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}