Host your own Trello style Kanban board for Free

Kanban board like Trello have become pretty popular for managing projects. They are simple to understand and easy to use. But finding one that looks decent, works well, at a decent price can be difficult. Last year I setup one internally using the open source Wekan.

Someone recently posted a Virtualbox image for Wekcan, but I prefer to use KVM and usually promote its usage. So I thought I would put together a similar how-to using a Proxmox KVM server. With the Proxmox distribution you can easily setup your own KVM server that performs as well as, or better than in some cases, VMWare for FREE. If you prefer a GUI interface the one included with Proxmox is fantastic and will be immediately familiar to anyone who has used Virtualbox or VMWare. If you are like me and prefer to do things from the command line, all of that functionality is included and works normally as well. Overall it is an excellent product, especially if you are just starting to dip your toes into virtualization.

So, before we begin, you’ll need the following:

  • A working Proxmox KVM server (If you have a regular KVM server you most likely know how to create a new guest VM so you can follow along)
  • An internal IP address to assign to your new server
  • An Ubuntu 14.04.x ISO image
  • Approximately 8GB of disk space and 2GB RAM

Creating the Virtual Machine (VM)

The first thing we need to do is build the virtual machine and install the base operating system. So, browse to your Proxmox console and click Create VM. The wizard will start and ask you for a few pieces of information.  Select the node, choose a VM ID or let the wizard select one, and enter a name for the new VM and click next.


Choose “Linux 4.x/3.x/2.6 Kernel” type and click  next.


Use the drop down to choose the Ubuntu 14.04.x ISO image and click next.


Select VirtIO from the drop down as the Bus/Device. Select the storage location if you have more than one. Enter 8 for the disk size in GB. Select RAW as the format. If you are using SSD based storage check the Discard box then click next.


Select 2 for the number of cores and click next.


Select the radio button for “Automatically allocate…” then enter 2048 for the maximum and 512 for the minimum and click next.


For the network choose VirtIO from the drop down as the model and click next.


Review the final page and click Finish. Once the system has finished creating the virtual machine select it from the list on the left.  Click Start in the upper right corner. Then click Console.


Follow the prompts to install the Ubuntu server.  In most cases you will want to simply choose the default offered, except on the “Software to Install” page where you will only want to select the OpenSSH-Server.


Once the system has rebooted login. You will need to change your IP address and install the Qemu Agents.  In the example below I set the IP address of the server to on a /24 network, set the default gateway to and entered the IP for two DNS servers.

sudo apt update
sudo apt install qemu-guest-agent
sudo nano -w /etc/network/interface

    # The primary network interface
    auto eth0
    iface eth0 inet static

sudo shutdown -h now

Once that is completed select the Options “tab” at the top of the screen. Find the “Qemu Agent” option near the bottom and click edit. Check the Enabled box and click OK.  Then start the VM again.



If possible, add the name of the system system to DNS.  There are many things you can do to improve the performance, and secure the system. If you already have a standard load configuration you setup using Ansible, Chef or some other configuration management system use that to finish the installation.  Or, review some of the settings I suggested in the Magento Installation posts I started (and still have not finished). Once you have finished optimizing and securing your system begin installing Docker.

Docker and Docker Compose Installation

To install Docker and Docker Compose SSH to your server and do the following:

sudo -i
apt-key adv --keyserver hkp:// --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
nano /etc/apt/sources.list.d/docker.list
    deb ubuntu-trusty main
apt update
apt install docker-engine
usermod -aG docker yourusername
curl -L`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
update-rc.d docker defaults

After you have done that SSH into the system again and run the following to verify Docker is installed and working.

docker run hello-world
docker version

You should get something like the following output



Install Wekan and Apache

Now that we have Docker and Docker compose working lets install Wekan and Apache.  Apache will work like a reverse proxy to connect your normal user HTTP traffic to the port Wekan is actually running on.  You could use Nginx instead but to keep this simple I used Apache which most admins and developers are probably familiar with. Lets start by adding the Wekan user and creating the docker-compose file.

sudo useradd -d /home/wekan -m -s /bin/bash wekan
sudo usermod -aG docker wekan
sudo nano -w /home/wekan/docker-compose.yml

In this file enter the following.  This will tell Docker we need the mquandalle/wekan and MongoDB images installed, the URL for the MongoDB, where to store the data for the MongoDB, the root URL for the Wekan site, and the ports it will listen on.  I removed the options for email in the configuration, but you can easily re-add those later.  Check the Wekan Installation Documentation Mail Server section for information on this. YAML is picky about spacing so be careful if making any changes.

 image: mquandalle/wekan
 - wekandb
 - MONGO_URL=mongodb://wekandb/wekan
 - ROOT_URL=http://wekan1:8081
 - 8081:80

 image: mongo
 restart: always
 - /home/wekan/data:/data/db

Now lets edit the default Apache2 site so it will connect to the Wekan site when someone browses to the new server.

sudo nano -w /etc/apache2/sites-available/000-default.conf

Delete the contents of the file and enter the following information:

<VirtualHost *:80>
 ServerAdmin admin@localhost
 DocumentRoot /var/www/html
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
 ProxyPass "/" ""
 ProxyPassReverse "/" ""

Reboot the system again.

sudo reboot

Wait a couple of minutes after the server reboots then browse to the server.

Using Wekan


Now that you have your own Wekan server you’ll need to learn how to use it.  Wekan is pretty simple, almost too simple – I would rather have more configuration control. So, to begin with you need to login. If you entered your server name in DNS simply browse to http://servername.


Click “Register” near the bottom of the login screen.


Enter your profile information.  Don’t worry about the email address, the system won’t be sending email in the current configuration.  However, if you ever need to change your password you are going to need email (one of those controls I think are needed). After you login you will be presented with the blank “Dashboard”.


I added a couple of users, Emma and Liam. Now I can create a new board and give them permissions to access it. To create a new board simply click “Add a new board”.


Once you have done that select the new board and on the upper right hand side click the + to add members.  Enter their name and click on it to give the user access.


After you have done this as soon as they login, they may need to logoff and login again, they will see the new board on their Dashboard.


Now you can begin adding lists, tasks, assigning tasks, and using the other Wekan features.  The interface is fairly intuitive, click-n-drag, so you should pick it up fairly quickly.





Note: I have not put our Wekan server on the Internet.  As a greybeard I am uncomfortable with Docker security to begin with, and since there are no security controls that can be manipulated through the Wekan interface I am double-plus-ungood-uncomfortable. So, before directly connecting your new Wekan VM to the internet please read up on the posts on the Gitter Chat or the Github issues page for Wekan.

Good luck, and feel free to ask questions.

1 Comment

1 Comment

Leave a Reply