I would like to present a small part of the big architecture we have in Axelerant’s Dev Cloud which has the nickname, “Projspace”. Projspace is the product we’re developing in-house to maintain all of Axelerant’s infrastructure. We also use it to operate all the service projects we undertake.
So, What the heck is Projspace?
Hmm! It is a collection of awesome tools, blended with kickass scripts all laid on a solid foundation. Let’s get into the internals and experience the awesomeness. As I would prefer to be non-technical in this blog post for a better understandability, we’ll get geeky in future posts!
Projspace can be plugged into any cloud service provider (ex: Amazon, Rackspace). We use Amazon to develop Projspace and host Projspace though a part of our Projspace is hosted in-house. We are employing this functionality to experiment with the distributed nature of Projspace.
We have a Debian Wheezy minimalistic installation on top of an 8 core AMD Opteron(TM) Processor 6134 with 32 GB of Memory. Since Debian Wheezy is close enough to become stable, we have chosen to use it as a base and this makes for an easy upgrade in the near future. On top of this we have LXC installed and we use tiny containers as web, application servers to host the infrastructure. LXC is now within the kernel unlike OpenVZ and we therefore need not recompile the kernel to use it. Now lets go into the main containers we have for hosting our projects and processes.
Using LXC, we virtualize our needed environment. For all the containers, we have chosen Debian squeeze as the distro as it is in line with all the stable applications. There are a couple of containers we use extensively, and I want to talk about three of them which make the Projspace a practical application.
We have a container in which we run web server. It is installed with Apache2, Percona, PHP5 and every developer has an account in it. Every project has a posix-compliant user account with the name of the project identifier that is borrowed from Curamine. Your curiosity about Curamine will be continued for some time. :-) For now, imagine it as a web application. All the developers who are working on a project are added to the `posix` group with writable permissions on that home directory. Each home directory has distinct directories for development, staging and production instances and each project has 3 separate databases for each of the instance. And the credentials are available from Curamine. Each of these directories are configured with Apache virtual host. All of these configurations are automatically setup for each project we created in our Curamine dashboard.
This is another LXC container that we were hosting in-house until recently moved to Amazon’s EC2. This runs Gitlab, for maintaining project repositories. Each repository is setup with a webhook that fires for every push and this updates the devel instance of the project.
Curamine is a fork of Redmine (http://www.redmine.org/). This is the face of Projspace with a lot of beauties added to it in the form of pre-defined mature processes while executing a project. It is also a ticket tracking system and point of information exchange for all project stakeholders. All Projspace’s functionalities can be explored and controlled via Curamine. Curamine’s other functionalities require another blog post for a better understanding, and it is another beautiful rose in our bouquet.
Learn more in part 2 about Projspace.
This article was originally published February 19, 2013. It has been updated since then for clarity.