Why Vagrant?
docs.vagrantup.com
docs.vagrantup.com
And Vagrant 1.4 is also under heavy development with tons of great new features and bug fixes upcoming. See my Twitter stream for more info.
If you have any questions, feel free to ask. And thanks for the support!
YMMV, however.
- http://docs.vagrantup.com/v2/provisioning/ansible.html
- http://docs.docker.io/en/latest/installation/vagrant/
- http://devo.ps/blog/2013/09/25/vagrant-docker-and-ansible-wt...
A docker provisioner is actually making its way into core for 1.4. If you want to know what that looks like take a look at "Vocker" (the plugin).
(Thats for boxes set up with the default configuration, obviously it would be a little different if you were running a more complex system.)
Thanks for such an awesome piece of software.
Some of my friends had the same problem, so I put together some scripts to automate Vagrant + Rails: https://github.com/cyrusstoller/gardenbed
Based on the way you describe you situation, I think the barrier is in configuration management. That is, writing a puppet or an ansible script is still very time consuming. A vagrant machine in general is nothing more than a vanilla server after a full install.
For me, I am beginning to investigate the possibility to create a system package (e.g. debian package) for all the apps I need to run. I think FPM will help.
People are already sharing their, for example, wordpress installation, on github. But I am more interested in modules.
Right now it has frontends for bcfg2, cfengine, chef, puppet and shell scripts. It's not perfect, but it does a pretty good job of giving you a base set of provisioning rules you can then refine by hand.
Thank you for producing such an awesome piece of software. I have been doing my local development on a Vagrant box for about a year now and in that time I have been able to move from OS X to Linux almost seamlessly thanks to Vagrant.
The only problem I have with it is the slowness of the default shared folders mechanism. Guess I need to bite the bullet one of these days switch to NFS.
Maybe, I'll try something like leaving the files on the guest and mount it on the host using SSHFS. My write performance will take a hit when I am editing files, but, if I can get rid of the sluggishness it will be worth it.
The performance is acceptable most of the times, other than when I am running one of those PHP frameworks that includes a million files to process each request.
In the next version of Vagrant (1.4), synced folder implementations can actually be standalone plugins: https://twitter.com/mitchellh/status/405442194573516801
This will allow us to much more quickly add in more implementations of this mechanism, some of which may provide excellent performance at the expense of perhaps being more difficult to setup or slower to start up. But the importance is that the framework is now _there_.
I think we'll see this improve greatly. :)
On my MacBook Pro with Mavericks, it uses less CPU than my VirtualBox Vagrant boxes and feels snappier overall (boxes start and stop faster, Apache/nginx feel quicker, shared file updates are fast). It was definitely worth the money for me – not having to deal with flaky Mavericks support in VirtualBox alone is worth the price.
For anyone building their own VMWare boxes with Packer and Fusion, note that there's a known issue with shared folders in the current version of VMWare Tools (6.0.2). The workaround is to download Fusion Tools version 6.0.1 and install that instead, as mentioned here: https://communities.vmware.com/thread/462543 Here's a shell script to automate that under Ubuntu if you need to: https://gist.github.com/anonymous/c641a4b0c4ef7b45f07e
[0] Seriously, developing in R and Python in a OS X environment where you need stuff like Gtk and CairoDevice, it can drive you to tears. Go on OS X was a pleasure.
Also check out Rove.io (formerly called Hospice.io)
Basically, I code in OS X (sublime text), but the environment the code is run in is essentially Ubuntu (or whatever nonsensical CentOS slow ass thing that I may have to deploy for)
Also, how do you push code to the instance to run/deploy the code?
I strongly suggest investigating the NFS mount option for this feature if you're using Virtualbox, as the performance difference is substantial over Virtualbox shared folders (which is the default for the /vagrant mount).
Edit: typo
So when my bootstrap scripts failed, I ran them on a Vagrant based instance instead. Problem solved.
An even more extreme example is a testing VM I setup with 5 copies of Postgres installed[1]. No mucking about locally and it's one command to spin it up. Way better than manually setting it up and so much easier to share too.
I was looking through the project issues on Github yesterday, prior to starting to play around with it and your comment reminded me that one of them was a note from the main developer asking for suggestions on automated testing. Perhaps you could send a pull request ?
Reverting to a snapshot is faster than using vagrant command line and rerunning all scripts.
I also can't get why people are so excited about vagrant. To start a VM from a base image and invoke Ansible to deploy just require a few commands - The good thing is you can make sure the deployment procedures is the same no matter in development or production environments, as the only dependency is Ansible.
ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
...and brew-cask...
brew tap phinze/homebrew-cask && brew install brew-cask
...Just...
brew cask install virtualbox brew cask install vagrant
Also... brew install ansible
Also, on Mac OS, the Vagrant install pollutes /usr/bin for no discernible reason. That directory is for the system, not 3rd-party software. See GitHub.app for an example of properly packaged command-line software.
The biggest issue for me is that I have some largish databases I need to be loaded as part of the vagrant install, and these are a pain to distribute.
The best solution I have come up with is an external drive.
As a bonus you can put them on a local http server and your whole team can download them. Just update the URL in your Vagrantfile.
I'm really really enjoying working with Vagrant.
That said, the nice thing Vagrant brings to the table is it supports multiple providers. I can't seem to see a solid listing of which in their documentation, but they mention by name at least virtualbox, vmware, and AWS. The use of a Vagrant file to configure a new machine is also nice. You can get similar behaviour with Chef/Puppet, or as I do scp in a shell script file and run it.
So, what excites me most about projects like Vagrant and Docker getting popular is that I hate flailing around with build dependencies. I was amazed with apt-get build-dep the first time I used it, but even that has let me down a few times in the past. It's much better than it used to be, but all I want for Christmas is every project to provide a easy to access environment I can grab and build their project with. We seem to be getting closer and closer to this being provided by default, instead of an exceptional circumstance.
I also saw Mitchell's videos on middleware-style coding in Ruby, also posted here, and that was a really insightful view on programming libraries.
I greatly respect this guys work. He is a definite role-model to me.
Plus, deploying to production is just a matter of a quick "git pull && ./build.sh && vagrant provision" and checking that everything came back up correctly.
Setting all this up took a long time but it was worth it in the end. At the moment we're just using Chef Solo because we only have four machines to deal with. I imagine we'll move to Chef Server at some point in the future.
Maintaining usable certificates, sharing them with other devs, synchronising puppet plugins etc was just far too much work, and very time consuming. I also found it a lot nicer to have the explicit puppet configuration right next to the code that runs on it.
I don't know if these kind of setbacks will be similar with Chef Server or not.
Is there a canonical tutorial that's worth reading?
I love the concept and would love to make it work for us if we could somehow overcome these.
Are there examples where vagrant compares to something like an existing fabric script?
So vagrant doesn't give you anything you don't already have if you're just configuring a VM, except maybe the networking and shared folders. But being able to share that VM, destroy it, and rebuild it is where vagrant makes a lot of sense.
Btw, I find the unrelated downvote on my original comment amusing. I wish we could see those doing up/down votes.
However, the only problem I have convincing my teammates is that they use TextMate/Sublime, and that's the only thing that seems to break this, where Vagrant is potentially easier (you can share a local folder).
I tried things like rsync and fuse over ssh, but they seem a bit sluggish or not-so-transparent. I wish there was some tool that would solve this.
I don't like Ruby. I don't like running virtualbox when I could be running an lxc jail with something like docker. I think I will be ditching OS X and moving back to a Linux desktop as soon as I find the right laptop.
For laptop, I recommend Macbook Air. The design, is a master piece of minimalism. As a guy who used Xmonad for years, I think OSX and a Linux VPS is the zen combo.
By doing that, you also make your builds/deploys reproducible, by making all the dependencies explicit (in a human- and machine-readable way).
Mentions the overhead of running VirtualBox.
http://clojure.org/agents#Agents and Asynchronous Actions--Example
So i might be going back to local servers and just put DB server and services inside a VM.
(yes, only in unicorn-land are code-bases separated so cleanly that developers are far-away from application logic...but I'm just speculating that a scenario in which it's more beneficial than time-consuming to setup a turnkey Vagrant solution for a pure designer is also a rare scenario)