[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
- 任務調度
- 測試
- 驗證
- 新手入門指南
- 簡單任務管理系統
- 帶用戶功能的任務管理系統