tecnología

PuPHPet: como construir fácilmente una máquina virtual usando Vagrant y Puppet

Introducción
Seamos honestos ¿cuántos de nosotros hemos perdido horas de sueño tratando de crear un ambiente de desarrollo para crear aplicaciones web usando PHP? Creo ver muchos asintiendo con su cabeza. Con PuPHPet (y algunas otras cosillas más) esas horas podrán ser reducidas a minutos.

Brevísimo panorama de Vagrant
Vagrant es una herramienta para construir ambientes de desarrollo. Provee una manera fácil de configurar, reproducir y transportar el ambiente de desarrollo que necesites. Esta herramienta, open source, es producto de la colaboración de cientos de personas que aportan a que cada versión sea más robusta y estable. Vagrant está construido usando el lenguaje de Ruby, pero no necesitas saber de Ruby para aprovecharte de sus funcionalidades. Uno de los beneficios principales de Vagrant es que te quita el peso de encima de tener que construir manualmente, una y otra vez, tu ambiente de desarrollo.

Cómo podemos maximizar el uso de Vagrant.
Vagrant se alimenta de un archivo de configuración que contiene cada uno de los elementos que necesitas para desarrollar tu ambiente de trabajo. Ahora bien, sabemos lo complicado que es añadir otro paso a nuestro flujo de trabajo. Pero para eso existe Puppet. Esta  herramienta realiza toda la magia de la instalación de Apache, MySQL, PHP y otros paquetes como Git. Normalmente, tenemos toda una larga lista de paquetes que necesitamos instalar para comenzar nuestros proyectos, pero Puppet gestiona estos automáticamente. Y es aquí donde entra en juego nuestro último aliado, PuPHPet. Por la necesidad de crear una forma fácil de crear este tipo de archivo de configuración es que nace PuPHPet. Esta herramienta es un GUI alojado en la web súper fácil de usar que te permite configurar los parámetros necesarios para crear una máquina virtual para el desarrollo de aplicaciones web. Esta VM la puedes tener alojada localmente en tu máquina o en la nube a través de los servicios de Digital Ocean, Rackspace o Amazon Web Services (AWS). Ahora que conoces de Vagrant, Puppet y PuPHPet es hora de juntar todas las piezas y colocarlas a jugar para nuestro beneficio.

Configurando todo
Actualmente voy a crear todo el ambiente de desarrollo sobre mi Windows 8 Pro, aunque no veo problemas en completar el tutorial usando otro sabor Windows.

El primer paso para aprovechar la magia de PuPHPet será instalar Virtual Box de Oracle. PuPHPet provee la opción de escoger una VM Local o alojada en algunos de los siguientes servicios de la nube tales como Digital Ocean, Rackspace y/o Amazon Web Services. Para propósitos de esta guía vamos a instalar la versión 4.3 de Virtual Box en nuestra máquina (local). La instalación de Virtual Box es bastante sencilla. Algunos next-next-next y listo.

Una vez completemos la instalación de Virtual Box pasamos a instalar Vagrant. Una vez completes la instalación de Vagrant te recomiendo que hagas un reboot a la maquina (host) para que la aplicación quede debidamente configurada.

A jugar con PuPHPet
PuPHPet para mí es como el menú de un restaurante. Tú escoges ciertos elementos del menú y luego los consumes. Esto es prácticamente lo que haremos en el GUI de PuPHPet. Recuerda que PuPHPet usa la tecnología de Puppet para proveer la automatización de las configuraciones que instalaremos en nuestra VM. Muchas de las opciones que usaremos serán las defualt de PuPHPet, pero después de que hayamos terminado, te animo a que juegues cambiando las opciones, añadiendo y eliminando opciones de configuración a ver qué encuentras. Estoy seguro de que quedarás impresionado.

La versión actual del GUI de PuPHPet se enfoca en 7 áreas de configuración:

  • Deploy Target
  • Server Basics
  • Webserver
  • PHP
  • Database
  • NoSQL Database
  • Search Server

Lo primero que vamos hacer es escoger el sabor de VM que vamos a utilizar. Para esta guía usaremos Ubuntu Precise 12.04 x64 – Virtualbox 4.3. Por el momento usaremos los valores por default.

PuPHPet Local VM Details

La opción de Local VM Forwarded Ports la vamos a eliminar.

local-vm-ports-02

Ahora, en la sección de Sharing Folders vamos a movernos a la opción de Box Sync Folder Source, ahí vamos a escribir el path de nuestro proyecto. Para esta tutorial será c:vagrantproyecto1. Aparte de esto todo se quedará igual.

local-vm-share-folders-03

Ahora vamos a verificar la sección de Server Basics. Aquí como estamos usando Ubuntu vamos a dar click en la opción de vim y vamos a escribir git para instalar el repositorio en nuestro ambiente. Si necesitas instalar algo como git, o algún parquete de subversión,  etc, entonces lo escribiremos aquí. Tal y como hicimos con git. Una cosa a recordar es que necesita saber el nombre del paquete y cómo se especifica para el sistema operativo seleccionado. Recuerda que en nuestro caso estamos usando Ubuntu.

server-packages-04

En la sección de Apache vamos hacer algunos cambios menores. En el Server name vamos a escribir proyecto1.dev y en la opción de Server Aliases vamos a escribir www.proyecto1.dev. Como estamos trabajando en Windows es muy importante que modifiques el archivo HOSTS para que puedas usar estos valores. De no hacer esto tendrás que accesar el website a través de la dirección IP. Este tutorial usa el default de PuPHPet que es 192.168.56.101.

server-packages-05

puphpet-host-file-10

Ahora concentrémonos un poco en la siguiente sección, PHP. Aquí de igual forma tienes la opción de configurar el servicio de PHP de mil maneras. Vamos a usar las siguientes opciones:

PHP Versión: 5.4
INI settings:

  • allow_url_fopen = 1
  • allow_url_include = 1
  • display_errors = On
  • error_log = syslog
  • error_reporting = -1
  • file_uploads = 1
  • apc.enabled = 1
  • session.save_path = /var/lib/php/session

PHP Timezone: America/Santiago
Realmente aquí escoges la zona que más cerca este respecto a donde vives.

PHP Modules:

  • cgi
  • cli
  • curl
  • intl
  • mcrypt
  • sqlite
  • tidy

Y lo demás lo dejamos tal y como esta.

En la sección de PHP Extension vamos activar el Xdebug y dejamos los valores por default.

xdebug-06

Ya estamos cerca de terminar. Ahora pasamos a configurar la base de datos. Para este proyecto usaremos MySQL. Vamos a dejar el mismo password. Habilitamos la opción de instalar PHPMyAdmin. En el DB Name vamos a escribir projecto1DB y para Username y Password usaremos vagrant en ambas opciones.

database-07

database-08

Por el momento tenemos justo lo necesario para configurar nuestro ambiente de desarrollo. Ahora vamos a proceder a crear el archivo de configuración (Manifest). Haz click debajo donde dice “Create your Manifest”. PuPHPet ahora procesará cada parámetro y nos creará un archivo con todo lo que necesitamos. Vamos a usar este file, puphpet.zip, para configurar Vagrant.

Volviendo a Vagrant
Consejo, Vagrant baja directamente las VM desde la Internet. Si deseas seguir experimentando con Vagrant te recomiendo bajar el archivo .box de la VM a tu host para no tener que bajarlo del Internet cada vez que queramos crear nuevamente el ambiente. Para esto tendrás que modificar el archivo config.yaml. Por el momento esto no será necesario.

Ahora vamos a crear la carpeta en donde residirá nuestro proyecto. La misma será c:\vagrant\proyecto1.

Si has instalado correctamente Vagrant y tienes los pre-requisitos listos, vamos abrir una sesión de la ventana de CMD en Windows. Y vamos a ejecutar la siguiente instrucción desde la carpeta de nuestro proyecto.

vagrant up

vagrant-up-09

Si todo sale bien debes empezar a ver un texto parecido al siguiente:

Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'ubuntu-precise12042-x64-vbox43'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Running 'pre-boot' VM customizations...
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
DL is deprecated, please use Fiddle
[default] Machine booted and ready!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant
[default] -- /var/www
[default] -- /tmp/vagrant-puppet-1/manifests
[default] Running provisioner: shell...
[default] Running: C:/Users/Jaime/AppData/Local/Temp/vagrant-shell20140216-212-f
xhw0p
stdin: is not a tty

____        ____  _   _ ____      _      generated using
|  _ _   _|  _ | | | |  _ ___| |_   ___ ___  _ __ ___
| |_) | | | | |_) | |_| | |_) / _ __| / __/ _ | ‘_ ` _
|  __/| |_| |  __/|  _  |  __/  __/ |_ | (_| (_) | | | | | |
|_|    __,_|_|   |_| |_|_|   ___|__(_)______/|_| |_| |_|
Created directory /.puphpet-stuff
Running initial-setup apt-get update
Finished running initial-setup apt-get update
Installing basic curl packages (Ubuntu only)

Ahora, tomate un break porque Vagrant estará configurando la virtual con las opciones que escogiste para el archive de PuPHPet. Cuando este termine deberás ver una oración que diga lo siguiente:

Info: Creating state file /var/lib/puppet/state/state.yaml
Notice: Finished catalog run in 436.21 seconds

¡Listo! Podrás accesar tu nuevo ambiente de trabajo a través de la siguiente dirección en tu navegador: proyecto1.dev. Además puedes accesar PhpMyAdmin para verificar los parámetros de nuestro sistema de desarrollo.

phpmyadmin-puphpet-11

Ahora solo te queda seguir experimentando y creando el ambiente de desarrollo que mejor se adapte a tus necesidades.

  • Oscar Galindez

    Jaime que tal ? todo muy bueno . . . pero por un lado tengo instalado VM y vagrant, por otro tengo un zip de puphpet. Ya cree mi capeta en “C: …” y dices ejecutar vagrant up, esto no funciona, que debo hacer con el zip? creo mi carpeta en “C:” como esta en la configuracion pero algo debo hacer con el zip? donde lo descomprimo? que hago con la carpeta que se genera despues de descomprimir? a que nivel debo ejecutar el vagrant up? tengo todo y no tengo nada.

    • http://www.jaimeolmo.com Jaime Olmo

      Saludos Oscar. El contenido del archivo puphpet.zip lo debes colocar en el folder de tu proyecto. Recuerda que dentro del archivo puphpet.zip la aplicación web genera una carpeta dummy que usualmente tiene un nombre parecido a ‘V2GfiY’. El contenido de esa carpeta es tu proyecto y eso es lo que copiaras. En el ejemplo del tutorial esta localidad es c:vagrantproyecto1. Espero poder haberte ayudado.

      • Oscar Galindez

        Muchas Gracias Jaime, haré la prueba el Lunes y te comento!

      • Oscar Galindez

        Muchas gracias Jaime de verdad que me fue de gran ayuda ! Funcionó.