{"id":3736,"date":"2026-03-22T21:03:46","date_gmt":"2018-09-15T11:08:28","guid":{"rendered":"https:\/\/computingforgeeks.com\/?p=3736"},"modified":"2026-03-22T21:03:47","modified_gmt":"2026-03-22T18:03:47","slug":"install-kanboard-ubuntu-nginx","status":"publish","type":"post","link":"https:\/\/computingforgeeks.com\/install-kanboard-ubuntu-nginx\/","title":{"rendered":"Install Kanboard on Ubuntu 24.04 with Nginx"},"content":{"rendered":"\n<p>Kanboard is a free, open-source project management tool that uses the Kanban methodology to help teams visualize their workflows. It gives you a simple drag-and-drop board interface, task tracking, time tracking, analytics, and plugin support &#8211; all self-hosted on your own server. The latest release is <a href=\"https:\/\/github.com\/kanboard\/kanboard\/releases\/tag\/v1.2.51\" target=\"_blank\" rel=\"noreferrer noopener\">Kanboard v1.2.51<\/a>, released in March 2026.<\/p>\n\n\n\n<p>This guide walks through installing Kanboard on Ubuntu 24.04 LTS with Nginx as the web server, MariaDB as the database backend, and PHP 8.3. We also cover SSL setup with Let&#8217;s Encrypt and firewall configuration.<\/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 LTS with root or sudo access<\/li>\n\n<li>A registered domain name pointed to your server IP (for SSL)<\/li>\n\n<li>At least 1GB RAM and 1 CPU core<\/li>\n\n<li>Ports 80 (HTTP) and 443 (HTTPS) open in your firewall<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Install PHP and Required Extensions<\/h2>\n\n\n\n<p>Kanboard requires PHP 8.1 or later with several extensions. Ubuntu 24.04 ships PHP 8.3 in its default repositories, which works well. Install PHP-FPM along with the required extensions.<\/p>\n\n\n\n<p>Update the package index first:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update<\/code><\/pre>\n\n\n\n<p>Install PHP 8.3 and the extensions Kanboard needs for database connectivity, image handling, caching, and JSON processing:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install -y php8.3-fpm php8.3-mysql php8.3-gd php8.3-mbstring php8.3-xml php8.3-curl php8.3-zip php8.3-opcache php8.3-intl php8.3-ldap<\/code><\/pre>\n\n\n\n<p>If you need a deeper walkthrough on <a href=\"https:\/\/computingforgeeks.com\/install-nginx-with-php-fpm-on-ubuntu-linux\/\" target=\"_blank\" rel=\"noreferrer noopener\">setting up Nginx with PHP-FPM on Ubuntu<\/a>, check that guide for additional configuration options.<\/p>\n\n\n\n<p>Verify that PHP-FPM is running:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl status php8.3-fpm<\/code><\/pre>\n\n\n\n<p>You should see the service as active (running):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u25cf php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager\n     Loaded: loaded (\/usr\/lib\/systemd\/system\/php8.3-fpm.service; enabled; preset: enabled)\n     Active: active (running)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Install MariaDB Database Server<\/h2>\n\n\n\n<p>Kanboard supports SQLite (default), MariaDB\/MySQL, and PostgreSQL. SQLite works fine for small teams, but MariaDB is the better choice for production environments with multiple concurrent users. Install <a href=\"https:\/\/computingforgeeks.com\/how-to-install-mariadb-database-on-ubuntu-linux\/\" target=\"_blank\" rel=\"noreferrer noopener\">MariaDB on Ubuntu<\/a> from the default repositories:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install -y mariadb-server mariadb-client<\/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, remove anonymous users, and disable remote root login:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mariadb-secure-installation<\/code><\/pre>\n\n\n\n<p>Answer the prompts &#8211; set a strong root password and accept the defaults (Y) for all security questions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Create Kanboard Database and User<\/h2>\n\n\n\n<p>Log into the MariaDB shell and create a dedicated database and user for Kanboard. Replace <code>StrongPassword123<\/code> with a secure password of your own.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mariadb -u root -p<\/code><\/pre>\n\n\n\n<p>Run the following SQL statements to create the database and grant privileges:<\/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 4: Download and Install Kanboard<\/h2>\n\n\n\n<p>Download the latest Kanboard release (v1.2.51) from the official GitHub repository and extract it to your web root directory.<\/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 directory:<\/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>Verify the files are in place:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ls \/var\/www\/kanboard\/<\/code><\/pre>\n\n\n\n<p>You should see the Kanboard directory structure including <code>app<\/code>, <code>config.default.php<\/code>, <code>plugins<\/code>, and other project files.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Configure Kanboard<\/h2>\n\n\n\n<p>Create the Kanboard configuration file from the default template. This file controls database settings, caching, and application behavior.<\/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 and update the database driver and connection settings. Change the driver from <code>sqlite<\/code> to <code>mysql<\/code> and set the credentials you created in Step 3:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Database driver: sqlite, mysql or postgres\ndefine('DB_DRIVER', 'mysql');\n\n\/\/ MySQL\/MariaDB 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 Virtual Host for Kanboard<\/h2>\n\n\n\n<p>Install Nginx if it is not already present on your system:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install -y nginx<\/code><\/pre>\n\n\n\n<p>Create an Nginx server block configuration for Kanboard. Replace <code>kanboard.example.com<\/code> with your actual domain name:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo vi \/etc\/nginx\/sites-available\/kanboard.conf<\/code><\/pre>\n\n\n\n<p>Add the following virtual host configuration:<\/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    # Deny access to sensitive files\n    location ~ \/(\\.ht|config\\.php|config\\.default\\.php) {\n        deny all;\n    }\n\n    # Deny access to the data directory\n    location \/data {\n        deny all;\n    }\n\n    location \/ {\n        try_files $uri $uri\/ \/index.php$is_args$args;\n    }\n\n    location ~ \\.php$ {\n        include fastcgi_params;\n        fastcgi_pass unix:\/run\/php\/php8.3-fpm.sock;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n        fastcgi_index index.php;\n    }\n\n    # Deny access to hidden files\n    location ~ \/\\. {\n        deny all;\n        access_log off;\n        log_not_found off;\n    }\n}<\/code><\/pre>\n\n\n\n<p>Enable the site and remove the default virtual host:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ln -s \/etc\/nginx\/sites-available\/kanboard.conf \/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>The output should confirm the configuration is valid:<\/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>Restart Nginx to apply the changes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart nginx<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7: Set File Permissions<\/h2>\n\n\n\n<p>Kanboard needs write access to the <code>data<\/code> directory for file uploads, sessions, and the SQLite database (if used as fallback). Set ownership to the Nginx worker user:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo chown -R www-data:www-data \/var\/www\/kanboard\/data\nsudo chmod -R 755 \/var\/www\/kanboard\/data<\/code><\/pre>\n\n\n\n<p>Also set proper ownership on the plugins directory so you can install plugins through the web interface later:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo chown -R www-data:www-data \/var\/www\/kanboard\/plugins<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 8: Access Kanboard Web Interface<\/h2>\n\n\n\n<p>Open your browser and navigate to your domain &#8211; <code>http:\/\/kanboard.example.com<\/code>. You should see the Kanboard login page. Log in with the default administrator credentials:<\/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>Change the default admin password immediately after your first login. Go to the user icon in the top right, select <strong>My profile<\/strong>, then click <strong>Change password<\/strong>. Using the default credentials in production is a serious security risk.<\/p>\n\n\n\n<p>After logging in, you can create your first project by clicking <strong>New project<\/strong> from the dashboard. The <a href=\"https:\/\/docs.kanboard.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Kanboard documentation<\/a> covers project setup, swimlanes, task automation, and plugin installation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 9: Configure SSL with Let&#8217;s Encrypt<\/h2>\n\n\n\n<p>Running Kanboard over plain HTTP exposes your login credentials and project data in transit. Install Certbot to get a free SSL certificate from <a href=\"https:\/\/computingforgeeks.com\/easiest-way-install-letsencrypt-linux\/\" target=\"_blank\" rel=\"noreferrer noopener\">Let&#8217;s Encrypt<\/a>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install -y certbot python3-certbot-nginx<\/code><\/pre>\n\n\n\n<p>Request and install the certificate. Certbot automatically modifies your Nginx configuration to serve traffic over HTTPS and sets up a redirect from 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 &#8211; enter your email address and agree to the terms of service. Choose to redirect all HTTP traffic to HTTPS when asked.<\/p>\n\n\n\n<p>Certbot installs a systemd timer that handles automatic renewal. 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>You should see the timer enabled and active:<\/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)<\/code><\/pre>\n\n\n\n<p>Test that renewal works without errors:<\/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 10: Configure UFW Firewall<\/h2>\n\n\n\n<p>Ubuntu 24.04 comes with UFW (Uncomplicated Firewall). Allow SSH access along with HTTP and HTTPS traffic for Nginx:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ufw allow OpenSSH\nsudo ufw allow 'Nginx Full'<\/code><\/pre>\n\n\n\n<p>Enable the firewall if it is not already active:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ufw enable<\/code><\/pre>\n\n\n\n<p>Verify the firewall rules are in place:<\/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 ports 22, 80, and 443 allowed:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Status: active\n\nTo                         Action      From\n--                         ------      ----\nOpenSSH                    ALLOW       Anywhere\nNginx Full                 ALLOW       Anywhere\nOpenSSH (v6)               ALLOW       Anywhere (v6)\nNginx Full (v6)            ALLOW       Anywhere (v6)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>You now have Kanboard v1.2.51 running on Ubuntu 24.04 with Nginx, PHP 8.3, and MariaDB. The application is secured with a Let&#8217;s Encrypt SSL certificate and a properly configured firewall.<\/p>\n\n\n\n<p>For production use, set up regular database backups with <code>mariadb-dump<\/code>, configure email notifications in Kanboard settings, and consider enabling two-factor authentication for all user accounts. Monitor your server resources and PHP-FPM pool settings as your team grows.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kanboard is a free, open-source project management tool that uses the Kanban methodology to help teams visualize their workflows. It gives you a simple drag-and-drop board interface, task tracking, time tracking, analytics, and plugin support &#8211; all self-hosted on your own server. The latest release is Kanboard v1.2.51, released in March 2026. This guide walks &#8230; <a title=\"Install Kanboard on Ubuntu 24.04 with Nginx\" class=\"read-more\" href=\"https:\/\/computingforgeeks.com\/install-kanboard-ubuntu-nginx\/\" aria-label=\"Read more about Install Kanboard on Ubuntu 24.04 with Nginx\">Read more<\/a><\/p>\n","protected":false},"author":3,"featured_media":3740,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[50,299,81],"tags":[542,576],"class_list":["post-3736","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux-tutorials","category-how-to","category-ubuntu","tag-kanban","tag-kanboard"],"_links":{"self":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/3736","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=3736"}],"version-history":[{"count":1,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/3736\/revisions"}],"predecessor-version":[{"id":163613,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/3736\/revisions\/163613"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media\/3740"}],"wp:attachment":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media?parent=3736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/categories?post=3736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/tags?post=3736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}