Cuando trabajamos con Laravel Homestead, la mayor parte del tiempo accedemos a los proyectos sólo mediante nuestra PC modificando el archivo de hosts y así cuando escribimos en el navegador la URL definida en dicho archivo (virtualhost), Nginx nos muestre nuestro proyecto desde la máquina virtual.
Sin embargo, en ocasiones, queremos mostrar nuestro proyecto a otras personas que forman parte del equipo, ya sean diseñadores, otros programadores, líderes de proyecto o incluso a los clientes que desean ver algunos avances. Por lo que en este tutorial veremos cómo podemos configurar Homestead para compartir el acceso de nuestros proyectos a quiénes se encuentren dentro de la misma red local (LAN).
Acceso mediante modificación del archivo Hosts de otra PC
Es la forma más básica y fácil si queremos que solo una o dos computadoras puedan acceder a nuestro proyecto en Homestead.
Si iniciamos Homestead y ejecutamos $ ifconfig
, nos aparecerán las siguientes interfaces de red:
Ninguna de estas interfaces son accesibles mediante LAN, por lo que hay que configurar vagrant para que inicie una interfaz abierta a nuestra LAN.
Primero, buscáremos el archivo homestead.rb
que se encuentra en la carpeta Homestead/scripts
. Si instalaste Homestead siguiendo la documentación de Laravel, esta carpeta debe estar en tu directorio Home
en OSX, Linux o en tu carpeta de Usuario de Windows. Si instalaste con composer el archivo está ubicado en .composer/vendor/laravel/homestead/scripts/homestead.rb
Tendremos dos formas de configurar el acceso desde LAN, dependiendo del archivo homestead.rb. Entonces al abrirlo, buscáremos la configuración de red.
En la primera forma puede estar de la siguiente manera:
# Configure A Private Network IP config.vm.network :private_network, ip: settings["ip"] ||= "192.168.10.10" # Configure Additional Networks if settings.has_key?("networks") settings["networks"].each do |network| config.vm.network network["type"], ip: network["ip"], bridge: network["bridge"] ||= nil end end
Ésta es la configuración usual de Homestead para acceder e ingresar mediante SSH. Lo que haremos será agregar una nueva interfaz en modo puente para que la máquina virtual pueda acceder a nuestra LAN.
Si tu archivo si contiene # Configure Additional Networks
, no hay que modificar nada en ese archivo. En vez de ello, hay que modificar el archivo Homestead.yaml
. Puedes ejecutar $homestead edit
o abrir el archivo directamente de ./homestead/Homestead.yaml
, que se encuentra en tu carpeta de Usuario o Home.
--- ip: "192.168.10.10" memory: 2048 cpus: 1 provider: virtualbox authorize: ~/.ssh/id_rsa.pub keys: - ~/.ssh/id_rsa folders: - map: ~/Code to: /home/vagrant/Code sites: - map: superproyecto.app to: /home/vagrant/Code/superproyecto/public databases: - homestead variables: - key: APP_ENV value: local #Acceso a LAN networks: - type: "public_network" ip: "192.168.1.200" # blackfire: # - id: foo # token: bar # client-id: foo # client-token: bar # ports: # - send: 93000 # to: 9300 # - send: 7777 # to: 777 # protocol: udp
Agregamos la sección que dice #Acceso a LAN
para que cuando ejecutemos homestead up
configure una nueva interfaz con la IP asignada.
Por otro lado, la segunda forma, si tu archivo homestead.rb
no contiene la línea # Configure Additional Networks
, hay que agregar manualmente la interfaz de la siguiente manera:
# Configure A Private Network IP config.vm.network :private_network, ip: settings["ip"] ||= "192.168.10.10" config.vm.network :public_network, :adapter=>3, ip: "192.168.1.200"
Así, al cargar la máquina virtual se inicie la interfaz número 3 con nuestra IP. En este ejemplo, la IP de nuestra interfaz es 192.168.1.200
; debe ser una IP estática para que cuando modifiquemos los archivos de Host, no cambie la IP y tengamos que volver a modificar el archivo, por lo que hay que configurar nuestro DHCP para que nos de una IP estática.
Realizamos homestead provision
y volvemos a ejecutar $ ifconfig
. El resultado debe ser el siguiente:
Copiaremos la dirección MAC de la interfaz para configurar nuestro router.
En mi caso, me pide el nombre para identificar la IP estática, la MAC de la interfaz y la IP que quiero que tenga. La configuración varía dependiendo del router y firmware.
Una vez listo, modificaremos el archivo host de otro dispositivo, ya sea Linux, OSX o Windows y agregaremos la siguiente entrada:
Finalmente, accedemos a la URL de nuestro proyecto.
Como se puede ver, nuestro sitio es accesible desde otro dispositivo, en este caso, OSX. Mientras que la máquina virtual de Homestead está siendo ejecutada sobre Windows.
Acceso mediante un servidor DNS
Otra forma de poder acceder a nuestros sitios en Homestead es configurándolo para que trabaje como un servidor DNS, en este caso, podemos crear una máquina virtual con Ubuntu 14.04 descargando el ISO y utilizando virtuabox, o podemos usar un box de vagrant. La elección es tuya.
Iniciamos nuestra máquina y procedemos a actualizar los paquetes instalados.
$ sudo apt-get update $ sudo apt-get upgrade
Utilizaremos BIND (Berkley Internet Naming Daemon) para que funcione en nuestra VM como servidor DNS.
$ sudo apt-get install bind9 $ sudo apt-get install dnsutils
Una vez instalados, iremos a /etc/bind
y editaremos:
sudo nano named.conf.local
Agregaremos la información de los dominios para el servidor:
// // Do any local configuration here // // Consider adding the 1918 zones here, if they are not used in your // organization //include "/etc/bind/zones.rfc1918"; //Dominio forward zone "superproyecto.app" { type master; file "/etc/bind/db.superproyecto"; }; //Dominio reverse zone "1.168.192.in-addr.arpa" { type master; file "/etc/bind/db.192"; };
La primer «zone» define nuestro dominio de búsqueda para cuando ingresemos la URL de nuestro proyecto. La segunda es para cuando realicemos una búsqueda inversa.
Guardamos el archivo y ahora copiaremos el archivo db.local
:
cp db.local db.superproyecto
Abriremos db.superproyecto
e ingresaremos la información de donde se localiza este dominio.
; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA superproyecto.app. root.superproyecto.app. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS superproyecto.app. @ IN A 192.168.1.200
En vez de localhost
, lo reemplazaremos con nuestra URL, en este caso superproyecto.app
. En el registro NS
pondremos nuevamente la URL y en el registro A
la IP de nuestra máquina Homestead.
Ahora modificaremos el archivo resolv
:
sudo nano /etc/resolv.conf
De forma que quede una sola línea con la IP de nuestro servidor.
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 192.168.1.201
Para realizar la búsqueda inversa, copiaremos el archivo db.127
para actualizarlo con la información inversa:
cp db.127 db.192
El resultado será el siguiente:
; ; BIND reverse data file for local loopback interface ; $TTL 604800 @ IN SOA superproyecto.app. root.superproyecto.app. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS superproyecto.app. 1.0.0 IN PTR superproyecto.app.
Una vez terminado, tenemos que reiniciar el servidor DNS. Por lo que ejecutamos:
sudo service bind9 restart
Ahora, solo tenemos que modificar en nuestros dispositivos o en nuestro router la IP del servidor DNS que resolverá las URLs que ingresemos.
En windows:
En OSX:
Antes de acceder a nuestro sitio, tenemos que borrar el caché DNS de nuestra PC. En Windows podemos ejecutar ipconfig /flushdns
, en caso de no funcionar, podemos reiniciar nuestra interfaz de red.
Existen otros métodos como http://xip.io/ o https://ngrok.com/ pero estos están más enfocados a acceso desde fuera de la LAN (internet) a Homestead. También es posible utilizar vagrant share
para compartir nuestros sitios web.
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.
Lección anterior Como hacer "debug" usando Xdebug, PhpStorm y Homestead