Skip to content

Commit

Permalink
Example Vagrantfile and notes.
Browse files Browse the repository at this point in the history
Based on previous work on vagrant branches, adjusted to use the new
--dev argument of the install script.
  • Loading branch information
dracos committed Sep 13, 2013
1 parent 0053c2a commit 54492ad
Show file tree
Hide file tree
Showing 2 changed files with 156 additions and 0 deletions.
90 changes: 90 additions & 0 deletions conf/Vagrantfile.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :

BOX_NAME = ENV['BOX_NAME'] || "precise64"
BOX_URI = ENV['BOX_URI'] || "http://files.vagrantup.com/precise64.box"

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# All Vagrant configuration is done here. The most common configuration
# options are documented and commented below. For a complete reference,
# please see the online documentation at vagrantup.com.

# Every Vagrant virtual environment requires a box to build off of.
config.vm.box = BOX_NAME

# The url from where the 'config.vm.box' box will be fetched if it
# doesn't already exist on the user's system.
config.vm.box_url = BOX_URI

# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
config.vm.network :forwarded_port, guest: 3000, host: 3000

config.vm.provider "virtualbox" do |v|
v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant", "1"]
end

config.vm.provision :shell, :inline => <<-EOS
# To prevent "dpkg-preconfigure: unable to re-open stdin: No such file or directory" warnings
export DEBIAN_FRONTEND=noninteractive
# To be in the shared directory where the repository might already be
cd /vagrant/
# We need curl to fetch the install script
apt-get update -qq
apt-get install -qq -y curl >/dev/null
curl -s https://raw.github.com/mysociety/commonlib/master/bin/install-site.sh | \
sh -s -- --dev fixmystreet vagrant 127.0.0.1.xip.io
# Assume a developer will want to run the tests.
# TODO The tests should be further altered to work regardless of
# configuration file settings
sed -i -r \
-e "s,(MAPIT_URL:) '',\\1 'http://mapit.mysociety.org/'," \
-e "s, - cobrand_one, - barnet\\n - bromley\\n - emptyhomes\\n - fiksgatami\\n - fixmybarangay\\n - lichfielddc\\n - reading\\n - seesomething\\n - southampton\\n - zurich," \
-e "s, - cobrand_two: 'hostname_substring2', - fixmystreet: '.'," \
fixmystreet/conf/general.yml
# All done
echo "****************"
echo "You can now ssh into your vagrant box: vagrant ssh"
echo "The website code is found in: ~/fixmystreet"
echo "You can run the dev server with: bin/cron-wrapper script/fixmystreet_app_server.pl [-d] [-r] [--fork]"
EOS

# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network :private_network, ip: "192.168.33.10"

# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network :public_network

# If true, then any SSH connections made will enable agent forwarding.
# Default value: false
# config.ssh.forward_agent = true

# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"

# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider :virtualbox do |vb|
# # Don't boot with headless mode
# vb.gui = true
#
# # Use VBoxManage to customize the VM. For example to change memory:
# vb.customize ["modifyvm", :id, "--memory", "1024"]
# end
#
# View the documentation for the provider you're using for more
# information on available options.

end
66 changes: 66 additions & 0 deletions notes/vagrant.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Using Vagrant

Vagrant provides an easy method to setup virtual development environments, for
further information see [their website](http://www.vagrantup.com).

The included steps will use vagrant to create a dev environment where you can
run the test suite, the development server and of course make changes to the
codebase.

The basic process is to create a "base" vm, and then "provision" it with the
software packages and setup needed. There are several ways to do this, including
Chef, Puppet, or the existing FixMyStreet install script which we will use. The
supplied scripts will create you a Vagrant VM based on the server edition of
Ubuntu 12.04 LTS that contains everything you need to work on FixMyStreet.

## Pre-requisites

1. Install [VirtualBox](http://www.virtualbox.org/wiki/Downloads)
2. Install [Vagrant](http://downloads.vagrantup.com/)

## Get the FixMyStreet code

Create a folder somewhere that you'll be doing your work from and clone the repo
into it.

``` bash
mkdir FMS-vagrant
cd FMS-vagrant
git clone --recursive https://github.com/mysociety/fixmystreet.git
```

## Set up the Vagrant box

The vagrant configuration needs to be placed in the correct place.

``` bash
# NOTE - you need to be in the 'FMS-vagrant' dir

cp fixmystreet/conf/Vagrantfile.example Vagrantfile

# start the vagrant box. This will provision the system and can take a long time.
vagrant up --no-color
```

## Working with the vagrant box

You should now have a local FixMyStreet development server to work with. You
can edit the files locally and the changes will be reflected on the virtual
machine.

To start the dev server:

``` bash
vagrant ssh

# You are now in a terminal on the virtual machine
cd /vagrant/fixmystreet

# run the dev server
bin/cron-wrapper script/fixmystreet_app_server.pl -d -r --fork
```

The server should now be running and you can visit it at the address
http://127.0.0.1.xip.io:3000/

Enjoy!

0 comments on commit 54492ad

Please sign in to comment.