summaryrefslogtreecommitdiff
path: root/_posts/2010-11-22-vagrant-rocks.textile
diff options
context:
space:
mode:
authorFranck Cuny <franck.cuny@gmail.com>2013-11-26 10:36:10 -0800
committerFranck Cuny <franck.cuny@gmail.com>2013-11-26 10:36:10 -0800
commit8ddf2e94df70707b458528a437759b96046d3e01 (patch)
treed442818d92d3c9c6f7fcdc92857a1228963849a1 /_posts/2010-11-22-vagrant-rocks.textile
parentDon't need to use the IP in the makefile. (diff)
downloadlumberjaph-8ddf2e94df70707b458528a437759b96046d3e01.tar.gz
Huge update.
Moved all posts from textile to markdown. Updated all the CSS and styles. Added a new page for the resume.
Diffstat (limited to '_posts/2010-11-22-vagrant-rocks.textile')
-rw-r--r--_posts/2010-11-22-vagrant-rocks.textile131
1 files changed, 0 insertions, 131 deletions
diff --git a/_posts/2010-11-22-vagrant-rocks.textile b/_posts/2010-11-22-vagrant-rocks.textile
deleted file mode 100644
index ea34e4a..0000000
--- a/_posts/2010-11-22-vagrant-rocks.textile
+++ /dev/null
@@ -1,131 +0,0 @@
----
-title: Vagrant rocks
-layout: post
-category: misc
----
-
-h2. tl;dr
-
-I've been toying with "vagrant":http://vagrantup.com/ lately, and it *really rocks*. You should definitly give it a try. If you're only looking for some resources to get started with it, go there:
-
- * "introduction":http://vagrantup.com/docs/index.html
- * "google group":http://groups.google.com/group/vagrant-up
-
-h2. What is Vagrant
-
-"Vagrant is a tool for building and distributing virtualized development environments." This sentence summarizes perfectly the project.
-
-The idea is to use "Chef":http://www.opscode.com/chef on top of "VirtualBox":http://www.virtualbox.org/ to deploy a VM like you would deploy a server in your production environment.
-
-I won't go into the details to describe Chef and VirtualBox, but here is a quick reminder. Chef is a framework to deploy infrastructures. It's written in ruby, it uses *cookbooks* to describe how to deploy stuff, and VirtualBox is a virtualization software from -Sun- Oracle.
-
-bq. A little disclaimer. I don't use Chef outside from vagrant, so I may say/do some stupid things. The aim of this tutorial is not about writing a recipe for Chef, but to show what you can do thanks to Chef. So don't hesitate to correct me in the comments if I'm doing some utterly stupid things.
-
-h2. The basic
-
-To install vagrant, you'll need ruby and virtualbox. You have the basic instructions detailed "here":http://vagrantup.com/docs/getting-started/index.html. This will explain how to install vagrant and how to fetch a _base_ image.
-
-h3. Creating a first project
-
-You'll probably want to start creating a new project now. For this tutorial, I'll create an image for "presque":https://github.com/franckcuny/presque.
-
-bc.. mkdir presque
-vagrant init
-
-p. This will create a new image for your project, and create a new file in your directory: _Vagrantfile_. Modify this file to make it look like this:
-
-<script src="https://gist.github.com/705569.js?file=ruby"></script>
-
-These instructions will:
-
- * tell vagrant to use the image named _base_ (a lucid32 image by default)
- * use chef in _solo_ mode
- * the recipes will be in a directory named _cookbooks_
- * the main recipe will be named _vagrant_main_
- * forward local HTTP port 4000 to 5000 on the VM
-
-h3. My recipes
-
-Now we need to create or use some recipes. First we create our _cookbooks_ directory:
-
-bc.. mkdir cookbooks
-mkdir -p cookbooks/vagrant_main/recipes
-
-p. We need to add some cookbooks. You will find them on "github":https://github.com/opscode/cookbooks. Copy the following cookbooks inside the _cookbooks_ repository:
-
- * apt: instructions on how to use apt
- * ubuntu: this one manages the sources and executes _apt-get update_
- * build-essential: installs the build-essential package
- * git: installs git
- * perl: configures CPAN
- * runit: will be used to monitor redis and our web application
-
-Edit _vagrant_main/recipes/default.rb_ to add them:
-
-<script
-src="https://gist.github.com/705569.js?file=default.rb"></script>
-
-If the VM is already started, you can do
-
-bc.. vagrant provision
-
-p. or
-
-bc.. vagrant up
-
-p. This will deploy the previous cookbooks on the VM. When it's done, you can log on the VM:
-
-bc.. vagrant ssh
-
-p. You'll need to additional recipes: one for redis; one for presque. You'll find them on my "github account":http://github.com/franckcuny/cookbooks/. Copy the two recipes inside your cookbook directory, and execute @vagrant provision@ to install them.
-
-If everything works fine, you should be able to start using presque. Test this:
-
-<script
-src="https://gist.github.com/705569.js?file=test-presque.sh"></script>
-
-If everything is fine, you can shut down the VM:
-
-bc.. vagrant halt
-
-h3. Mounting directories
-
-Instead of pulling from github, you may prefer to mount a local directory on the VM. For this, you'll need to modifiy the _Vagrantfile_ to add this:
-
-bc.. config.vm.share_folder "v-code", "/deployment/code", "~/code/perl5"
-config.vm.share_folder "v-data", "/deployment/data", "~/code/data"
-
-p. This will mount your local directories _perl5_ and _data_ under _/deployment/{code,data}_ on the VM. So now you can edit your files locally and they will be automagically updated on the VM at once.
-
-h2. and now the awesome part
-
-If you're like me, you may end up with the need to have multiple VMs which will talk to each other. Common scenarios are a VM with the website, and another one with the DB, or one VM with a bunch of API webservices and another with Workers who need to interact with the VM. Rejoice, this kind of stuff is also handled by vagrant!
-
-Replace the content of the previous _Vagrantfile_ with this:
-
-<script
-src="https://gist.github.com/705569.js?file=multiples%20vm"></script>
-
-In this configuration, we're creating two VMs, _presque_ and _workers_. You'll need to create two new cookbooks, one for each new VM (vagrant_presque, with the same content as vagrant_main, and vagrant_workers, with only the recipe for ubuntu and the instructions to install curl). Once it's done, boot the two VMs:
-
-bc.. vagrant up presque
-vagrant up workers
-
-p. Now let's log on the worker VM
-
-bc.. $ vagrant ssh workers
-vagrant@vagrantup:~$ curl http://192.168.1.10:5000/q/foo
-{"error":"no job"}
-
-p. and voilĂ .
-
-h2. Conclusion
-
-I've started to use vagrant for all my new personal projects and for most of my stuff at work. I really enjoy using this, as it's easy to create a cookbook or add one, it's easy to setup a multi VM environment, you can share a configuration amongst your coworkers, etc.
-
-If you haven't started yet using a VM for your own projects, you really should give it a try, or use a simple VirtualBox setup. If you want to read more on the subject, these two blog posts may be relevant:
-
- * "Why you should be using virtualisation":http://morethanseven.net/2010/11/04/Why-you-should-be-using-virtualisation.html
- * "nothingmuch setup":http://blog.woobling.org/2010/10/headless-virtualbox.html
-
-(oh, and BTW, did you notice that "Dancer 1.2":http://search.cpan.org/perldoc?Dancer is out ?)