Las siguientes instrucciones fueron probadas y funcionan para Ubuntu 14.10.
Recientemente inicié a trabajar en un sitio web que usará Laravel 5 y decidimos usar vagrant para hacer el proceso de creación y configuración de nuestros ambientes de trabajo locales algo más simples.
A continuación les dejo las herramientas que estaremos utilizando:
Laravel: su eslogan lo dice todo "The PHP Framework For Web Artisans" que se puede traducir mas o menos así: El marco de trabajo en PHP para los artesanos de la web. Laravel busca ser simple y robusto, pero orientado a objetos, utiliza composer para manejo de las dependencias lo que le permite reutilizar código de otros proyectos (en especial symfony).
Vagrant: es una herramienta que permite crear ambientes de trabajo simples de configurar, reproducibles y portátiles, que emplean tecnología estándar y que son controlados en un flujo de trabajo único y constante, para ayudar a maximizar la productividad y flexibilidad de su equipo de trabajo. Por ejemplo: al iniciar un proyecto, en lugar de hacer circular un documento con los pasos que todos los desarrolladores tienen que seguir para hacer que la aplicación funcione en su máquinas (ambiente local), les pasamos una máquina virtual ya configurada y lista para usar, la principal ventaja de esto, aparte de facilitar el trabajo, es que todo el mundo tiene la misma configuración y no importa cuantos nuevos miembros se unan al equipo, todos usaran las mismas herramientas. Cabe mencionar que incluso podemos jugar con las configuraciones del servidor creando máquinas virtuales adicionales
VirtualBox: es un programa (software) de virtualización, es decir que nos permite crear máquinas virtuales a las cuales les asignamos recursos del sistema físico (nuestro computador). Vagrant usará virtualbox como proveedor para ejecutar las máquinas virtuales.
Composer: es un manejador de dependencias para PHP.
Requerimientos
Debemos tener instalado todo lo que sigue, los pormenores de cada programa pueden ser encontrados en el sitio web respectivo, por lo que no entraremos en detalles:
- composer, de preferencia globalmente, ver detalles
- virtualbox 4.3.22, que se puede descargar desde aquí
- vagrant 1.7.2, que se puede descargar desde aquí
Crear un proyecto de pruebas:
Como mencioné antes, vamos a usar Laravel, por lo que ahora crearemos un proyecto nuevo, usaré composer para esto pero existe una alternativa:
cd ~/Projects composer create-project laravel/laravel my-project --prefer-dist
La salida del comando anterior debería ser algo como lo siguiente (texto acortado por brevedad):
Installing laravel/laravel (v5.0.1) - Installing laravel/laravel (v5.0.1) Downloading: 100% Created project in my-project Loading composer repositories with package information Installing dependencies (including require-dev) ... Writing lock file Generating autoload files Generating optimized class loader Compiling common classes Compiling views Application key [********MySuperSecretKey*********] set successfully.
Instalar y configurar laravel/homestead
Laravel Homestead es una "caja" oficial de Vagrant (Vagrant box), pre-empacada y lista para usar en tu ambiente local. No hay que preocuparse con dañar algo, pues si algo sale mal podemos ¡destruir y recrear el ambiente de desarrollo en minutos!
El siguiente comando descargará la caja laravel/homestead, esto puede tardar algún tiempo:
vagrant box add laravel/homestead
Instalamos homestead en nuestro sistema globalmente:
composer global require "laravel/homestead=~2.0"
Inicializamos los archivos de configuración de homestead:
homestead init
Editamos el contenido del archivo ~/.homestead/Homestead.yml
homestead edit
Para más detalles sobre las configuraciones pueden consultar aquí
Aquí dejo un ejemplo de mi configuración para my-project en el archivo ~/.homestead/Homestead.yml:
--- ip: "192.168.10.10" memory: 4096 cpus: 1 authorize: ~/.ssh/id_rsa.pub keys: - ~/.ssh/id_rsa folders: - map: ~/Projects/ to: /home/vagrant/Projects sites: - map: myproject.app to: /home/vagrant/Projects/myproject/public databases: - homestead variables: - key: APP_ENV value: local # blackfire: # - id: foo # token: barVale la pena mencionar que el archivo Homestead.yml es global así que al añadir nuevos proyectos, se debe modificar ya sea para agregar dichos proyectos o reemplazar los anteriores
Antes de poder acceder a nuestra máquina virtual tenemos que modificar el archivo hosts, para añadir una línea (192.168.10.10 myproject.app)y que nuestro sistema operativo sepa la forma de resolver el dominio myproject.app a una dirección ip, esto normalmente se haría en un servidor de nombres DNS, pero para nuestro ambiente local no hace falta.
sudo nano /etc/hosts
A continuación un ejemplo de mi archivo /etc/hosts:
127.0.0.1 localhost 127.0.0.1 myhost 192.168.10.10 myproject.app # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhostsAhora lo que resta es ir al directorio donde está instalado Homestead y ejecutar vagrant up:
cd ~/.composer/vendor/laravel/homestead/ vagrant up
Asumiendo que todo a salido bien, la máquina virtual con su aplicación debería estar funcionando y debemos poder acceder en nuestro navegador preferido a la dirección http://myproject.app, sino pueden revisar la sección de problemas conocidos
.
- He escuchado comentarios de las versiones de Vagrant (1.7.2) y VirtualBox (4.3.22) afectan en gran medida, por lo que es recomendable mantener ambos actualizados
- En Ubuntu, tuve el problema de que algunos módulos del kernel no cargan correctamente, la solución, editar el archivo /etc/modules y añadir los módulos siguientes uno por línea: vboxdrv, vboxnetadp y vboxnetflt, por ejemplo:
#virtual box module vboxdrv vboxnetadp vboxnetflt
Además para no tener que reiniciar cargamos los módulos mencionados:sudo service vbxdrv start sudo modprove vboxnetadp sudo modprobe vboxnetflt