rafalp/Misago — pull request #135 by kasperisager (2013-06-09 21:02:48+00:00)
Title: Add a Vagrant-setup for easy and replicable dev environments

Is personally use Vagrant for managing all my dev environments and was kind of surprised to find that Misago doesn't yet utilize the power of Vagrant - it makes it incredibly easy getting new people up and running with Misago and other software for that matter. This pretty simple Puppet-provisioned Vagrant-setup takes care of installing all of Misago's dependencies as well as setting up the most basic configuration. I've changed only a few config variables to match the Vagrant directories as well as add a private network IP for use by the Django dev server. Vagrant's network mapping feature doesn't work in the case of Misago as it relies on Django's CSRF features thus requiring direct access to the server for the cookies to work.

### How-to

Using this Vagrant-setup, installation is now as easy as doing the following:

```sh
git clone git://github.com/rafalp/Misago.git
cd Misago
vagrant up
```

And once inside the VM simply start the Django dev server:

```sh
cd /vagrant
sudo python manage.py runserver 192.168.33.10:80 # Private network address as per the Vagrant config
```

### What's inside

* __OS__: Ubuntu 12.04 "Precise", 32-bit
* __Provisioner__: Puppet stand-alone
- [puppet-python](https://github.com/stankevich/puppet-python)

That's pretty much it! Puppet takes care of installing the required Django modules and other Python dependencies using `pip` and also runs `startmisago` and `adduser`, the latter in an idempotent manner.

### What's next

Ideally, I'd like to add an example Gunicorn + Nginx config in preparation of a production-ready version of Misago. I do however plan for this to be a separate project to keep your main repo as clean and uncluttered as possible. What I've added here is only the bare-minimum required for Misago to run. It should however make it much, much easier for new people to get started with Misago and enjoy all the goodness you've written!