Resolver problemas con Laravel Homestead (y no morir en el intento)
José Manuel Cerrejón González Colaboraciones 24/02/2017
Ármate de paciencia si quieres ejecutar Laravel Homestead en tu equipo y no deja de dar fallos por todos lados. Creo que me he encontrado con casi todos los problemas habidos y por haber a la hora de desplegar un servidor de desarrollo con este sistema.
Os pongo en situación: en mi iMac tengo dos sistemas macOS instalados: Yosemite y Sierra. Ahora creo que ha llegado el momento de dar el salto a este último definitivamente y olvidar el anterior, que es donde tenía todos los proyectos desplegados para desarrollar en local. Me voy a la página de Laravel para instalar Homestead y claro, me instala la última versión con PHP 7.1 entre otras aplicaciones actualizadas, que no es compatible con alguno de los proyectos que llevo, así que tendré que instalar una versión anterior. Aquí os cuento como batallé para instalar una versión anterior de Laravel Homestead.
Vamos a instalar la imagen que se ajuste a nuestras necesidades. Puedes ver el changelog en la web de atlas.hashicorp.com. En mi caso:
vagrant box add laravel/homestead --box-version 0.3.3
Puedes instalar Homestead como viene en la documentación, aunque sea la última versión:
git clone https://github.com/laravel/homestead.git ~/Homestead && cd $_
bash init.sh
Ahora añade al fichero .homestead/Homestead.yaml la linea version: x.x.x según la versión que hayas instalado:
ip: "192.168.10.10"
version: 0.3.3
memory: 2048
cpus: 1
provider: virtualbox
...
Ejecuta lo siguiente en el mismo directorio .homestead para hacerlo compatible en caso de que estés usando una de las últimas versiones de Laravel Homestead:
sed -i 's/\/var\/run\/php\/php7.1-fpm.sock/\/var\/run\/php5-fpm.sock/g' scripts/*.*
sed -i 's/php7.1/php5/g' scripts/*.*
Con estos pasos, no te resultará difícil ejecutar versiones anteriores de Laravel Homestead en tu sistema.
Consejos
-
Las imágenes se descargan al directorio ~/.vagrant.d/boxes/laravel-VAGRANTSLASH-homestead.
-
A veces en la carpeta ~/.homestead necesitas, aparte del fichero Vagrantfile, el directorio /scripts, antes de ejecutar vagrant up.
-
Puedes obtener la lista de imágenes disponible con el comando: vagrant box list.
-
vagrant global-status --prune para saber los contenedores que tenemos disponibles y su estado. –prune es opcional, pero te asegura que el listado esté actualizado.
-
Refrescar cambios si modificas el fichero Homestead.yaml: vagrant reload --provision
-
Si tienes tu código fuente en otra partición, crea un enlace simbólico en tu nueva partición de la siguiente manera y modifica el Homestead.yaml con la nueva ruta. Ejemplo: ln -s /Volumes/osx/Users/myUserYosemite/Documents/sc/www /Users/myUserSierra/Documents/sc
-
Revisa el fichero log del servidor web accediendo via SSH. Se encuentra en /var/log/nginx/error.log
Posibles errores y su solución
-
ERROR: This site can’t be reached. Probablemente no esté funcionando el servicio nginx. Accede via ssh al contenedor y ejecútalo.
-
Si el password de MySQL ha expirado. Entrar via SSH al contenedor y ejecutar mysql -u homestead -p --connect-expired-password. Una vez tengas el prompt de MySQL escribe: SET GLOBAL default_password_lifetime = 0;
-
php7.0-fpm: unrecognized service: comenta la primera línea y añade la segunda en el fichero de configuración de tu servidor web:
#fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_pass unix:/var/run/php5-fpm.sock;
- Prueba a ejecutar sudo service nginx restart. En caso de que no funcione, debes salir de la máquina y reiniciarla para volver a acceder a ella via SSH. Ejecuta service --status-all y asegúrate de que el servicio nginx esté activado.
-
502 Bad gateway: Tu servidor nginx no se ha iniciado. Mira el fichero error.log como te he mencionado y repasa también los ficheros en /etc/nginx/sites-enabled/
-
The guest additions on this VM do not match the installed version of default: VirtualBox! Tenemos dos métodos para actualizar las Guest Additions:
- Método 1: Ejecutamos en nuestro equipo huésped (Es decir, nuestro OSX/Linux) lo siguiente: sudo vagrant plugin install vagrant-vbguest. Al iniciar sesión, el sistema te detecta si está actualizado y en el caso contrario, te actualiza a la última versión.
- Método 2: Debemos instalar una nueva versión dentro del contenedor. Para ello montamos la iso y ejecutamos el asistente. Esta iso dependerá de la versión de Virtualbox que tengas instalada. Puedes encontrarlas todas en la web de descarga de Virtualbox. En mi caso:
homestead ssh
wget http://download.virtualbox.org/virtualbox/5.1.14/VBoxGuestAdditions_5.1.14.iso
sudo mkdir /media/VBoxGuestAdditions
sudo mount -o loop,ro VBoxGuestAdditions_5.1.14.iso /media/VBoxGuestAdditions
sudo apt-get install -y dkms build-essential linux-headers-$(uname -r)
sudo sh /media/VBoxGuestAdditions/VBoxLinuxAdditions.run uninstall
sudo sh /media/VBoxGuestAdditions/VBoxLinuxAdditions.run
sudo rm -rf /media/VBoxGuestAdditions
rm VBoxGuestAdditions_*.iso
exit
homestead halt
homestead up
Si ejecutas vagrant vbguest --status, obtendrás más información sobre el módulo cargado y verás que tendrás la última versión instalada. Si el mensaje sigue apareciendo, la solución que me ha funcionado a mí (hay muchos hilos abiertos en base a este problema) ha sido modificar las siguientes líneas con la versión actualizada en el fichero ~/.vagrant.d/boxes/laravel-VAGRANTSLASH-homestead/X.X.X/virtualbox/box.ovf donde X.X.X es la versión del contenedor:
<GuestProperty name="/VirtualBox/GuestAdd/Version" value="X.X.X" timestamp="1442480647519080000" flags=""/>
<GuestProperty name="/VirtualBox/GuestAdd/VersionExt" value="X.X.X" timestamp="1442480647519800000" flags=""/>
Haciendo vagrant reload el mensaje debería haber desaparecido.
Conclusión
Hasta aquí todos los errores que me he encontrado (si, cada uno de ellos). Espero que si has llegado hasta aquí, hayas podido solucionar los problemas con esta poderosa herramienta. Sinceramente a veces pienso que la tecnología nos atrasa más que solucionar nuestros problemas. Tal vez la próxima vez use un web service stack como XAMP, pero si eres un sufrido devop cabezota como yo, al final lograrás tu objetivo por muchos muros que se interpongan en tu camino, yo desde aquí tan solo puedo desearte suerte y si puedo ayudarte, nos leemos en los comentarios.
Enlaces de interés: laravel.io (forum) > Install Specific Laravel Homestead Version and 502 Bad Gateway nginx solved, medium.com > Upgrading Homestead to VirtualBox 5