Laravel Homestead


1、简介

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进行构建和测试。

1.1 包含软件

  • Ubuntu 14.04
  • PHP 5.6 / PHP 7.0
  • HHVM
  • Nginx
  • MySQL
  • Postgres
  • Node (With PM2, Bower, Grunt, and Gulp)
  • Redis
  • Memcached(只支持PHP 5.x)
  • Beanstalkd
  • Laravel Envoy
  • Blackfire Profiler

2、安装 & 设置

2.1 首次安装

在启用Homestead环境之前,需要先安装Virtual Box或者VMWare和Vagrant,所有这些软件包都会常用操作系统提供了一个便于使用的可视化安装器。

2.1.1 安装Homestead 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
2.1.2 克隆已有的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
2.1.3 升级到PHP 7.0

如果你已经在使用PHP 5.x版的Homestead盒子,可以轻松升级安装到PHP 7.0。首先,克隆laravel/homesteadphp-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命令即可。

2.2 配置Homestead

2.2.1 设置Provider

Homestead.yaml文件中的provider键表示哪个Vagrant提供者将会被使用:virtualboxvmware_fushion,还是vmware_workstation,你可以将其设置为自己喜欢的提供者:

provider: virtualbox
2.2.2 设置SSH key

Homestead.yaml文件中还要配置公共SSH key的路径,如果没有SSH key,那么在Mac或Linux上,可以通过如下命令来生成:

ssh-keygen -t rsa -C "you@homestead"

在Windows上,可以安装Git然后使用Git自带的“Git Bash”来执行上述命令。除此之外,你还可以使用PUTTY和PUTTYgen工具来生成SSH key。

2.2.3 配置共享文件夹

Homestead.yaml文件中的folders选项列出了所有你想要和Homestead环境进行共享的目录,一旦这些目录中的文件有了修改,将会在本地和Homestead环境中保持同步,如果有需要的话,你可以配置尽可能多的共享目录:

folders:
    - map: ~/Code
      to: /home/vagrant/Code

如果想要开启NFS,只需简单添加一个标识到同步文件夹配置:

folders:
    - map: ~/Code
      to: /home/vagrant/Code
      type: "nfs"
2.2.4 配置Nginx站点

对Nginx不熟?没问题,sites选项允许你方便的匹配“域名”到Homestead环境的某个目录,一个示例站点配置已经包含到Homestead.yaml文件。跟共享文件夹一样,你可以想配置多少个站点就配置多少个。Homestead可以为你的每个Laravel项目充当方便的、虚拟化的开发环境:

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public

你可以通过设置hhvmtrue让所有的Homestead站点使用HHVM:

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public
      hhvm: true

默认情况下,每个站点都可以通过HTTP(端口号:8000)和HTTPS(端口号:44300)进行访问。

2.2.5 Hosts文件

不要忘记把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

2.3 启动Vagrant Box

编辑好Homestead.yaml文件后,在Homestead目录下运行vagrant up命令,vagrant将会启动虚拟机并自动配置共享文件夹以及Nginx站点。

销毁该机器,可以使用vagrant destroy --force

2.4 为指定项目安装Homestead

全局安装Homestead将会使每个项目共享同一个Homestead盒子,你还可以为每个项目单独安装Homestead,这样就会在该项目下创建Vagrantfile,允许其他人在该项目中执行vagrant up命令,在指定项目根目录下使用Composer执行安装命令如下:

composer require laravel/homestead --dev

这样就在项目中安装了Homestead。Homestead安装完成后,使用make命令生成VagrantfileHomestead.yaml文件,make命令将会自动配置Homestead.yaml中的sitesfolders属性。

Mac/Linux:

php vendor/bin/homestead make

Windows:

vendor\bin\homestead make

接下来,在终端中运行vagrant up命令然后在浏览器中通过http://homestead.app访问站点。不要忘记在/etc/hosts(Linux)文件中添加域名homestead.app

3、日常使用

3.1 通过SSH连接

你可以在Homestead目录下通过终端命令vagrant ssh以SSH方式连接到虚拟机,但是如果你需要以更平滑的方式连接到Homestead,可以为主机添加一个别名来快速连接到Homestead盒子。创建完别名后,可以简单使用vm命令来从任何地方以SSH方式连接到Homestead机器:

alias vm="ssh vagrant@127.0.0.1 -p 2222"

3.2 连接到数据库

默认已经在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端口进行数据库连接配置。

3.3 添加更多站点

Homestead环境在运行时,你可能想要添加额外Laravel应用到Nginx站点,你可以在单个Homestead环境中运行多个Laravel应用,添加站点很简单,只需将站点添加到Homestead.yaml文件,然后在Homestead目录中运行vagrant provision命令即可。

注意:该处理是不可逆的,运行provision命令时,已经存在的数据库会被销毁并重建。

3.4 端口转发配置

默认情况下,Homestead端口转发配置如下:

  • SSH: 2222 → Forwards To 22
  • HTTP: 8000 → Forwards To 80
  • HTTPS: 44300 → Forwards To 443
  • MySQL: 33060 → Forwards To 3306
  • Postgres: 54320 → Forwards To 5432
3.4.1 转发更多端口

如果你想要在Vagrant盒子添加更多端口转发,做如下转发协议设置即可:

ports:
    - send: 93000
      to: 9300
    - send: 7777
      to: 777
      protocol: udp

4、使用Blackfire Profiler进行性能分析

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对应用性能进行分析