Laravel致力于将整个PHP开发体验变得让人愉悦,包括本地开发环境。
Vagrant提供了一个便捷的方式来管理和设置虚拟机。Laravel Homestead是一个官方的、预安装好的Vagrant盒子,该盒子提供了一流的开发环境,有了它,我们不再需要在本地环境安装PHP、HHVM、web服务器以及其它服务器软件,我们也完全不用再担心误操作搞乱操作系统——因为Vagrant盒子是一次性的,如果出现错误,可以在数分钟内销毁并重新创建该Vagrant盒子!
Homestead可以运行在Windows、Mac以及Linux系统上,其中已经安装好了Nginx、PHP5.6、MySQL、Postgres、Redis、Memcached、Node以及很多其它开发牛逼Laravel应用所需要的东西。
注意:如果你使用的是Windows,需要开启系统的硬件虚拟化(VT-x),这通常可以通过BIOS来开启。
Homestead目前基于Vagrant 1.7进行构建和测试。
在启用Homestead环境之前,需要先安装Virtual Box或者VMWare和Vagrant,所有这些软件包都会常用操作系统提供了一个便于使用的可视化安装器。
VirtualBox/VMWare和Vagrant安装好了之后,在终端中使用能如下命令将laravel/homesterad
添加到vagrant安装中。这将会花费一些时间下载该盒子,时间长短主要取决于你的网络连接速度:
vagrant box add laravel/homestead
如果上述命令执行失败,可以使用vagrant老版本的方式,这需要输入完整的URL:
vagrant box add laravel/homestead https://atlas.hashicorp.com/laravel/boxes/homestead
你还可以通过简单克隆仓库代码来实现Homestead安装,考虑到克隆仓库到home目录下的Homestead
文件夹,Homestead盒子将会作为所有其他Laravel项目的主机:
git clone https://github.com/laravel/homestead.git Homestead
克隆完成后,在Homestead目录下运行 bash init.sh
命令来创建Homestead.yaml
配置文件,Homestead.yaml
配置文件文件位于 ~/.homestead
目录:
bash init.sh
如果你已经在使用PHP 5.x版的Homestead盒子,可以轻松升级安装到PHP 7.0。首先,克隆laravel/homestead
的php-7
分支到一个新的文件夹:
git clone -b php-7 https://github.com/laravel/homestead.git Homestead
不需要运行init.sh
脚本来覆盖整个Homestead.yaml
文件,你只需要简单添加该盒子到已存在的Homestead.yaml
文件顶部即可:
box: laravel/homestead-7
接下来,从包含克隆laravel/homestead
仓库的目录运行vagrant up
命令即可。
Homestead.yaml
文件中的provider
键表示哪个Vagrant提供者将会被使用:virtualbox
、vmware_fushion
,还是vmware_workstation
,你可以将其设置为自己喜欢的提供者:
provider: virtualbox
在Homestead.yaml
文件中还要配置公共SSH key的路径,如果没有SSH key,那么在Mac或Linux上,可以通过如下命令来生成:
ssh-keygen -t rsa -C "you@homestead"
在Windows上,可以安装Git然后使用Git自带的“Git Bash”来执行上述命令。除此之外,你还可以使用PUTTY和PUTTYgen工具来生成SSH key。
Homestead.yaml
文件中的folders选项
列出了所有你想要和Homestead环境进行共享的目录,一旦这些目录中的文件有了修改,将会在本地和Homestead环境中保持同步,如果有需要的话,你可以配置尽可能多的共享目录:
folders:
- map: ~/Code
to: /home/vagrant/Code
如果想要开启NFS,只需简单添加一个标识到同步文件夹配置:
folders:
- map: ~/Code
to: /home/vagrant/Code
type: "nfs"
对Nginx不熟?没问题,sites选项
允许你方便的匹配“域名”到Homestead环境的某个目录,一个示例站点配置已经包含到Homestead.yaml
文件。跟共享文件夹一样,你可以想配置多少个站点就配置多少个。Homestead可以为你的每个Laravel项目充当方便的、虚拟化的开发环境:
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
你可以通过设置hhvm
为true
让所有的Homestead站点使用HHVM:
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
hhvm: true
默认情况下,每个站点都可以通过HTTP(端口号:8000)和HTTPS(端口号:44300)进行访问。
不要忘记把Nginx站点中的域名添加到本地机器上的hosts
文件,该文件会将对本地域名的请求重定向到Homestead环境,在Mac或Linux上,该文件位于/etc/hosts
,在Windows上,位于C:\Windows\System32\drivers\etc\hosts
,添加方式如下:
192.168.10.10 homestead.app
确保IP地址和你的Homestead.yaml文件中列出的一致,一旦你将域名放置到hosts
文件,就可以在浏览器中通过该域名访问站点了!
http://homestead.app
编辑好Homestead.yaml
文件后,在Homestead目录下运行vagrant up
命令,vagrant将会启动虚拟机并自动配置共享文件夹以及Nginx站点。
销毁该机器,可以使用vagrant destroy --force
全局安装Homestead将会使每个项目共享同一个Homestead盒子,你还可以为每个项目单独安装Homestead,这样就会在该项目下创建Vagrantfile
,允许其他人在该项目中执行vagrant up
命令,在指定项目根目录下使用Composer执行安装命令如下:
composer require laravel/homestead --dev
这样就在项目中安装了Homestead。Homestead安装完成后,使用make
命令生成Vagrantfile
和Homestead.yaml
文件,make
命令将会自动配置Homestead.yaml
中的sites
和folders
属性。
Mac/Linux:
php vendor/bin/homestead make
Windows:
vendor\bin\homestead make
接下来,在终端中运行vagrant up
命令然后在浏览器中通过http://homestead.app
访问站点。不要忘记在/etc/hosts
(Linux)文件中添加域名homestead.app
。
你可以在Homestead目录下通过终端命令vagrant ssh
以SSH方式连接到虚拟机,但是如果你需要以更平滑的方式连接到Homestead,可以为主机添加一个别名来快速连接到Homestead盒子。创建完别名后,可以简单使用vm
命令来从任何地方以SSH方式连接到Homestead机器:
alias vm="ssh vagrant@127.0.0.1 -p 2222"
默认已经在homestead
中为MySQL和Postgres数据库做好了配置,更加方便的是,Laravel的local
数据库配置已经为使用数据库做好了设置。
想要通过本地的Navicat或Sequel Pro连接上MySQL或Postgres数据库,可以通过新建连接来实现,主机IP都是127.0.0.1
,对于MySQL而言,端口号是33060,对Postgres而言,端口号是54320,用户名/密码是homestead/secret
。
注意:只有从本地连接Homestead的数据库时才能使用这些非标准的端口,在Homestead环境中还是应该使用默认的3306和5432端口进行数据库连接配置。
Homestead环境在运行时,你可能想要添加额外Laravel应用到Nginx站点,你可以在单个Homestead环境中运行多个Laravel应用,添加站点很简单,只需将站点添加到Homestead.yaml
文件,然后在Homestead目录中运行vagrant provision
命令即可。
注意:该处理是不可逆的,运行
provision
命令时,已经存在的数据库会被销毁并重建。
默认情况下,Homestead端口转发配置如下:
如果你想要在Vagrant盒子添加更多端口转发,做如下转发协议设置即可:
ports:
- send: 93000
to: 9300
- send: 7777
to: 777
protocol: udp
SensioLabs的Blackfire Profiler能自动收集代码执行数据,比如内存、CPU时间、硬盘I/O等,Homestead使得在应用中使用该profiler变得轻而易举。
所有需要的软件包已经安装到Homestead盒子,你只需要在Homestead.yaml
文件中设置Blackfire Server ID和token:
blackfire:
- id: your-server-id
token: your-server-token
client-id: your-client-id
client-token: your-client-token
配置好Blackfire的凭证之后,在Homestead目录下使用vagrant provision
重新指配盒子。在此之前,确保你已经查看过Blackfire文档了解了如何为你的浏览器安装相应应的Blackfire扩展。
扩展阅读1:实例教程——在 Windows 上进行 Laravel Homestead 安装、配置及测试
扩展阅读2:实例教程——在Laravel Homestead中使用Blackfire Profiler对应用性能进行分析