Web Development (LAMP)

The purpose here is to build a virtual machine that will be used as a LAMP web development environment.

It will be based on a Debian Wheezy OS, with an Apache2 HTTP server, allowing to select a specific PHP version to run for each virtual host through PhpFarm run via suexec.
We'll also add Xdebug to facilitate PHP code debugging.

Finally, MySQL will also be installed as database management system.



Install a Debian Wheezy system from Debian's stable netboot-mini.iso image.

You can refer to this section of the wiki for more in-depth information on how to do this.

We'll have 2 adapters set up for this VM, one for local communication on a 172.20.20.x address and another one for internet access via DHCP.


Setup Network Adapters

In our setup, we'll allocate the IP address 172.20.20.2 as our local access address, you could of course choose whatever fits your personal configuration requirements.
On the first launch of our VM, an arbitrary DHCP address will be allocated to it's first interface, to find out its address, login to the VM using the regular VirtualBox window and type:

> ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:55:21:b7 brd ff:ff:ff:ff:ff:ff
    inet 10.0.7.61/24 brd 10.0.7.255 scope global eth0
    inet6 fe80::a00:27ff:fe55:21b7/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 08:00:27:6e:8b:7d brd ff:ff:ff:ff:ff:ff

This will indicate the allocated DHCP address for your VM, here 10.0.7.61.

From there you might want to use a terminal emulator to access the VM as it will usually be easier to use than the standard VM screen that has no scroll back or copy/paste functionality for example.

Let's now fix the secondary (local) IP address. To this purpose, let's modify the /etc/network/interfaces file to make it look like what follows:

> nano /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp

# Alias for static inner interface
auto eth1
iface eth1 inet static
   name static alias LAN card
   address 172.20.20.2
   netmask 255.255.255.0
   broadcast 172.20.20.255
   network 172.20.20.0

We only still need to restart the secondary interface to activate the newly set fixed IP address, then check that is correctly set:

> ifdown eth1 && ifup eth1
ifdown: interface eth1 not configured

> ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:55:21:b7 brd ff:ff:ff:ff:ff:ff
    inet 10.0.7.61/24 brd 10.0.7.255 scope global eth0
    inet6 fe80::a00:27ff:fe55:21b7/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:6e:8b:7d brd ff:ff:ff:ff:ff:ff
    inet 172.20.20.2/24 brd 172.20.20.255 scope global eth1
    inet6 fe80::a00:27ff:fe6e:8b7d/64 scope link 
       valid_lft forever preferred_lft forever

The last block (3: eth1:) indicates that our secondary interface is well set with the targeted fixed IP address 172.20.20.2

We're ready to move on…


Change VM's Hostname

To make things clear, and have an indication of the machine we're logged to whenever we ssh into it, we'll change the machine's hostname. This is done by editing 2 more file: /etc/hosts and /etc/hostname :

In /etc/hosts, you'll only need to change the second line to make it look like the following:

> nano /etc/hosts

127.0.0.1       localhost
127.0.1.1       lamp-xd.virtual.net     lamp-xd

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Then replace the content of /etc/hostname

> nano /etc/hostname

lamp-xd

You'll need to restart the VM for those changes to take effect

> reboot

It is now time to install the HTTP Server (Apache2).