【Homestead Master】系列是Laravel底层核心技术实战揭秘这一课程里的第一章,因为考虑到该章内容学员们可能要经常来回查阅,同时也为了提高课程更新速度,所以这一章以文字的形式发布在此。

有时候你需要将你正在开发的站点临时给你的同事或者客户看一下, 让他们提提意见或者协助debug,怎么办呢?

  1. 将网站临时部署到一个有外网的服务器上?如果手头没有这样的服务器还要9块9买一个?用完了再删掉站点?
  2. 直接拿电脑过去给对方看?台式机?千山万水?

都不妥,就是简单看一下而已嘛,不需要这么麻烦。 默认vagrant有个命令,就是vagrant share,可以为本地开发中的站点创建供外网访问的URL,先执行一下看看:

$ vagrant share
···
==> default: Checking authentication and authorization...
You must logged in to Vagrant Cloud in order to use `vagrant share`.
Please log in with `vagrant login`.

由于是第一次使用,末尾提示说要使用vagrant share必须得登陆vagrant cloud,也即是你需要创建一个vagrant cloud account,点击这个链接来创建新用户,有了用户以后就可以在本地命令行里执行vagrant login来登陆:

$ vagrant login
In a moment we will ask for your username and password to HashiCorp's
Atlas. After authenticating, we will store an access token locally on
disk. Your login details will be transmitted over a secure connection, and
are never stored on disk locally.

输入用户名密码以后会提示你登陆成功,它会在你本地保存一个access token,用来记录和验证你的登陆状态,就不用每次在vagrant share前都得vagrant login一次了。

vagrant share默认共享转发的是你虚拟机上的80端口,我们可以通过添加--http 8080的方式来指定它转发的端口。由于我们用的是homestead,homestead里虚拟机http访问端口开的8000,所以这个时候我们就可以执行vagrant share --http 8000来共享homestead里的开发站点:

$ vagrant share --http 8000
==> default: Detecting network information for machine...
    default: Local machine address: 127.0.0.1
    default:
    default: Note: With the local address (127.0.0.1), Vagrant Share can only
    default: share any ports you have forwarded. Assign an IP or address to your
    default: machine to expose all TCP ports. Consult the documentation
    default: for your provider ('virtualbox') for more information.
    default:
    default: Local HTTP port: 8000
    default: Local HTTPS port: disabled
    default: Port: 2222
    default: Port: 33060
    default: Port: 44300
    default: Port: 54320
    default: Port: 8000
==> default: Checking authentication and authorization...
==> default: Creating Vagrant Share session...
    default: Share will be at: kind-gazelle-9906
==> default: Your Vagrant Share is running! Name: kind-gazelle-9906
==> default: URL: //kind-gazelle-9906.vagrantshare.com
==> default:
==> default: You're sharing your Vagrant machine in "restricted" mode. This
==> default: means that only the ports listed above will be accessible by
==> default: other users (either via the web URL or using `vagrant connect`).

可以看到它给我们的此次分享分配了一个随机Name: kind-gazelle-9906,然后使用这个name来创建了一个二级域名:URL: //kind-gazelle-9906.vagrantshare.com,那么这个时候任何人访问这个URL就都可以看到你的开发站点了。

如果你想自定义一下这个name,可以再加上一个参数:vagrant share --http 8000 --name=pilishen,那么这样你的公网URL就是//pilishen.vagrantshare.com

对方看完了你的站点,想结束共享,直接命令行里ctrl + C终止掉即可。

需要注意的是,使用vagrant share有一个潜在问题,就是当你homestead虚拟机里配置了多个站点的时候,就会分享失效,因为你多个站点都是走的8000端口,vagrant share以后就不一定访问到哪个站点了。 一个解决办法就是,当你需要共享某个站点的时候,就注释掉yaml文件里的其他站点,因为毕竟暴露其他站点也没有意义,注释掉以后记得执行vagrant reload --provision来重新编译,然后再vagrant share. 当然了,如果你嫌这样还麻烦,其实还有可以指定共享站点的方法的,这个我们下一个帖子讲~