[TOC]
### **1、简介**
[Laravel](http://laravelacademy.org/tags/laravel "View all posts in Laravel") 致力于让整个 PHP 开发过程变得让人愉悦,包括本地开发环境,为此官方为我们提供了一整套本地开发环境 —— Laravel [Homestead](http://laravelacademy.org/tags/homestead "View all posts in Homestead")。
Laravel Homestead 是一个打包好各种 Laravel 开发所需要的工具及环境的 [Vagrant](http://laravelacademy.org/tags/vagrant "View all posts in Vagrant") 盒子([Vagrant](http://vagrantup.com/) 提供了一个便捷的方式来管理和设置[虚拟机](http://laravelacademy.org/tags/%e8%99%9a%e6%8b%9f%e6%9c%ba "View all posts in 虚拟机")),该盒子为我们提供了优秀的开发环境,有了它,我们不再需要在本地环境[安装](http://laravelacademy.org/tags/%e5%ae%89%e8%a3%85 "View all posts in 安装") PHP、HHVM、Web服务器以及其它工具软件,我们也完全不用再担心误操作搞乱操作系统 —— 因为 Vagrant 盒子是一次性的,如果出现错误,可以在数分钟内销毁并重新创建该 Vagrant 盒子!
Homestead可以运行在 Windows、Mac 以及 Linux 系统上,其中已经安装好了Nginx、PHP7.0、MySQL、Postgres、Redis、Memcached、Node以及很多其它开发 Laravel 应用所需要的东西。
> 注:如果你使用的是Windows,需要开启系统的硬件虚拟化(VT-x),这通常可以通过BIOS来开启。
#### **预装软件**
* Ubuntu 14.04
* Git
* PHP 7.0
* HHVM
* Xdebug
* Nginx
* MySQL
* SQLite 3
* Postgres
* Composer
* Node(With PM2, Bower, Grunt, and Gulp)
* Redis
* Memcached
* Beanstalkd
* [Blackfire](http://laravelacademy.org/tags/blackfire "View all posts in Blackfire") Profiler
### **2、安装 & 设置**
#### **首次安装**
在使用 Homestead 之前,需要先安装 [Virtual Box](https://www.virtualbox.org/wiki/Downloads)/[VMWare](http://www.vmware.com/) 和 [Vagrant](http://www.vagrantup.com/downloads.html),所有这些软件包都为常用操作系统提供了一个便于使用的可视化安装器。
**安装 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
~~~
**通过 GitHub 安装 Homestead**
你还可以通过简单克隆仓库代码来实现 Homestead 安装。将仓库克隆到用户目录下的 Homestead 目录,这样 Homestead 盒子就可以会作为所有其他 Laravel 项目的主机:
~~~
cd ~
git clone https://github.com/laravel/homestead.git Homestead
~~~
克隆完成后,在 Homestead 目录下运行 `bash init.sh` 命令来创建 `Homestead.yaml` 配置文件,`Homestead.yaml` 配置文件文件位于 `~/.homestead` 目录:
~~~
bash init.sh
~~~
#### **配置 Homestead**
**设置 Provider**
`Homestead.yaml` 文件中的 `provider` 键表示使用哪个 Vagrant 提供者:`virtualbox`、`vmware_fushion` 或者`vmware_workstation`,你可以将其设置为自己喜欢的提供者:
~~~
provider: virtualbox
~~~
**配置[共享](http://laravelacademy.org/tags/%e5%85%b1%e4%ba%ab "View all posts in 共享")文件夹**
`Homestead.yaml` 文件中的 `folders` 属性列出了所有主机和 Homestead 虚拟机共享的文件夹,一旦这些目录中的文件有了修改,将会在本地和 Homestead 虚拟机之间保持同步,如果有需要的话,你可以配置多个共享文件夹(一般一个就够了):
~~~
folders:
- map: ~/Code
to: /home/vagrant/Code
~~~
如果要开启 [NFS](http://docs.vagrantup.com/v2/synced-folders/nfs.html),只需简单添加一个标识到同步文件夹配置:
~~~
folders:
- map: ~/Code
to: /home/vagrant/Code
type: "nfs"
~~~
**配置 Nginx 站点**
对 Nginx 不熟?没问题,通过 `sites` 属性你可以方便地将“域名”映射到 Homestead 虚拟机的指定目录,`Homestead.yaml` 中默认已经配置了一个示例站点。和共享文件夹一样,你可以配置多个站点:
~~~
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)进行访问。
**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
~~~
#### **启动 Vagrant Box**
配置好 `Homestead.yaml` 文件后,在 Homestead 目录下运行 `vagrant up` 命令,Vagrant 将会启动虚拟机并自动配置共享文件夹以及 Nginx 站点。
销毁该机器,可以使用 vagrant destroy –force
#### **为指定项目安装 Homestead**
全局安装 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` 文件中添加域名 `homestead.app`。
#### **安装MariaDB**
如果你希望使用MariaDB来替代MySQL,可以添加`mariadb`配置项到`Homestead.yaml`文件,该选项会移除MySQL并安装MariaDB,MariaDB是MySQL的替代版本,所以在应用数据库配置中你仍然可以使用`mysql`驱动:
~~~
box: laravel/homestead
ip: "192.168.20.20"
memory: 2048
cpus: 4
provider: virtualbox
mariadb: true
~~~
### **3、日常使用**
#### **全局访问 Homestead**
有时候你想要在文件系统的任意位置运行 `vagrant up` 启动 Homestead 虚拟机,要实现这一目的需要将 Homestead 安装目录添加到系统路径。这样你就可以在系统的任意位置运行 `homestead` 或 `homestead ssh` 来启动/登录虚拟机。
#### **通过 SSH 连接**
你可以在 Homestead 目录下通过运行 `vagrant ssh` 以 SSH 方式连接到虚拟机,但是如果你需要以更平滑的方式连接到 Homestead,可以为主机添加一个别名来快速连接到 Homestead 盒子,创建完别名后,可以使用 `vm` 命令从任何地方以 SSH 方式连接到 Homestead 虚拟机:
~~~
alias vm="ssh vagrant@127.0.0.1 -p 2222"
~~~
#### **连接到数据库**
默认已经在 Homestead 虚拟机中为 MySQL 和 Postgres 数据库做好了配置,更方便的是,Laravel的 `.env` 还为连接 Homestead 数据库做好了配置。
想要通过本地的 Navicat 或 Sequel Pro 连接到 Homestead 上的 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` 命令即可。
#### **配置 [Cron](http://laravelacademy.org/tags/cron "View all posts in Cron") 调度任务**
Laravel 提供了很方便的方式来调度 Cron 任务:只需每分钟调度运行一次 Artisan 命令 `schedule:run` 即可。`schedule:run` 会检查定义在 `App\Console\Kernel` 类中定义的调度任务并判断运行哪些任务。
如果想要为某个 Homestead 站点运行 `schedule:run` 命令,需要在定义站点时设置 `schedule` 为 `true`:
~~~
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
schedule: true
~~~
该站点的 Cron 任务会被定义在虚拟机的 `/etc/cron.d` 目录下。
#### **[端口转发](http://laravelacademy.org/tags/%e7%ab%af%e5%8f%a3%e8%bd%ac%e5%8f%91 "View all posts in 端口转发")配置**
默认情况下,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
**转发更多端口**
如果你想要为 Vagrant 盒子添加更多端口转发,做如下转发协议设置即可:
~~~
ports:
- send: 93000
to: 9300
- send: 7777
to: 777
protocol: udp
~~~
### **4、使用 Blackfire Profiler 进行[性能分析](http://laravelacademy.org/tags/%e6%80%a7%e8%83%bd%e5%88%86%e6%9e%90 "View all posts in 性能分析")**
SensioLabs 开发的 [Blackfire Profiler](https://blackfire.io/) 能自动收集代码执行数据,比如内存、CPU 时间、硬盘 I/O 等,Homestead 使得在应用中使用该性能分析器变得轻而易举。
Blackfire 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` 重新启动 Homestead。在此之前,确保你已经查看过 [Blackfire 文档](https://blackfire.io/getting-started)了解了如何在浏览器安装相应的 Blackfire 扩展。
- 序言
- 发行版本说明
- 升级指南
- 贡献代码
- 开始
- 安装
- 配置
- Laravel Homestead
- 基础
- HTTP 路由
- HTTP 中间件
- HTTP 控制器
- HTTP 请求
- HTTP 响应
- 视图
- Blade 模板引擎
- 架构
- 一次请求的生命周期
- 应用目录结构
- 服务提供者
- 服务容器
- 门面(Facades)
- 数据库
- 起步
- 查询构建器
- 迁移
- 填充数据
- Eloquent ORM
- 起步
- 关联关系
- 集合
- 访问器&修改器
- 序列化
- 服务
- 用户认证
- 用户授权
- Artisan Console
- 订阅支付实现:Laravel Cashier
- 缓存
- 集合
- 集成前端资源:Laravel Elixir
- 加密
- 错误&日志
- 事件
- 文件系统/云存储
- 哈希
- 辅助函数
- 本地化
- 邮件
- 包开发
- 分页
- Redis
- 队列
- Session
- Envoy Task Runner
- 任务调度
- 测试
- 验证
- 新手入门指南
- 简单任务管理系统
- 带用户功能的任务管理系统