Random project idea
For a while now I’ve been working with both Git and automated server deployment and I was thinking, why not combine the two?
Wouldn’t it be awesome to have a full revision history of provisioned changes to a servers configuration and wouldn’t it be nice if every time you pushed your app it was magically deployed and set up and running? Yes, yes it would.
At SonicIQ we developed a tool similar to gitosis, a tool that uses git to manage git repositories and access control. Building on some of the principals learnt from that I think it would be possible to use a git managed server configuration file that target servers could checkout out and use for configuring themselves, their checkouts happening either periodically or triggered by post-commit hooks somehow. Those servers would need a minimum of software running to be able to parse the config files, determine changes (easy to do with a git repo) and then implement them automatically without manual intervention. These self-deployment servers could also handle requests from app repositories (again via post-commit hooks) and automatically deploy sites when new versions are pushed out.
I can see obvious problems with this approach, such as security concerns (having a server that can basically reconfigure the entire system based on commands sent over a public interface) and management issues due to configuring post-commit hooks and what not, but generally I think the concept is pretty sound and other similar systems already exist such as puppet which are no doubt better and more robust, but I quite like the idea of building a distributed deployment and configuration system on top of git, if only to see if it’s a feasible approach.