话说学习Laravel已有几个月了。是时候做个总结了。Laravel号称是优雅的编程。优雅没看到,坑到是不少。Laravel 已经发展到5.5了,官方tutorial才发布到5.2。导致学的人是一头雾水,因为从5.2到5.5 结构发生了很大的改变。所以学的人都是连蒙带猜,要么就是花钱去买网上的课程来看。不知道效果好不好,反正我是没买过。
好了,闲话少说,先来说说这第一个坑。就是Homestead的搭建。要学Laravel,首先要搭建一个开发环境,这是程序员们都知道的事。
当然,可以搭建的环境有很多。Windows,mac,linux都可以。有人在windows上用wamp,然后安装composer,laravel等等。也有人在mac和linux上搭建。作为个人开发没有任何问题。但是,假如多人合作开发,或者你老板要你把你开发的东西放到他的机器上跑一跑。那很有可能就会发生,在你的机器上很正常的程序,到了别人的机器上,就有各种各样奇怪的问题。这可能是环境设置的问题,也有可能是各个软件版本的问题。总之,如果遇到那种情况,可就有口难辨,难以解释了。
为了解决这个问题,laravel的开发者们提出了一个Homestead的概念。不管你的开发机器是windows,mac还是linux,只要你安装了Homestead,就能保证开发环境的一致。从此,那些奇奇怪怪的环境问题,版本问题,统统都不见了。剩下的就是愉快的开发了。AMAZING!
好了,那有人会问,说的这么好。Homestead到底是个什么东东。其实Homestead就是一个虚拟环境,需要两个软件,一个是vagrant,一个是虚拟机provider,可以是virtualbox,vmware或者parallels。虚拟机provider大家比较熟悉了,尤其是virtualbox,图形安装界面,一路next,不会有什么大的问题。唯一要注意的是版本问题,尽量不要安装最新的版本,安装5.0.*的版本。我也不知道为什么,反正,我装了最新的vagrant 2.0.1 和最新的virtualbox5.2.2, vagrant up就老是TimeOut。怎么搞都不成。最后卸载virtualbox5.2.2,安装virtualbox5.0.40. 就莫名其妙的好了。对此的唯一解释就是版本冲突。Virtualbox就是一个虚拟机,能够在你的机器上模拟出一个虚拟的计算机出来。你的主机可以是windows,mac或者linux。也可以虚拟出windows,mac和linux操作系统的计算机。Homestead使用的是ubuntu 64bit linux。有人可能会问,虚拟机我很熟了,安装一个virtualbox,再下载一个ubuntu的镜像iso文件,不就可以安装了吗?简单方便,要vagrant干嘛,听说还有版本冲突。你在虚拟机上安装的操作系统,都是裸机,说白了就是除了操作系统,其他统统没有。那么开发laravel毕竟还需要服务器,比如nginx,需要php,需要数据库,比如mysql。还需要一些环境变量,网络安装,和主机之间的共享文件夹等等。如果这些东西安装不一致,还是会在集成测试的时候造成一些问题。那么这时候就要隆重推出vagrant了。一言以蔽之,vagrant就是一个管理虚拟机的软件。你可以下载一个别人开发好的镜像文件,就可以得到一个安装了所有开发Laravel的需要的软件的虚拟机。你还可以通过一个vagrantfile文件来 控制虚拟机的启动,网络环境的配置,虚拟机和主机间的文件共享,启动后自动执行一些配置脚本等等。
好了,简单介绍完了vagrant之后,我们就正式步入安装Homestead的步骤。我的机器是win7 64位。
STEP1: 安装vagrant和virtualbox
安装vagrant,我安装的是vagrant_2.0.1_x86_64.msi。图形安装界面,简单,一路next。只是安装的过程有点长,几次我都以为安装程序死了而中断,重启机器等等。浪费不少时间,其实就是vagrant在安装的时候计算需要的空间还是什么的。反正时间比较长,需要一定的耐心。
紧接着就安装virtualbox,我安装的是VirtualBox-5.0.40-115130-Win.exe,据说不要安装5.2系列。否则会出现timeout之类的奇怪问题。
SETP2:导入box或者说是镜像文件
在导入box之前,最好先下载安装一个git bash的命令行工具。请百度自行搜索。安装好是这样一个icon,
,双击之后会出来这样一个界面,
,双击之后会出来这样一个界面,
Vagrant box add laravel/homestead
Add之前可以先看看有没有box
Vagrant box list
如果不想要当前的box,可以通过remove命令删除掉
Vagrant box remove boxname
国内的朋友可能因为网络原因,需要通过国内的镜像下载,这里不介绍了,请自行百度。
导入完毕之后,可以看看有没有导入好。
Vagrant box list

这样就OK了。
STEP3:下载homestead配置
Git clone https://github.com/laravel/homestead.git
Homestead
git 是命令名,clone是git 参数,https://github.com/laravel/homestead.git是url地址,Homestead是把这些资源下载到哪个文件夹。这里就是下载到当前目录下的Homestead文件夹内。有的网上文章Homestead前面有个波浪号,也是当前文件夹的意思。
紧接着我们进入Homestead这个文件夹,看看有什么。

我们看到有init.bat和init.sh两个文件,这两个文件是初始化Homestead的文件。如果是在win下,又安装了git bash,则运行bash
init.sh,init.bat均可。如果是在linux下,则运行bash init.sh。
其他文件,作为新手,咱就不要碰了,坏了咱也不会修。
STEP4: 配置Homestead.yaml
在Homestead目录下找Homestead.yaml文件。这个文件相当重要,设置IP,provider,配置和主机间的共享文件夹,配置Nginx站点等等都靠这个文件了。

逐行解释
Ip:“192.168.10.10“ 就是虚拟机的IP地址,主机通过putty连接虚拟机,在web浏览器地址栏访问虚拟机都是这个ip地址。
Memory:2048 分配给虚拟机的内存,这里是2G。这个内存主要看主机的内存有多大。建议不超过主机内存的一半。
Cpus:1 不用说了,虽然现在双核电脑不少,但是,开发的虚拟机一个cpu也够了。没有设过两个,不知道什么结果。
Provider: virtualbox 虚拟机的提供者,这里是virtualbox
Authorize:
Keys: 这两是 ssh key设置,关于ssh key设置网上也有很多文章,自己百度吧。就第一次需要设置,设置好了,以后哪怕你destroy vagrant box都不需要再设置了。
下面是重点,
Folders:设置主机和虚拟机的共享文件夹
Map: 主机的文件夹 建议用绝对地址,不要用相对地址,否则有可能mount不上
To:虚拟机的文件夹,也用绝对地址。
Sites: 站点配置
Map:主机web浏览器url地址栏输入的地址,这个站点名字需要在主机里设置。我怕麻烦,用IP地址也可以,不需要在主机文件里设置了。
To:虚拟机站点根目录,注意laravel项目是项目文件夹下的public是站点根目录。
Databases: laravel项目的数据库的名字。注意,homestead虚拟机装好了以后,mysql可能有多个数据库,要认清配置文件里是哪一个。
STEP5:启动vagrant
在Homestead目录下运行vagrant up命令,Vagrant 将会启动虚拟机并自动配置共享文件夹以及 Nginx 站点。然后你就可以通过putty连接虚拟机,通过composer创建laravel项目,或者在主机上编辑共享文件夹里的文件,系统会自动匹配到虚拟机上,或者在主机web浏览器里查看nginx站点,检查你的项目运行情况。听着是不是很激动?

这是理想的情况,然而实际情况可能会很糟糕。常见的问题有,没有ssh key,主机连接虚拟机timeout,mount shared
folders fails。 每个问题都可能会让你折腾很长时间。Ssh key的问题比较好解决。Timeout和mount shared folders fails就比较不幸了。除了重起,重装,基本没有更好的办法。当然,注意版本冲突,比如virtualbox选5.0.*,共享文件夹用绝对路径等等。但这些都是经验之谈,并没有理论根据。说白了就是碰运气。这些bug估计目前也没有什么更好的解决方案。
如果到了这里,你都没有什么问题的话,那么恭喜你,你的Homestead环境已经基本好了。那就让我们去看一看吧。
通过putty连接虚拟机,用户名和密码都是vagrant。

如果你能在/home/vagrant目录下看到一个绿色背景的文件夹,那么恭喜你,你的共享文件夹配置成功。

在你的主机web 浏览器的地址栏输入虚拟机的ip地址,如果你看到对应的项目目录下public文件夹里index.php或者index.html的显示内容,那么恭喜你,你的laravel项目框架已经搭好了,开始愉快的开发吧!刚搭好的laravel项目是一个简单的欢迎页面,我这个是开发过了的。
STEP6:安装Laravel
如果您能看到这,那么恭喜你,说明你的Homestead环境已经成功,让我们创建一个laravel项目吧。
通过putty连接虚拟机,
我们通过composer来安装一个5.2版本
composer create-project
laravel/laravel=5.2.* --prefer-dist
然后修改Homestead.yaml文件,修改完成后在git bash终端,输入命令
vagrant reload ――provision
Vagrant 会重启虚拟机,并将新的配置文件带入。
OK,在浏览器地址栏输入,http://192.168.10.10,出现了Laravel
5的欢迎界面,大功告成。
最后,如果你在安装过程中遇到任何问题,想要重装Homestead的话。一半virtualbox和vagrant不需要重装,除非遇到版本冲突。
先运行
Vagrant destroy –force
摧毁这个虚拟机
然后
Vagrant box remove boxname 移除
然后再add等等重新操作。
实际上Homestead还有很多功能,比如配置多个站点,就是一个项目一个站点,听上去很不错,你可以同时开发多个站点。但是实际上有坑,所以在一个站点能工作的情况下,我就不配置多个站点了,免得辛辛苦苦配好的一个站点都不能用。
好了,最后祝大家在laravel的学习过程中顺顺利利,一个坑都遇不到!