Friday, January 29, 2010

Server provisioning and other technical infrastructure

One of the other major tasks I've been focusing on the last few weeks is building some infrastructure. As we continue to expand our team, I've realized we need to do some work on our own technology landscape to enable that growth.

Some of the major pieces I see for the technical infrastructure:
  • Automating the process for building a new server with our major apps installed -- a process called server provisioning.
  • Using the same framework for all of our applications.
  • Building a library of common code that we will use across all of our apps.
Server automation

Through a series of events I won't go in to, I've ended up doing most of the server administration for the web servers that the project application tool and the pulse run on. As a result, I've learned and experienced some of what it's like to administrate a server that runs ruby on rails, such as managing packages and libraries installed, deploying changes to the server, and doing operating system security updates.

When we had students at Waterloo project, I helped many of them get set up for development. As a result, I learned even more about how to set up a computer for ruby on rails development.

I realized that documenting the setup procedure would save us time and result in cleaner and more consistent development environments. We used a wiki to document the process.

As I kept copying and pasting commands, I figured there was an easier way, and it turns out there's a number of libraries out there that will run the commands you specify to set up an environment. After doing some research, I settled on the moonshine provisioning library, which is used and developed by the commercial hosting site railsmachine. Moonshine is built on another tool called puppet which is an industry standard in the provisioning area.

I've spent quite a bit of time now building a "manifest" that, when run on a compatible base install of debian or ubuntu linux, will set up everything needed to actually server the project application tool and the pulse. I even got to submit a few patches to the open source moonshine library through the process.

The end result is that a new developer can set up their environment in about 45 minutes, after running a single command to start the process. I can also set up a new server in roughly the same time.

Having this server provisioning will save us time in a number of ways. There's the obvious time saved in setting up new systems. Without going in to the technical details why, having this server provisioning set up properly will make it much easier to track down and fix bugs.

I've also built the server provisioning process with the international community in mind. I'm attempting to make it as easy as possible for other countries to adopt our script to their own environment.

More on the rest of the items later.

No comments:

Post a Comment