鍍金池/ 教程/ PHP/ Laravel Homestead
門面
Laravel Homestead
安裝及配置
測試
HTTP 中間件
加密
升級指南
幫助函數(shù)
應(yīng)用目錄結(jié)構(gòu)
集合
新手入門指南-簡單任務(wù)管理系統(tǒng)
任務(wù)調(diào)度
查詢構(gòu)建器
視圖
驗(yàn)證
Laravel Cashier(訂購&支付&發(fā)票)
本地化
隊(duì)列
調(diào)整器
分頁
文件系統(tǒng)/云存儲
貢獻(xiàn)代碼
哈希
HTTP 控制器
緩存
遷移
HTTP 請求
Laravel Elixir
發(fā)行版本說明
Envoy 任務(wù)運(yùn)行器(SSH任務(wù))
序列化
Session
起步
帶用戶功能的任務(wù)管理系統(tǒng)
起步
用戶授權(quán)
郵件
事件
填充數(shù)據(jù)
HTTP 路由
服務(wù)提供者
Blade 模板引擎
包開發(fā)
用戶認(rèn)證
Artisan 控制臺
HTTP 響應(yīng)
集合
服務(wù)容器
關(guān)聯(lián)關(guān)系
一次請求的生命周期
契約
Redis
錯誤&日志

Laravel Homestead

1、簡介

Laravel 致力于將整個 PHP 開發(fā)體驗(yàn)變得讓人愉悅,包括本地開發(fā)環(huán)境。

Vagrant 提供了一個便捷的方式來管理和設(shè)置虛擬機(jī)。Laravel Homestead 是一個官方的、預(yù)安裝好的 Vagrant 盒子,該盒子提供了一流的開發(fā)環(huán)境,有了它,我們不再需要在本地環(huán)境安裝 PHP、HHVM、web 服務(wù)器以及其它服務(wù)器軟件,我們也完全不用再擔(dān)心誤操作搞亂操作系統(tǒng)——因?yàn)?Vagrant 盒子是一次性的,如果出現(xiàn)錯誤,可以在數(shù)分鐘內(nèi)銷毀并重新創(chuàng)建該 Vagrant 盒子!

Homestead 可以運(yùn)行在 Windows、Mac 以及 Linux 系統(tǒng)上,其中已經(jīng)安裝好了 Nginx、PHP5.6、MySQL、Postgres、Redis、Memcached、Node 以及很多其它開發(fā)牛逼 Laravel 應(yīng)用所需要的東西。

注意:如果你使用的是 Windows,需要開啟系統(tǒng)的硬件虛擬化(VT-x),這通常可以通過 BIOS 來開啟。 Homestead 目前基于 Vagrant 1.7 進(jìn)行構(gòu)建和測試。

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、安裝 & 設(shè)置

2.1 首次安裝

在啟用 Homestead 環(huán)境之前,需要先安裝 Virtual Box 或者 VMWare 和 Vagrant,所有這些軟件包都會常用操作系統(tǒng)提供了一個便于使用的可視化安裝器。

2.1.1 安裝 Homestead Vagrant 盒子

VirtualBox/VMWare 和 Vagrant 安裝好了之后,在終端中使用能如下命令將 laravel/homesterad 添加到 vagrant 安裝中。這將會花費(fèi)一些時間下載該盒子,時間長短主要取決于你的網(wǎng)絡(luò)連接速度:

vagrant box add laravel/homestead

如果上述命令執(zhí)行失敗,可以使用 vagrant 老版本的方式,這需要輸入完整的 URL:

vagrant box add laravel/homestead https://atlas.hashicorp.com/laravel/boxes/homestead

2.1.2 克隆已有的 Homestead 倉庫

你還可以通過簡單克隆倉庫代碼來實(shí)現(xiàn) Homestead 安裝,考慮到克隆倉庫到 home 目錄下的 Homestead 文件夾,Homestead 盒子將會作為所有其他 Laravel 項(xiàng)目的主機(jī):

git clone https://github.com/laravel/homestead.git Homestead

克隆完成后,在 Homestead 目錄下運(yùn)行 bash init.sh 命令來創(chuàng)建 Homestead.yaml 配置文件,Homestead.yaml 配置文件文件位于 ~/.homestead 目錄:

bash init.sh

2.1.3 升級到 PHP 7.0

如果你已經(jīng)在使用 PHP 5.x 版的 Homestead 盒子,可以輕松升級安裝到 PHP 7.0。首先,克隆 laravel/homestead 的 php-7 分支到一個新的文件夾:

git clone -b php-7 https://github.com/laravel/homestead.git Homestead

不需要運(yùn)行 init.sh 腳本來覆蓋整個 Homestead.yaml 文件,你只需要簡單添加該盒子到已存在的 Homestead.yaml 文件頂部即可:

box: laravel/homestead-7

接下來,從包含克隆 laravel/homestead 倉庫的目錄運(yùn)行 vagrant up 命令即可。

2.2 配置 Homestead

2.2.1 設(shè)置 Provider

Homestead.yaml 文件中的 provider 鍵表示哪個 Vagrant 提供者將會被使用:virtualboxvmware_fushion,還是 vmware_workstation,你可以將其設(shè)置為自己喜歡的提供者:

provider: virtualbox

2.2.2 設(shè)置 SSH key

Homestead.yaml 文件中還要配置公共 SSH key 的路徑,如果沒有 SSH key,那么在 Mac 或 Linux 上,可以通過如下命令來生成:

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

在 Windows 上,可以安裝 Git 然后使用 Git 自帶的“Git Bash”來執(zhí)行上述命令。除此之外,你還可以使用 PUTTY 和 PUTTYgen 工具來生成 SSH key。

2.2.3 配置共享文件夾

Homestead.yaml 文件中的 folders 選項(xiàng)列出了所有你想要和 Homestead 環(huán)境進(jìn)行共享的目錄,一旦這些目錄中的文件有了修改,將會在本地和 Homestead 環(huán)境中保持同步,如果有需要的話,你可以配置盡可能多的共享目錄:

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

如果想要開啟 NFS,只需簡單添加一個標(biāo)識到同步文件夾配置:

folders:
    - map: ~/Code
      to: /home/vagrant/Code
      type: "nfs"

2.2.4 配置 Nginx 站點(diǎn)

對 Nginx 不熟?沒問題,sites 選項(xiàng)允許你方便的匹配“域名”到 Homestead 環(huán)境的某個目錄,一個示例站點(diǎn)配置已經(jīng)包含到 Homestead.yaml 文件。跟共享文件夾一樣,你可以想配置多少個站點(diǎn)就配置多少個。Homestead 可以為你的每個 Laravel 項(xiàng)目充當(dāng)方便的、虛擬化的開發(fā)環(huán)境:

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

你可以通過設(shè)置 hhvmtrue 讓所有的 Homestead 站點(diǎn)使用 HHVM:

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

默認(rèn)情況下,每個站點(diǎn)都可以通過 HTTP(端口號:8000)和 HTTPS(端口號:44300)進(jìn)行訪問。

2.2.5 Hosts 文件

不要忘記把 Nginx 站點(diǎn)中的域名添加到本地機(jī)器上的 hosts 文件,該文件會將對本地域名的請求重定向到 Homestead 環(huán)境,在 Mac 或 Linux 上,該文件位于 /etc/hosts,在 Windows 上,位于 C:\Windows\System32\drivers\etc\hosts,添加方式如下:

192.168.10.10  homestead.app

確保 IP 地址和你的 Homestead.yaml 文件中列出的一致,一旦你將域名放置到 hosts 文件,就可以在瀏覽器中通過該域名訪問站點(diǎn)了!

http://homestead.app

2.3 啟動 Vagrant Box

編輯好 Homestead.yaml 文件后,在 Homestead 目錄下運(yùn)行 vagrant up 命令,vagrant 將會啟動虛擬機(jī)并自動配置共享文件夾以及 Nginx 站點(diǎn)。

銷毀該機(jī)器,可以使用 vagrant destroy --force

2.4 為指定項(xiàng)目安裝 Homestead

全局安裝 Homestead 將會使每個項(xiàng)目共享同一個 Homestead 盒子,你還可以為每個項(xiàng)目單獨(dú)安裝 Homestead,這樣就會在該項(xiàng)目下創(chuàng)建 Vagrantfile,允許其他人在該項(xiàng)目中執(zhí)行 vagrant up 命令,在指定項(xiàng)目根目錄下使用 Composer 執(zhí)行安裝命令如下:

composer require laravel/homestead --dev

這樣就在項(xiàng)目中安裝了 Homestead。Homestead 安裝完成后,使用 make 命令生成 VagrantfileHomestead.yaml 文件,make 命令將會自動配置 Homestead.yaml 中的 sitesfolders 屬性。

Mac/Linux:

php vendor/bin/homestead make

Windows:

vendor\bin\homestead make

接下來,在終端中運(yùn)行 vagrant up 命令然后在瀏覽器中通過 http://homestead.app 訪問站點(diǎn)。不要忘記在 /etc/hosts(Linux)文件中添加域名 homestead.app。

3、日常使用

3.1 通過 SSH 連接

你可以在 Homestead 目錄下通過終端命令 vagrant ssh 以 SSH 方式連接到虛擬機(jī),但是如果你需要以更平滑的方式連接到 Homestead,可以為主機(jī)添加一個別名來快速連接到 Homestead 盒子。創(chuàng)建完別名后,可以簡單使用 vm 命令來從任何地方以 SSH 方式連接到 Homestead 機(jī)器:

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

3.2 連接到數(shù)據(jù)庫

默認(rèn)已經(jīng)在 homestead 中為 MySQL 和 Postgres 數(shù)據(jù)庫做好了配置,更加方便的是,Laravel 的 local 數(shù)據(jù)庫配置已經(jīng)為使用數(shù)據(jù)庫做好了設(shè)置。

想要通過本地的 Navicat 或 Sequel Pro 連接上 MySQL 或 Postgres 數(shù)據(jù)庫,可以通過新建連接來實(shí)現(xiàn),主機(jī) IP 都是127.0.0.1,對于 MySQL 而言,端口號是 33060,對 Postgres 而言,端口號是54320,用戶名/密碼是 homestead/secret

注意:只有從本地連接 Homestead 的數(shù)據(jù)庫時才能使用這些非標(biāo)準(zhǔn)的端口,在 Homestead 環(huán)境中還是應(yīng)該使用默認(rèn)的3306和5432端口進(jìn)行數(shù)據(jù)庫連接配置。

3.3 添加更多站點(diǎn)

Homestead 環(huán)境在運(yùn)行時,你可能想要添加額外 Laravel 應(yīng)用到 Nginx 站點(diǎn),你可以在單個 Homestead 環(huán)境中運(yùn)行多個 Laravel 應(yīng)用,添加站點(diǎn)很簡單,只需將站點(diǎn)添加到 Homestead.yaml 文件,然后在 Homestead 目錄中運(yùn)行 vagrant provision 命令即可。

注意:該處理是不可逆的,運(yùn)行 provision 命令時,已經(jīng)存在的數(shù)據(jù)庫會被銷毀并重建。

3.4 端口轉(zhuǎn)發(fā)配置

默認(rèn)情況下,Homestead 端口轉(zhuǎn)發(fā)配置如下:

  • 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 轉(zhuǎn)發(fā)更多端口

如果你想要在 Vagrant 盒子添加更多端口轉(zhuǎn)發(fā),做如下轉(zhuǎn)發(fā)協(xié)議設(shè)置即可:

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

4、使用 Blackfire Profiler 進(jìn)行性能分析

SensioLabs 的 Blackfire Profiler 能自動收集代碼執(zhí)行數(shù)據(jù),比如內(nèi)存、CPU 時間、硬盤 I/O 等,Homestead 使得在應(yīng)用中使用該 profiler 變得輕而易舉。

所有需要的軟件包已經(jīng)安裝到 Homestead 盒子,你只需要在 Homestead.yaml 文件中設(shè)置 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 重新指配盒子。在此之前,確保你已經(jīng)查看過 Blackfire 文檔了解了如何為你的瀏覽器安裝相應(yīng)應(yīng)的 Blackfire 擴(kuò)展。