Being able to build and test software with every change is very important, especially if the goal is to iterate and deliver into production constantly. As projects get bigger the chance that you will have an unnoticed regression gets higher, and so it's important to catch them while you still have fresh in your mind what changed recently.
I am most familiar with the Hudson/Jenkins Continuous Integration system, but was not sure it was the right fit for the current project. It is fairly heavyweight and the main requirement is integration with BitBucket private repositories as well as GitHub so an open source hosted solution was not really an option. I wasn't sure I wanted to set it up for just one or two home projects.
Drone is a Go- and Docker-based solution that runs on Ubuntu. One of the appeals of it, aside from being nice and minimalist, is the way it uses Docker containers to scale and isolate workers.
Getting it running is quite easy after installing an Ubuntu Server 14.04 LTS image; the installation for Drone on Ubuntu took just a couple minutes. I then set up NAT ports from my router to the new server, and then from VirtualBox to the Ubuntu VM, set up OAuth for BitBucket and got a connection.
I probably should have stopped at this point and saved myself quite a lot of grief, but feeling a bit paranoid about the open firewall port I thought it would be a good idea to put an HTTP proxy in front to take care of SSL and authentication, so I tried to combine an online example of a front proxies for Jenkins, @paislee's blog posting and Drone's own documentation on Nginx.
It did not go well.
What I ended up with did not support authentication or work at all under Firefox, and probably could have been done with less effort by just turning on the SSL support built into Drone. This gist shows the full configuration for Nginx SSL, proxying both the primary connection and Websockets. I guess the lesson learned is not to get unnecessarily clever with integrating unfamiliar software unless you want to spend a lot of time picking through logs and the Firefox Web console trying to figure out which connection has gone bad. I was trying to learn about both Nginx and Drone at the same time, while trying to debug the combination as well.
That said, I am glad I learned something about Nginx along the way; my Web server configuration experience dates back to Apache 1.3 and mod_perl and if I ever build something that needs to scale it seems like it would be worth using.