Install Kanban (kanboard) on CentOS 8
Want to run a lightweight, open‑source kanban board on your new CentOS 8 server? This guide walks you through the exact commands, explains why each one matters, and shows a real‑world hiccup I ran into once my database permissions were wrong.
Why go straight to the metal?
You could spin up a Docker container or use a PaaS, but installing directly on CentOS gives you full control over PHP, MySQL/MariaDB, and file ownership—exactly what most power users prefer. Plus, it keeps your stack leaner than those bloated “all‑in‑one” images.
Step 1: Update the system
sudo dnf update -y
The -y flag saves you from a tedious yes/no prompt. Without this, you’ll end up with an out‑of‑date kernel that might not play nicely with newer PHP modules.
Step 2: Add EPEL and REMI repos
sudo dnf install -y epel-release sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
EPEL supplies the php-mbstring package, while REMI gives you PHP 7.4 (or newer) which kanboard requires. If you skip this, you’ll see “Module not found” errors later.
Step 3: Enable PHP 7.4 module
sudo dnf module reset -y php sudo dnf module enable -y php:remi-7.4
Resetting clears any previously enabled PHP stream (CentOS ships with 7.2 by default). Enabling the REMI stream guarantees you the latest security patches.
Step 4: Install LAMP stack
sudo dnf install -y httpd mariadb-server php php-fpm \
php-mysqlnd php-gd php-xml php-json php-cli php-curl
- httpd is Apache, which kanboard runs under by default.
- mariadb-server replaces MySQL; the two are nearly identical but MariaDB ships with CentOS 8.
- The PHP extensions provide everything kanboard needs to render charts, handle uploads, and communicate with the database.
Step 5: Start and enable services
sudo systemctl enable --now httpd mariadb
Enabling both ensures they start on boot—a common oversight that turns a working install into a frustrating downtime puzzle.
Step 6: Secure MariaDB
sudo mysql_secure_installation
The interactive script lets you set a root password, remove anonymous users, disallow remote root login, and drop the test database. Skip this step and you’ll be tempted to leave your server open for anyone who knows the default credentials.
Step 7: Create a kanboard database and user
mysql -u root -p CREATE DATABASE kanboard CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL PRIVILEGES ON kanboard.* TO 'kanboard'@'localhost' IDENTIFIED BY 'StrongPassword!'; FLUSH PRIVILEGES; EXIT;
Use utf8mb4 to support emojis—kanboard lets you tag cards with them. The user ‘kanboard’ is isolated to the database, reducing risk if your web root gets compromised.
Step 8: Download and unpack kanboard
cd /var/www/
sudo curl -L https://github.com/kanboard/kanboard/releases/download/v1.3.4/kanboard-1.3.4.zip \
-o kanboard.zip
sudo unzip kanboard.zip
sudo mv kanboard-* kanboard
The ZIP contains the latest release; adjust the version if you prefer a different one. Unpacking into /var/www places it where Apache will look for sites.
Step 9: Set permissions
sudo chown -R apache:apache /var/www/kanboard sudo chmod -R 755 /var/www/kanboard
Apache runs as user apache. If you leave the files owned by root, kanboard can’t write its configuration and will complain about “Permission denied” when it starts. A common mistake I saw in a colleague’s setup: they set the whole /var/www folder to 777, which is a security nightmare.
Step 10: Configure Apache virtual host
sudo tee /etc/httpd/conf.d/kanboard.conf <<'EOF'
<VirtualHost *:80>
ServerName kanboard.example.com
DocumentRoot "/var/www/kanboard"
<Directory "/var/www/kanboard">
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/httpd/kanboard_error.log
CustomLog /var/log/httpd/kanboard_access.log combined
</VirtualHost>
EOF
Replace kanboard.example.com with your actual domain or IP. The AllowOverride All line enables the .htaccess file that kanboard ships with, which handles URL rewrites.
Step 11: Restart Apache
sudo systemctl restart httpd
If you hit a “403 Forbidden” error, double‑check the ownership and permissions from step 9.
Step 12: Finish installation via web UI
Open http://kanboard.example.com in your browser. You’ll be greeted by kanboard’s setup wizard:
1. Enter the database name (kanboard), user (kanboard) and password you set earlier.
2. Confirm the PHP configuration meets the minimum requirements (you should see “All good”).
3. Create an admin account.
Once that’s done, you’ll land on a fresh board with no columns—time to drag some tasks in!
Real‑world snag: MySQL socket mismatch
After pulling the latest version of kanboard, I got this error:
Cannot connect to database: mysqli::real_connect(): (HY000/2002): No such file or directory
Turns out my MariaDB was listening on /var/lib/mysql/mysql.sock while PHP expected /var/run/mysqld/mysqld.sock. Fixing it was just a matter of adding:
sudo tee /etc/php-fpm.d/www.conf <<'EOF' [www] listen = 127.0.0.1:9000 socket = /var/lib/mysql/mysql.sock EOF sudo systemctl restart php-fpm
That single change saved me a half‑hour of chasing phantom “No such file” errors.
Wrap it up
You now have kanboard running on CentOS 8, ready to track tasks, collaborate with teammates, and maybe even replace that spreadsheet you keep in your desk drawer.