Vagrant Magento: Instalar y configurar Vagrant
17

nov

 

Vagrant Magento: Instalar y configurar Vagrant

Vagrant Magento: Configurar e instalar entornos de desarrollo virtuales

A la hora de desarrollar un proyecto ecommerce (y web en general), lo recomendable es contar con varios entornos de trabajo. Esto es así debido a que los nuevos desarrollos y funcionalidades una vez desarrolladas deben ser testadas por parte del departamento técnico para posteriormente ser verificadas por parte del cliente. Una vez obtenemos el visto bueno del cliente el nuevo desarrollo puede pasar al entorno de producción. Por lo tanto podemos distinguir tres entornos de desarrollo distintos

Entorno de desarrollo local: Representa el equipo de trabajo del técnico encargado de realizar los desarrollos para la tienda online del cliente.

Entorno de preproducción: Donde se comparten todos los nuevos desarrollos para ser testados y verificados por el cliente.

Entorno de producción: Donde se aloja la tienda online en Magento accesible para los clientes finales

Para el caso de Magento, los entornos de preproducción y producción están constituidos por servidores basados en linux. Pero el entorno de desarrollo local es distinto según el programador. Cada uno de los desarrolladores que participan en un proyecto puede contar con un equipo totalmente distinto a sus compañeros. Hay desarrolladores trabajando en OSX, en windows o en cualquiera de las distintas distribuciones de linux. En esta nueva entrada del blog hablaremos de Vagrant. Vagrant es una herramienta gratuita que nos permitirá unificar los entornos de desarrollo locales de nuestro equipo de programación independientemente del sistema operativo con el que trabaje el departamento técnico.

 

Vagrant: Ventajas de emplear Vagrant como entorno de desarrollo.

Como hemos comentado cada desarrollador puede trabajar bajo un distinto sistema operativo. Es mas, aunque trabajaran bajo un mismo entorno, lo ideal es que trabajaran para un proyecto en concreto bajo una replica de la maquina de desarrollo y preproducción en lo que se refiere a configuración del servidor. Vagrant nos va a permitir que nuestro entorno de desarrollo local pueda ser una replica exacta de la configuración del servidor de preproducción y producción. Como se observa las ventajas de trabajar con Vagrant son las siguientes:

  • Vagrant permite unificar la configuración de todos los entornos de trabajo: local, preproducción y producción.
  • Vagrant nos permite configurar directorios compartidos entre la máquina local y el entorno virtual. Si cualquier cambio relaizado en el directorio local de nuestro equipo se verá reflejado en la máquina virtual.
  • Vagrant nos servirá para poder realizar y testar modificaciones y optimizaciones en la configuración de nuestro servidor de desarrollo con la tranquilidad de poder realizar estas modificaciones previamente en nuestros entornos locales y de preproducción disminuyendo los tiempos finales de desarrollo en la máquina de producción. De esta forma logramos testar el correcto comportamiento de nuestra tienda con la nueva configuración.
  • Vagrant permite trabajar con múltiples lenguajes de programación, servidores, bases de datos, etc. Permitiendo desarrollar múltiples tipologías de proyectos web.
  • Vagrant dispone de multitud de cajas o boxes que emularán el servidor de producción. Cada uno de nuestros proyectos puede cargar la caja necesaria y tener su propia configuración permitiéndonos una adaptación total a cada uno de nuestros proyectos.

 

Vagrant: Instalación y configuración de Vagrant como entorno de desarrollo local

Para instalar y configurar Vagrant como entorno de desarrollo local los pasos que debemos seguir son:

  • Descarga e instalación de Vagrant: Vagrant
  • Descarga e instalación de Virtual box: Virtual Box

Una vez tenemos instalados Vagrant y Virtual Box empezamos los pasos a seguir son:

Creación de  Vagrantfile

Para crear el fichero vagrantfile nos situamos en el directorio de desarrollo y ejecutamos el comando Vagrant init. Esto creará el fichero vagrantfile en el directorio. En nuestro caso añadimos hashicorp/precise32 que es el box que queremos emplear como entorno de desarrollo virtual

$ mkdir demomagento
$ cd demomagento
$ vagrant init hashicorp/precise32

A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation o
`vagrantup.com` for more information on using Vagrant.

Para levantar el entorno virtual con vagrant ejecutamos el comando:

$ vagrant up

Si quisiéramos apagar la máquina virtual con vagrant ejecutaríamos el comando:

$ vagrant halt

Para acceder via ssh  con vagrant a nuestra máquina virtual ejecutamos el comando

$ vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)

 * Documentation: https://help.ubuntu.com/
New release '14.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Welcome to your Vagrant-built virtual machine.
Last login: Fri Sep 14 06:22:31 2012 from 10.0.2.2
vagrant@precise32:~$

Como se puede observar ya estamos dentro de nuestra máquina virtual. ¡Así de sencillo!

Seleccionando nuestra caja

Con el comando vagrant init hashicorp/precise32 hemos asignado la caja hashicorp/precise32 a nuestro vagrantfile.  No obstante podemos elegir entre multitud de cajas para nuestro proyecto. una caja o box no es mas que la imagen que se toma como referencia para la creación de la máquina virtual que queremos emplear.

# Every Vagrant virtual environment requires a box to build off of.
config.vm.box = "hashicorp/precise32"

Aqui encontrarás multitud de cajas entre las que elegir y poder así reproducir multitud de entornos con distintas configuraciones. Para nuestro ejemplo optaremos por la caja chef/centos-6.5  basada en CentOS 6.5 x64. Para añadir la caja ejecutamos el siguiente comando

vagrant box add chef/centos-6.5

Tras ejecutar el comando, seleccionamos como proveedor al opción de virtualbox. Tras esto la caja se descargará y será almacenada por vagrant para poder ser reutilizada.

$ vagrant box add chef/centos-6.5
==> box: Loading metadata for box 'chef/centos-6.5'
    box: URL: https://vagrantcloud.com/chef/centos-6.5
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) virtualbox
2) vmware_desktop

Enter your choice: 1
==> box: Adding box 'chef/centos-6.5' (v1.0.0) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/chef/boxes/centos-6.5/versions/1/providers/virtualbox.box
==> box: Successfully added box 'chef/centos-6.5' (v1.0.0) for 'virtualbox'!

Si quisiéramos emplear esta nueva caja descargada tan solo deberíamos editar el fichero vagrant file y actualizar la linea de config.vm box a:

# Every Vagrant virtual environment requires a box to build off of.
config.vm.box = "chef/centos-6.5"

Para ver el listado de todas nuestros boxes con vagrant basta con ejecutar el comando vagrant box list:

$ vagrant box list
chef/centos-6.5        (virtualbox, 1.0.0)
hashicorp/precise32    (virtualbox, 1.0.0)
lucid32                (virtualbox, 0)
puphpet/debian75-x32   (virtualbox, 1.2)
puphpet/ubuntu1204-x64 (virtualbox, 1.2)
ubuntu/trusty64        (virtualbox, 14.04)

 

Cargando nuestra aplicación web local en la máquina virtual con vagrant

En nuestro caso optamos por  emplear el box inicial para llevar a cabo nuestra prueba. Desde el fichero vagrantfile asignaremos a la máquina virtual una dirección ip . Para ello descomentamos y editamos las siguientes lineas con estos valores:

La asignación de la ip puede ser una ip pública o privada. para nuestro ejemplo optamos por asignar una ip privada

#Create a private network, which allows host-only access to the machine
#using a specific IP.
config.vm.network "private_network", ip: "192.168.33.10"

Ahora podemos editar nuestro fichero host y asignarle por ejemplo el dominio www.demovagrant.dev a la ip 192.168.33.10. De esta forma cada vez que carguemos www.demovagrant.dev estaremos accediendo a la máquina virtual. Para que estos cambios tengan efecto debemos ejecutar el comando vagrant reload si nuestra máuina virtual ya estaba levantada o volverla a levantar con le comando vagrant up si no lo estaba. Si tras editar nuestro host introducimos la URL www.demovagrant.dev nos encontraremos con este pantallazo:

instalar configurar Vagrant  magento

No nos asustemos por ello, estamos en el buen camino. Hemos conectado con el puerto 80 de nuestra máquina virtual. Pero en ella no tenemos absolutamente nada, así que obciamente no podemos cargar nada. Procedamos a instalar Apache en nuestra máquina virtual.

Accedemos a nuestra máquina virtual:

vagrant ssh

Actualizamos los paquetes:

sudo apt-get update

Instalamos apache

sudo apt-get install apache2

Tras la instalación, si ahora cargamos nuevamente www.demovagrant.dev en nuestro navegador el resultado es:

instalar configurar usar vagrant magento

Como podéis observar la URL devuelve el index.html de nuestra máquina virtual. Podemos configurar la maquina virtual con Nginx, varnish, memcache etc y acceder a ella desde nuestro equipo local sin problemas. Pero además podemos instalar nuestro Magento en el equipo local para que sea cargado por la máquina virtual. Desde el fichero vagrantfile tenemos la opción de comunicar carpetas entre la máquina local y la virtual con la opción config.vm.synced_folder.

# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"

Por defecto, el directorio /vagrant dentro de la máquina virtual, posee el mismo Vagrantfile que se encuentra en nuestro equipo local. Cualquier cambio que realicemos en este directorio será compartido entre las dos máquinas. Como veis la flexibilidad de vagrant es realmente asombrosa. Otra de las funcionalidades destacadas es la posibilidad de compartir el acceso, aqui encontrareis mas información sobre el tema.

En nuestro caso nos interesa trabajar con Magento en nuestro equipo local que es donde tenemos instalado todas nuestras herramientas de desarrollo. Sabiendo que el directorio que comparte el vagrantfile es compartido por nuestro entorno local y la máquina virtual, podemos hacer que Apache lea de nuestro directorio de trabajo local fácilmente mediante un simple link:

$ ln -fs /vagrant /var/www

Recordemos que vagrant tambien dispone e la herrmaienta para sincronizar carpetas, por lo tanto también podrimaos logran este objetivo editando el vagrantfile

config.vm.synced_folder "./", "/var/www", create: true, group: "www-data", owner: "www-data"

Los parámetros del comando son:

  • Parámetro 1: Directorio de nuestro entorno local a compartir. En nuestro caso “./” -el directorio que contiene el vagrant file-.
  • Parámetro 2: Directorio del entorno virtualizado a compartir. En nuestro caso “/var/www”.
  • Parámetro 3: Con create: true, si el directorio de la máuina virtual no existe se creará.
  • Parámetro 4: group: “www-data” es el grupo al que pertenece el directoio compartido en la máquina virtual.
  • Parámetro 5: owner: “www-data” Igual que el parámetro cuatro pero en este caso para el usuario.

Si ahora introducimos un index.html con el contenido “Entornos de desarrollos virtualizados con Vagrant” en nuestro directorio de trabajo:

instalar configurar usar vagrant magento

y recargamos nuevamente la URL de nuestra máquina virtual:

instalar configurar usar vagrant magento

Podemos observar como apache está leyendo de nuestro directorio de trabajo. Perfecto, tras instalar Mysql y Magento ya estaríamos trabajando en nuestro entorno local sin problemas.

Hasta ahora, estos pasos los estamos haciendo de una forma manual, pero sería muy útil contar también mecanismos de automatización que ejecutaran ciertas tareas, para ello contamos con las provisiones de Vagrant (Mas info sobre Vagrant aquí). Las provisiones se ejecutan en el primer vagrant up que crea el entorno virtual. No obstante, podemos forzar su ejecución con el siguiente comando:

$ vagrant reload --provision

Para el ejemplo que nos ocupa vamos a instalar phph haciendo uso de shell provisioner. Para ello añadimos la siguiente linea a nuestro vagrant file

config.vm.provision :shell, :path => "provision/ejemplo.sh"

Cuando se ejecute la provisión ejecutara las lineas de ejemplo.sh en las que básicamente actualizamos e instalamos php y algunas extensiones:

instalar configurar vagrant provision

Vagrant: Creación de entornos virtuales con Puphpet

Como hemos visto vagrant es una herramienta muy potente que nos permite emplear entornos de desarrollos virtualizados a partir de máquinas virtuales. El hecho de poder compartir directorio entre ambas máquinas nos ayuda a desarrollar nuestro proyecto ecommerce en local y cargarlo en nuestra máquina virtual. Vagrant es una herramienta muy útil ya que nos permite particularizar nuestra máquina virtual tal y como queramos. No obstante hay herramientas como Puphpet que nos ahorrarán tiempo para la configuración de nuestra máquina virtual. por ejemplo, en le caso anterior hemos partido de una máquina virtual por defecto a la que le podemos añadir todo lo que necesitemos para clonar nuestro entorno de producción. Esta parte es de gran interés pues nos permite practicar a nivel de configuración de servidores sin embargo también seria muy útil contar con gran parte de la configuración base de nuestro entorno configurada y adaptada a nuestras necesidades. Con Puphpet conseguimos este objetivo. En el siguiente video vemos como cargar una instalación de Magento mediante Puphpet y Vagrant

Vagrant: Conclusiones configuración de Vagrant como entorno de desarrollo local.

Vagrant es una excelente herramienta para la creación de entornos de desarrollos virtuales, especialmente útil para probar el correcto funcionamiento de nuestros desarrollos locales en una configuración del servidor exactamente idéntica al servidor de producción final. Instalar y configurar Vagrant para nuestros desarrollos en Magento nos ayudará a prevenir futuros problemas de compatibilidades o funcionamientos finales no deseados. Además, Vagrant es una excelente opción para potenciar nuestros conocimientos en la configuración del servidor que alojará nuestra tienda online, brindándonos un entorno local de pruebas fácilmente configurable. Desde especialista en Magento os animo a que optéis por esta fantástica herramienta de trabajo para vuestros desarrollos locales

Resumen
Nombre
Vagrant Magento: Instalación y configuración de entornos de desarrollos virtuales
Autor
Descripción
Vagrant Magento: Instalación y configuración Vagrant. Tutorial usar Vagrant para entorno de desarrollo Magento. Vagrant: Entornos de desarrollo virtuales.
The following two tabs change content below.
Especialista en Magento y servicios ecommerce: Consultoría ecommerce, Optimización Magento, Desarrollo Magento, Integración Magento ERP y Posicionamiento SEO Magento.


2 Comments

Leave a reply Cancel reply
 

Tu email no será publicado. Campos obligatorios . *