Laravel致力于完善整个PHP开发过程,使得本地开发环境的搭建和分发更加简单.Vagrant提供了一种简单并且优雅的方式来管理和配置虚拟机.
Laravel Homestead 是一个官方的Vagrant “box” 安装包,它提供了一个完美的开发环境,它不需要在你的本地机器安装PHP, HHVM, web服务器, 和其他任何服务软件.有了它,你再也不用担心搞乱自己的操作系统了! Vagrant boxes完全是一次性了,如果环境出了问题,你可以在几分钟之内重新构建开发环境.
Homestead可以运行在Windows,Mac和Linux系统上,它需要 Vagrant1.7.* 及以上的版本.
Homestead包含了以下的软件:
可以参考: VirtualBox 和 Vagrant的安装
原本安装Homestead Vagrant Box只需要使用简单的几行命令就可以完成,但是因为”长城”的存在,使得安装会很艰难. 下面我提供我的解决方法:
如果你的Vagrant版本小于1.7.*,运行命令:
vagrant box add laravel/homestead https://atlas.hashicorp.com/laravel/boxes/homestead
Vagrant版本在1.7及以上的可以运行命令:vagrant box add laravel/homestead
执行完第一步你就会进入Homestead Vagrant Box的下载阶段,但是这个Box很大,有一个多G吧.就像上面说的,在国内没有的情况下,根本不可能通过这个方式正常的把Box下载下来.这个时候请按下按键:Ctrl+C
.这时候你会看到一个类似https://atlas.hashicorp.com/laravel/boxes/homestead/versions/0.4.3/providers/virtualbox.box的下载链接,推荐使用迅雷,将其下载下来;
添加Box到Vagrant Box:
vagrant box add --name laravel/homestead path/to/boxname.box
添加成功提示:
==> box: Successfully added box 'laravel/homestead' (v0) for 'virtualbox'!
检查box列表: vagrant box list
后应该可以看到有一个box是laravel/homestead
,说明box add 成功了.
git clone https://github.com/laravel/homestead.git Homestead
bash init.sh
来创建Homestead的配置文件Homestead.yaml
,默认这个文件会被创建在~/.homestead
目录下.ssh-keygen -t rsa -C "[email protected]"
~/.homestead/Homestead.yaml
配置文件里的folders
属性列出了所有你想共享给虚拟机的文件夹,map
和to
分别对应的文件夹是同步的,你可以根据需哟配置更多的共享文件夹,map
对应的是本机,to
对应的是虚拟机里的文件夹,如果要支持 NFS,可以加一行type:"nfs"
在to
那一行的后面:
folders:
- map: ~/Code
to: /home/vagrant/Code
设置Nginx配置:
~/.homestead/Homestead.yaml
文件里应该已经有一个配置了,可以做为样例来参考.
sites:
- map: homestead.app
alias: square.app
to: /home/vagrant/Code/Laravel/public
意思是,如果有访问homestead.app
这个域名的请求,虚拟机会直接将请求接引到/home/vagrant/Code/Laravel/public
目录,而这个目录实际上和本地环境有映射,被映射到了~/Code/Laravel/public
. 默认是php-fpm
来解析PHP,如果你喜欢,也可以选择用HHVM来解析,例如:
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
hhvm: true
默认情况下,本地HTTP的8000端口被映射到了虚拟机的80端口,HTTPS的44300端口被映射到了虚拟机的443端口.
配置Hosts
为了方便本地开发和测试,我们一般会修改我们的hosts文件,让相应的域名不出去,直接在本机上被解析指向指定的IP,如果这个被制定的IP是虚拟机的IP地址,那就实现了,浏览器访问homestead.app
这个网站,实际上访问的是虚拟机上的该网站,这个结果正是我们需要的. 这么修改:
获取虚拟机的ip:~/.homestead/Homestead.yaml
,查看ip选项并修改:
~/.homestead/Homestead.yaml
里的IP是否是hosts里的IP.如果以上都没有问题,虚拟机用vagrant启动起来后,此时应该可以访问这个你刚添加的网站了:http://homestead.app经过以上步骤,就基本上完成了配置文件的修改了.
进入Homestead目录下,执行命令:vagrant up
,就可以正常启动了.
注
:在启动的过程中,Vagrant可能不会发现 laravel/homestead
这个Box虚拟机,这是因为版本的问题,解决办法如下:
vim scripts/homestead.rb
config.vm.box_version = settings["version"] ||= ">= 0.4.0"
为 config.vm.box_version = settings["version"] ||= ">= 0"
vagrant up
就能发现laravel/homestead
这个Box了访问:http://homestead.app/,如果能看到No input file specified.
就说明说有配置都OK了.
进入虚拟机:ssh [email protected] -p 2222
链接数据库:mysql -h127.0.0.1 -P33060 -uhomestead -p
,提示数据密码:secret
即可
composer require laravel/homestead --dev
所有环境配置好后,可以运行命令生成一些配置文件,将这些配置文件分发给其他的开发者,那么你们的开发环境就是一模一样的了.
如果你的Homestead
已经安装和部署了,可以在项目目录下,用make
命令来生成:Vagrantfile
和Homestead.yaml
,生成文件一般在你项目根目录.make
命令会自动将sites
和folders
配置指令导入Homestead.yaml
:
Mac or Linux:
php vendor/bin/homestead make
Windows:
vendor\bin\homestead make