NYCPHP Meetup

NYPHP.org

[joomla] Dev environment using virtualbox

Gary Mort garyamort at gmail.com
Fri Sep 2 12:18:41 EDT 2011


I've been driven a little crazy lately with trying to develop for Joomla 
with the following limitations:

1) Half the sites use PHP 5.2 and half of them use PHP 5.3
2) Sometimes I'm online and sometimes I'm offline


I kept coming back to "if only I was using linux, I could set things up 
more easily"....  Then it struck me that my desktop is a beefy system 
memorywise[this solution is gonna take a lot of memory] - so I gave 
VirtualBox a try.
http://www.virtualbox.org/

VirtualBox basically allows you to run different operating systems in a 
virtual environment.

For my current setup, I started with Ubuntu Server:
http://www.ubuntu.com/download/server/download

For the VirtualBox settings, choose fixed disk size - not dynamic.  I 
use 10GB, it eats up the full space but improves performance.  My system 
has 8GB of memory, so I give the system 2GB of ram, I'd suggest nothing 
under 1GB.

in the network settings for the virtual machine, I setup TWO network 
adapters.  Adapter 1 is set to "bridged adapter", the name is selected 
from my active adapter.   This allows the system to connect through 
yours to the internet.   Adapter 2 is a "Host Only Adapter"  - basically 
it's a "fake" network adapter that allows your pc communicate with the 
VM and the VM communicate with you.  So if your doing this on a laptop, 
you can still work even while offline.

****For the application settings[File-->Preferences] - go to the network 
settings and configure the virtual network adapter settings.  The 
important bit here is to disable the dhcp server.

When installing Ubuntu, setup adapter 1 for DHCP and adapter 2 as a 
static IP address in a different network[most home networks are 
192.168.1.0 or 192.168.2.0 - so I give my internal only network the 
address 192.168.129.1, netmask 255.255.255.0 - no default gateway!]

Openssh is important to install for decent CLI access.
Samba should be installed to make it easy to access the files on the 
server[just share out your web directory and then you can map the drive 
and access it from your favorite web editor].
Git, subversion, and mercurial should be installed since you need it at 
some point
I always make sure to install wget
Now, the piece of magic that makes this all work, DNSMasq:
http://thekelleys.org.uk/dnsmasq/doc.html

DNSMasq allows you to run a DHCP server and  DNS cache on the virtual 
machine.  So you setup the DHCP server to give out an IP address to your 
system, and have it pass itself along as the DNS server[make VERY sure 
to also specify a blank gateway/router so all your internet traffic goes 
to the right place].
The importan bits I've found:
interface=eth1
interface=lo
^^^these 2 lines makes sure that your system doesn't try to take over 
your "real" network
address=/osm/192.168.56.1
domain=osm
^^^this sets up the "fake" domain osm and configures it so any domain 
ending in .osm will be given the ip address 192.168.56.1  - the virtual 
machines ip address
dhcp-range=192.168.56.10,192.168.56.15,255.255.255.0,12h
^^^ this gives your fake network a range of addresses, and a long timeout
dhcp-option=3
^^^ makes sure dnsmasq doesn't try to get your computer to route traffic 
through it
dhcp-option=19,0           # option ip-forwarding off
dhcp-option=44,192.168.56.1     # set netbios-over-TCP/IP nameserver(s) 
aka WINS server(s)
dhcp-option=45,192.168.56.1     # netbios datagram distribution server
dhcp-option=46,8           # netbios node type
^^^^helps with the file shareing
dhcp-authoritative
^^^speeds up initialization
cache-size=1500
no-negcache
^^^helps with lookups


As an added bennie, with dnsmasq running, your lame windows box now has 
the full power of a linux domain name caching - so it will speed up your 
general internet usage.

Then, in general, I follow the instructions at 
http://www.metod.si/multiple-php-versions-with-apache-2-fastcgi-phpfarm-on-ubuntu/ 
to setup and install apache, mysql, and php 5.2 and 5.3 - with 
modifications for the latest versions of each.

In my virtual hosts configuration the following are important:
VirtualDocumentRoot /var/www/%-3

%-3 basically means the third element of the domain name and is used to 
map domains to directories.  So for me:
http://testsite.53.osm - the files stored at /var/www/testsite - the 
THIRD element of the domain  name will be used
also using that directory is http://www.testsite.53.osm and 
http://testsite.52.home

Wheras http://mydomain.53.osm will use the files located at 
/var/www/mydomain

Our last bit of magic uses the virtual host configuration:
<VirtualHost *:80>
         ServerAdmin webmaster at localhost
         ServerName 52.osm
     ServerAlias *.52.osm
     VirtualDocumentRoot /var/www/%-3
         DocumentRoot /var/www
<Directory /var/www/>
                 Options +Indexes +FollowSymLinks +MultiViews +ExecCGI
                 AllowOverride All
                 Order allow,deny
                 allow from all
                 AddHandler php-cgi .php
                 Action php-cgi /php-fcgi/php-cgi-5.2

</Directory>

<VirtualHost *:80>
         ServerAdmin webmaster at localhost
         ServerName 53.osm
     ServerAlias *.53.osm
     VirtualDocumentRoot /var/www/%-3
         DocumentRoot /var/www
<Directory /var/www/>
                 Options +Indexes +FollowSymLinks +MultiViews +ExecCGI
                 AllowOverride All
                 Order allow,deny
                 allow from all
                 AddHandler php-cgi .php
                 Action php-cgi /php-fcgi/php-cgi-5.3

</Directory>


These 2 configurations are almost identical, the only things that change 
are servername, serveralias, and action
The servername has to be a full name, so I just use the php version I 
want with the domain tacked on[53.osm].
The serveralias can have a wildcard, so *.53.osm means that for ANY 
website you try to load which ends in .53.osm use this configuration.
Lastly, the Action line tells apache which PHP FastCGI server to route 
the request to.  So I have 2 different instances of PHP running, 5.2 and 
5.3 and route accordingly.

[Note, I share out the /var/www directory using SAMBA, and then map it 
on my windows box to drive letter W:]

So now to edit files on my test website, garyamort, I edit the files 
located at w:/garyamort
To see the website using PHP 5.2, I go to http://garyamort.52.osm
To see the website using PHP 5.3 I go to http://garyamort.53.osm

When dealing with oddities like a website which "suddenly" stops 
working, one cause is upgrading to PHP 5.3
CiviCRM for example has 2 versions, almost identical but one of them 
will run on PHP 5.2 and one runs on PHP 5.3  - so a CiviCRM website that 
suddenly stops working is likely to have a webhost who upgraded PHP from 
5.2 to 5.3

It's a fairly simple solution - just copy the 5.3 version files over the 
old version files AND DELETE THE TEMPLATE CACHE DIRECTORIES - and it 
will start working again.

If there is interest, I'm trying to put together a virtual box of all 
this pre-configured, so all you have to do is - with the exception of 
the part I put *** in front of, it would all be plug and play for most 
home networks.

By the same token, if anyone knows a bit more about DHCP and DNS - I've 
had trouble with this part with windows...since both the home router and 
my virtual box broadcast a DNS server address, Windows will 
occassionally grab the wrong DNS address.  The problem is, I don't want 
to ALWAYS run the virtualbox, so I want some way for the VM to override 
the DNS address, but still allow the client to use the other one.

And for those of you who are really good with IPForwarding, I sometimes 
have to use remove VPN networks.  So I have the VPN client on both my 
windows machine and the virtual machine running.  It would be great if I 
could get the VPN client on the linux machine to dynamically update 
dnsmasq so that when it's running, the DHCP server will tell my windows 
box to route all traffic just for the remote network through it, and do 
some NAT routing on the virtualbox so the connection goes through there.

-Gary



More information about the Joomla mailing list