軟件環境:在 Windows 10 上基於 VirtualBox 4.3.24 + Vagrant 1.7.1 使用 Laravel Homestead。php
先下載安裝VirtualBox和Vagrant。html
安裝完成後須要將vagrant
/vagrant.exe
所在目錄放到系統路徑中(這個須要根據Vagrant安裝目錄來,好比個人是D:\HashiCorp\Vagrant\bin
)。laravel
使用Vagrant安裝Homestead盒子數據庫
在控制檯中執行以下命令:瀏覽器
vagrant box add laravel/homestead
安裝過程須要較長時間(取決於你的網絡鏈接速度),若是網絡中斷,直接再次執行上面的命令會報錯:網絡
HTTP server doesn't seem to support byte ranges. Cannot resume.
意思是說不支持斷點下載,不能從上次中斷的地方恢復下載,解決辦法是去~/.vagrant.d/tmp
(Windows上須要將~替換成當前用戶目錄,好比你當前用戶名是test
,則對應目錄爲C:\Users\test\.vagrant.d\tmp
)目錄中刪除下載的部分文件。而後再執行上面的命令便可從新開始下載:app
這種方式是全局安裝,即同一主機上全部項目共享該Homestead盒子,固然你也能夠爲每一個項目單獨指定Homestead盒子,可參考Laravel Homestead相應的文檔,這裏再也不贅述。composer
使用Composer全局安裝Homestead包ssh
composer global require "laravel/homestead=~2.0"
安裝完Homestead盒子後,默認配置文件位於~/.homestead/Homestead.yaml
(Windows下用戶名爲test的話對應目錄是C:\Users\test\.homestead\Homestead.yaml
)。該配置文件內容以下所示:ide
因爲咱們在安裝Homestead盒子時已經指定了provider
,因此這裏沒有該選項。若是系統沒有配置過公共SSH KEY路徑,能夠參考Homestead文檔設置SSH KEY部分去生成。
接下來,咱們來配置主機和虛擬機之間的共享文件夾,這個經過folders
選項來配置。配置完成後,主機上對應文件夾下的任何文件修改都會實時同步到虛擬機相應的文件夾下。若是要開啓NFS,只需在folders
選項下新增一個type
配置:
folders: - map: E:/xampp/htdocs/laravel to: /vagrant/laravel type: 'nfs'
這裏咱們將其修改成前一篇文章中已經安裝好的Laravel應用目錄laravelapp
:
folders: - map: E:/xampp/htdocs/laravelapp to: /vagrant/laravelapp
而後咱們來進行Nginx站點配置,該配置容許咱們在Homestead.yaml
文件中經過sites
選項進行簡單域名解析,而沒必要去虛擬機上對Nginx進行復雜配置,就能夠完成域名與Homestead上相應目錄的映射。Homestead.yaml
默認已經爲咱們配置了一個示例站點homestead.app
,該域名映射到Homestead上的/vagrant/laravel/public
目錄,這裏咱們相應將目錄修改成/vagrant/laravelapp/public
:
sites: - map: homestead.app to: /vagrant/laravelapp/public hhvm: true
這裏咱們設置hhvm
爲true
以讓該站點使用HHVM。
配置完域名解析後,不要忘了在hosts
中添加對應的IP地址映射:
127.0.0.1 homestead.app
多站點配置
多站點配置很簡單,只須要在sites
選項中新增匹配便可:
sites: - map: homestead.app to: /vagrant/laravelapp/public - map: laravel.app to: /vagrant/laravelapp/public
注意:配置多站點後須要使用
homestead provision
重啓homestead虛擬機。
若是你使用ssh登陸到Homestead的話,還能夠經過以下命令新增站點:
serve laravel.app /vagrant/laravelapp/public 80
Homestead.yaml
中默認已經配置好了一個數據庫配置示例,該配置示例對應新安裝的Laravel應用中的.env
數據庫配置:
APP_ENV=local APP_DEBUG=true APP_KEY=8PGeOBuLcDBHSvjBL19fGw5aySbb9M3d DB_HOST=localhost DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret
.env
中配置就是爲Homestead準備的。這意味着咱們在Homestead上能夠經過homestead/secret鏈接上數據庫,且該數據庫中有一個名爲homestead
的數據庫。
對數據庫配置咱們不作任何更改。
默認狀況下,Homestead端口轉發配置以下:
若是要添加更多端口轉發,能夠經過在Homestead.yaml
中新增ports
選項配置:
ports: - send: 93000 to: 9300
小貼士:想要對Homestead虛擬機有更多的自定義配置,能夠去修改
~/AppData/Roaming/Composer/vendor/laravel/homestead/scripts/homestead.rb
文件,該文件對Homestead有更加細粒度的配置,而後被~/AppData/Roaming/Composer/vendor/laravel/homestead/Vagrantfile
引用。
完成上述配置後,咱們可使用homestead up
啓動Homestead虛擬機了,若是啓動時報錯:
There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below. Command: ["hostonlyif", "create"] Stderr: 0%... Progress state: E_FAIL VBoxManage.exe: error: Failed to create the host-only adapter VBoxManage.exe: error: Code E_FAIL (0x80004005) - Unspecified error (extended in fo not available) VBoxManage.exe: error: Context: "int __cdecl handleCreate(struct HandlerArg *,in t,int *)" at line 66 of file VBoxManageHostonly.cpp
則對應的解決方案以下:
1)去C:\Users\test\AppData\Roaming\Composer\vendor\laravel\homestead\scripts
(假定你的Windows用戶名爲test
)而後打開homestead.rb
2)在homestead.rb
中註釋第17行:
# config.vm.network :private_network, ip: settings["ip"] ||= "192.168.10.10"
3)去D:\HashiCorp\Vagrant\embedded\gems\gems\vagrant-1.7.1\plugins\providers\virtualbox
(相關目錄取決於你安裝Vagrant的目錄及版本)打開action.rb
4)在action.rb
中註釋掉第64行:
# b.use ClearNetworkInterfaces
5)以管理員權限打開VirtualBox,去管理->全局設定->網絡界面,點擊第二個選項卡「僅主機(Host-only)網絡」,選擇一個適配器進行編輯(將IP設爲與Homestead.yaml
中一致即192.168.10.10
)並保存:
6)接下來設置VirtualBox中homestead
的網絡配置,選擇其鏈接方式爲:僅主機(Host-only)適配器「:
7)再次運行homestead up
:
而後咱們能夠經過homestead ssh
鏈接到虛擬機,固然也可使用其餘工具如putty鏈接:
putty鏈接配置信息以下:
IP:127.0.0.1 端口號:2222 用戶名:vagrant 密碼:vagrant
接下來咱們火燒眉毛去瀏覽器中測試下吧(爲區分咱們將視圖中文字略做修改):
咱們使用Navicat For MYSQL對Homestead上的MySQL數據庫鏈接作了測試:
數據庫鏈接信息與上面數據庫配置中.env
中的配置信息同樣。
固然,在安裝啓動Homestead的過程還有各類其它小問題,這裏只作了一個簡單測試,在具體操做過程當中有任何問題,歡迎在下面的評論框中提出,咱們來一塊兒探討。
附:Homestead命令大全
命令 | 解釋 |
---|---|
up | 啓動homestead |
halt | 中止homestead |
init | 建立初始化的homestead.yaml |
edit | 編輯homestead.yaml |
suspend | 掛起homestead |
resume | 繼續掛起的homestead |
ssh | 經過ssh登陸homestead |
run | 經過ssh在homestead上運行命令 |
status | 獲取homestead的狀態 |
list | 列表命令 |
help | 顯示命令的幫助 |
provision | 從新配置homestead |
destory | 銷燬homestead |
update | 更新homestead鏡像 |