Over the years I’ve gone through many OS updates, software upgrades, hard drive reformats, hard drive crashes… you name it. Each time, even with backups, it’s always a pain to have to reinstall all the server software, components, dependencies, etc.
Enter virtual machines.
For those of you unfamiliar, a virtual machine is exactly what the name implies: virtualized hardware (machines) that allows you to run multiple operating systems at the same time. For more information, see http://en.wikipedia.org/wiki/Virtual_machine.
Virtual machines aren’t new at all and I have used them for many of years for various tasks (testing new software, test / tracing viruses without infecting my host computer, network testing, and gaming to name a few), but previously I hadn’t used them that much for my web development work (aside from browser testing). I’ve tried both Parallels and VMWare Fusion and at the moment don’t have a preference, however, currently I use VMWare Fusion.
- Host OS: OSX
- Guest OS (VM): Ubuntu 64bit
- Web server: Lighttpd, PHP w/ FastCGI and MySQL
I set this up awhile ago and so far it has worked great.
The benefits are many:
- Anytime I perform a host OS upgrade, I just need to copy my virtual machine to my local disk and my development server is ready for work.
- I can copy my virtual machine to any number of computers and run the same environment regardless of whether I’m using my desktop or my laptop.
- Virtual machines can be used regardless of the host operating system without affecting my server applications or impacting my work
- Since I keep regular “snapshots” of my virtual machine, I can easily roll the virtual machine back to a previous state if there are issues with upgrading the guest OS… all without impacting my host OS.
- Combining a virtual server with Git makes sure any project I need can be easily retrieved and updated, regardless of where I am.
In the end, the most valuable thing it gives me is a ton of time saved and as much redundancy as I want.