Mugo Web main content.

Using VirtualBox to install and test eZ Publish 5

By: Thiago Campos Viana | February 18, 2014 | eZ Publish development tips, install, virtual box, and ubuntu

Using virtual machines when developing eZ Publish websites have been useful in 2 main ways (if not more): working in a different server environment than your current machine and standardizing the dev environment for a team of developers. At the moment, I have Ubuntu 13.10 installed as my main operating system, and from time to time I need to work with some older eZ Publish versions that require PHP versions older than Ubuntu 13.10's default; in fact, the oldest eZ Publish version that I can run out of the box on Ubuntu 13.10 is eZ Publish 4.7. I don't like the idea of installing another OS just to work with an older eZ Publish version; that requires creating another partition, configuring grub, and so on. Using virtual machines enables me to work within another OS inside my main OS. That way I can work on a standardized environment specific to each client, while continuing to use my favorite base OS and tools. In this tutorial, I will describe how to install and configure Oracle VirtualBox to create virtual machines that run eZ Publish.

Download and install VirtualBox

VirtualBox supports Windows, Mac OS X, and Linux. You can download the appropriate package here.  In our tutorial, we are using VirtualBox 4.3.6.

Download the installer for the virtual machine operating system

In this tutorial we are going to use Ubuntu Server 12.04 LTS for our virtual machine. The default repositories for this Ubuntu version use PHP 5.3.x, which allow us to work with all the eZ Publish releases from the 4.x series, but also even the current 5.x series.

VirtualBox setup

After starting VirtualBox and choosing to create a new virtual machine, select "Linux" as the "Type" and choose "Ubuntu" or "Ubuntu (64 bit)" as the "Version", depending on what is appropriate for your system.

On the next screen you are going to select the amount of memory to give the operating system. This depends of course on what site you are going to work on. 2 GB (2048 MB) is a safe value for most installs.

In the "Hard drive" screen, select "create a virtual hard drive now". Then, choose "VDI", which is the native VirtualBox format. Then, choose between a dynamically allocated and a fixed size hard drive one; I usually prefer the fixed size, but if you do not have much free space available, you can choose dynamically allocated. For an Ubuntu installation with 1 eZ Publish website, the bare minimum storage space required is about 2 or 3 GB, but this depends on the details of the site.

The virtual machine should now be created.

However, there are a few more details to configure.  Select the new machine and click "Settings". Go to the "Network" tab and configure it as follows:

Attached to: Bridge Adapter

Name: eth0 (if you are using a cable); or wlan0 (if you are using a wireless network).

Then, configure the installation disk. Go to the "Storage" tab; in the "Controller: IDE" section, Click the icon for "Add CD/DVD Device". Then, click "Choose disk" and find the Ubuntu installer than you downloaded earlier.

Click "OK" to save the settings. Back on the main screen, click the "Start" button to boot your virtual machine and install the operation system. From there you can configure the operating system and install eZ Publish as per normal. If you have multiple developers, you can share your base virtual machines for a common dev environment.

Additional options

I have shown just a simple example here; you can easily use this tutorial as a base to install other Linux distributions or even a Windows or Mac virtual machine. You can also manage configurations and build powerful automated setups with tools such as Vagrant, Ansible, and PuPHPet.

Bonus: general setup notes for Ubuntu

If setting up a server is new to you, here are some notes on preparing a new eZ Publish install on a new Ubuntu 12.04 virtual machine.

Enable SSH connections:

Install OpenSSH via apt-get:

sudo apt-get update
sudo apt-get install openssh-server
sudo ufw allow 22

You can check the IP address of the virtual machine by typing:

ifconfig

Use the IP address to access the virtual machine from your base operating system using SSH and to open your eZ Publish installation in your browser.

Install MySQL, Apache, PHP, and Java

Install the necessary components via apt-get:

sudo apt-get install mysql-server mysql-client

sudo apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert
 
sudo apt-get  install libapache2-mod-php5 php5 php-apc php5-intl php5-xsl php5-common php5-gd php5-curl  php5-dev  php5-idn php-pear php5-imagick php5-imap php5-mcrypt  php5-memcache  php5-mhash php5-ming php5-mysql php5-ps php5-pspell  php5-recode  php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl  php5-cli  imagemagick php5-pgsql

# If you need to install Java for the eZ Find search engine
sudo apt-get install openjdk-6-jre

Enable Apache modules

sudo a2enmod ssl
sudo a2enmod rewrite
sudo a2enmod suexec
sudo a2enmod include

Configure the virtual host setup

Create /etc/apache2/sites-available/default and relevant virtual host settings for your version of eZ Publish.

Modify some key PHP.ini settings

On Ubuntu, the PHP settings are typically configured in /etc/php5/apache2/php.ini

Some key settings to modify include:

max_execution_time = 180
max_input_time = 180
memory_limit = 128
date.timezone = Your/Time_Zone

Install eZ Components

Use the pear installer:

sudo pear channel-discover components.ez.no
sudo pear install -a ezc/eZComponents

Restart Apache

sudo service apache2 restart

Create a MySQL database

Connect to MySQL, then run:

CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'dbuserpass';
GRANT ALL PRIVILEGES ON dbname.* TO 'dbuser'@'localhost' WITH GRANT OPTION;

Install eZ Publish

We'll leave this part to the eZ Publish documentation, except for a note about file permissions. To avoid headaches with file permissions, I like to use Ubuntu ACL (you can install it using: sudo apt-get install acl).

A quick way to configure file permissions for eZ Publish:

find /path/to/ez -type d -exec chmod 775 {} \;

find /path/to/ez -type f -exec chmod 664 {} \;

chmod g+s /path/to/ez

setfacl -Rm u:www-data:rwx /path/to/ez
setfacl -Rm d:u:www-data:rwx /path/to/ez
setfacl -Rm u:yourUser:rwx /path/to/ez
setfacl -Rm d:u:yourUser:rwx /path/to/ez

Then you can access the virtual machine's eZ Publish installation by typing the IP address in your browser, or by adding a host name in your local hosts file and modifying the virtual host configuration accordingly.