My Profile Photo


Using liberty-minded opensource tools, and using them well

An alternative to Trello

Using the Kanban philosophy of project management, Kanboard is a self-hosted web-based project board to organize your life. It's a little bit of todo.txt, and a little bit of scrum; with a lot of devops.


I mean, you can just google it. It has a really cool history originating in manufacturing which translates great to computer work - the way I do it anyways. So let’s get it set up



Apache is simple, it’s just the httpd daemon that’s installed with the CentOS 7 “Basic Web Server” install set up, but it’s easily downloaded with:

# yum install httpd

Sqlite 3.X

Sqlite was also installed with the “Basic Web Server” install, but it is in the repos under sqlite. Easy enough, right?


I had attempted the setup with Postgresql but had not been able to get it working. That may become a project for a later date…I’ll have to put it up in kanboard…


PHP was the most annoying to set up. Kanboard requires a couple php extensions along with the base php install itself. There’s not much configuration, and the Requirements page for Kanboard shows all of the plugins that need to be installed. I guess that it’s just that I’m not that experienced in PHP. Anyways, it ultimately boiled down to:

# yum install php php-common php-gd php-mbstring php-pdo

This is odd, because this can be done anywhere, and most walkthroughs say to do in in ~, but I prefer /usr/local. For reasons. Just creating a subdirectory of kanboard works, and it’s easy to access, remember, and script.

That being said, the actual process is downloading, and moving the relevant files of the kanboard install to the web server directory. Accomplished by:

# mkdir /usr/local/kanboard
# wget -O /usr/local/kanboard/ # see NOTE
# unzip /usr/local/kanboard/ -d /usr/local/kanboard/
# cd /usr/local/kanboard/kanboard
# mv /usr/local/kanboard/kanboard/config.default.php /usr/local/kanboard/kanboard/config.php
# mkdir -p /var/www/html
# cp -ar /usr/local/kanboard/kanboard/ /var/www/html/


Search for the bash alias extract - it’s a great function that’s in the nooks and crannies of the internet coughredditcough and get used to what programs it uses. I always make sure to have all of them on hand when working in any given environment if at all possible. That alias works wonders.


Kanboard’s data directory

Kanboard has a kanboard/data directory that is used to store, well, data. That directory needs to be writable by the webserver user - in this case apache.

# chown -R apache:apache /var/www/html/kanboard/data/
# chmod -R 777 /var/www/html/kanboard/data/

That in itself isn’t complicated. However, there’s a catch with SELinux. Namely that “It’s enabled with a lot of restrictions”. Now, I’ll mess with SELinux when I have a couple of hours or so I want to kill, but luckily the creator came up with the solution to this problem so I don’t have to.

# chcon -R -t httpd_sys_content_rw_t /var/www/html/kanboard/data


Perhaps as a result of that (or a botched install for some mistype or another) I ran into another SELinux problem, where my entire directory had no access permissions. This was also fixed by a chcon command.

# chcon system_u:object_r:httpd_sys_content_t:s0 -R /var/www/

Web Server

If you haven’t already started the httpd daemon, you may start it up now.

# systemctl start httpd
# systemctl enable httpd

If you have already, make sure to restart it after applying the SELinux adjustment above.


If this is your only webpage on this server, then port 80 will have to be made accessible to the public. On CentOS 7, firewalld is installed by default and is managed by the firewall-cmd command.

There’s a lot of cruft out on the internet about iptables, and IIRC firewalld is just a front-end for it, but it’s easier to use, if not still a bit buggy. Anyways, I can get this up and running in two simple commands.

# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --reload

The second command is necessary to activate the change. Contrary to the --complete-reload option, current connections are not stopped.


Obviously this site should be secured, however that requires a domain name to be registered. I have not done so yet, but when I do, I’ll be able to use Let’s Encrypt to set that up. I’ll also have to change the webserver and firewall config to reflect those changes (at the very bare minimum least those two parts) if not the various applications themselves. That’s for another time though. For now, enjoy the install.

Further Exploration

And that’s it. You should now have a working instance of Kanboard on your server. The default username/password combo is


So for the love of all that’s good, change it as soon as possible. Some files to take a look at would be:

  • Sqlite database: db.sqlite
  • Debug file: debug.log (if debug mode enabled)
  • Uploaded files: files/*
  • Image thumbnails: files/thumbnails/*


I’m still using it after getting into OSU and it’s really be the thing that keeps me working. I can look back and see all the things that I’ve accomplished in the ‘Done’ column, and that motivates me. Also I can prioritize and know what thing or what thing out of a group of things that I should tackle next. It’s a weight off my mind.