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)建和測試。
在啟用 Homestead 環(huán)境之前,需要先安裝 Virtual Box 或者 VMWare 和 Vagrant,所有這些軟件包都會常用操作系統(tǒng)提供了一個便于使用的可視化安裝器。
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
你還可以通過簡單克隆倉庫代碼來實(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
如果你已經(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 命令即可。
Homestead.yaml
文件中的 provider
鍵表示哪個 Vagrant 提供者將會被使用:virtualbox
、vmware_fushion
,還是 vmware_workstation
,你可以將其設(shè)置為自己喜歡的提供者:
provider: virtualbox
在 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。
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"
對 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è)置 hhvm
為 true
讓所有的 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)行訪問。
不要忘記把 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
編輯好 Homestead.yaml
文件后,在 Homestead 目錄下運(yùn)行 vagrant up
命令,vagrant 將會啟動虛擬機(jī)并自動配置共享文件夾以及 Nginx 站點(diǎn)。
銷毀該機(jī)器,可以使用 vagrant destroy --force
全局安裝 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
命令生成 Vagrantfile
和 Homestead.yaml
文件,make
命令將會自動配置 Homestead.yaml
中的 sites
和 folders
屬性。
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
。
你可以在 Homestead 目錄下通過終端命令 vagrant ssh
以 SSH 方式連接到虛擬機(jī),但是如果你需要以更平滑的方式連接到 Homestead,可以為主機(jī)添加一個別名來快速連接到 Homestead 盒子。創(chuàng)建完別名后,可以簡單使用 vm
命令來從任何地方以 SSH 方式連接到 Homestead 機(jī)器:
alias vm="ssh vagrant@127.0.0.1 -p 2222"
默認(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ù)庫連接配置。
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ù)庫會被銷毀并重建。
默認(rèn)情況下,Homestead 端口轉(zhuǎn)發(fā)配置如下:
如果你想要在 Vagrant 盒子添加更多端口轉(zhuǎn)發(fā),做如下轉(zhuǎn)發(fā)協(xié)議設(shè)置即可:
ports:
- send: 93000
to: 9300
- send: 7777
to: 777
protocol: udp
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ò)展。