Consolidate: Put Your Servers into a VirtualBox VM
on September 30, 2010
Rather than installing a server, such as a web server, directly onto your main computer, why not install it in a VM? This sort of setup has a few advantages of security and convenience. These days, spreading resources out into the cloud is the in-thing, but consolidation is often underexploited. Hosting a server in a virtualizer such as VirtualBox is often a good approach for casual or occasional server needs on a home network. This is an outline of a setup that makes use of Debian, running Apache, installed onto a VirtualBox VM. If you would like to install a different type of server, but you haven't done this sort of job before, it might be a good idea to follow through with the Apache example as it is a simple way of testing the networking side of things. As I said, consolidation is underrated concept these days. Often, when people talk about keeping an old machine up and running, in a cupboard, just to run a web server, I wonder if their main machine has CPU cycles, memory, storage or even whole CPU cores going spare. Unless your needs are great, it's doubtful that an external source could provide resources more efficiently than a little extra load on your main box. Why put the server in a VM? Obviously, some server tasks are mission critical and need a dedicated machine for greater reliability, but if you have only a casual or occasional need to employ a server, ask yourself how often your desktop machine totally falls over. Modern operating systems have reached the point where if my main box completely locked up I'd suspect a hardware fault. Of course, you could always install the server directly onto your main desktop, but that can bring its own problems. Package management makes it easy to add and remove server software, but as often as not, you end up having to make some small changes to your machine to accommodate a server. Also, if your locally hosted server is exploited in some way, it could bring your main computer into the line of fire. Another advantage of keeping your server locked up inside a VM is that it makes the server environment portable. It's easy to copy a hard disk image and import it into VirtualBox. This means that your servers don't need to be set up and configured from scratch when you move over to a new machine. Virtualizers also allow you to shut down or pause your server environment or snapshot a working setup that can be reverted to in the event of a mishap.Setting it up Installing a server such as Apache in a VirtualBox VM doesn't differ greatly from installing it natively. Begin with a suitable Linux installation. It might be a good idea to choose something a bit lighter than a mainstream desktop distribution in order to conserve resources on the host machine. Debian with a lightweight window manager could be a good start (see my guide). If you're familiar with the command line interface for the server that you want to deploy, an install without a graphical environment can be ideal. The important VirtualBox networking setting that you have to select is “bridged” rather than the default of “NAT”. By default, VirtualBox VMs present the guest operating system with a networking setup that works well enough for a web browser, or similar, to connect to the outside world. Selecting “bridged” networking makes the VM appear as though it is simply another computer attached to your network via an Ethernet cable. One consequence of using bridged networking is that your network will have to supply the VM with an IP address. If your router has DHCP enabled, it should set the VM up in the same way that it would any other computer on the network. To check to see if the VM has an IP address, make yourself root and type:
su root [enter password] ifconfigOn a fairly fresh install, details for two network interfaces, eth0 and lo, should be listed. To ensure that the VM can communicate with the outside world, the second line of the eth0 description should start with something something like:
inet addr:192.168.1.12If the VM hasn't been assigned an IP address at all by your router, look up the instructions to assign a static address for your choice of guest operating system (Debian instructions here, for example). Once that’s working, the hard part is over. Next install Apache in the normal way:
su root apt-get install apache2Apache pretty much sets itself up, these days. First, test that it is running and can be accessed from other machines on the network such as your host machine. Point the browser to the IP address that you obtained from running ifconfig on the guest VM. Hopefully, this will display the “It works!” message from Apache. VirtualBox hosting a Debian guest. The install is slimline as I opted not to bother with a graphical environment. Firefox successfully finds the Apache install. I asked an IRC buddy to make sure that it could be seen from the Internet. Next, setup port forwarding for your router so that machines on the Internet can reach your server VM. If you don't know how to do this, consult the instructions for your router. Specifically, you need to forward external requests to port 80 to port 80 on the IP address assigned to the VM. The VirtualBox website.