Homestead 能夠運行在 Windows、Mac 以及 Linux 等主流操做系統上,預裝的軟件和工具列表以下:php
注:若是你使用的是 Windows,須要開啓系統的硬件虛擬化(VT-x),這一般能夠經過 BIOS 來開啓。若是你是在 UEFI 系統上使用 Hyper-V,則須要關閉 Hyper-V 以即可以訪問 VT-x。html
先下載安裝VirtualBox和Vagrant。node
如下命令本人使用的是git bashlaravel
命令:git
vagrant box add laravel/homestead
複製代碼
vagrant box list
vagrant box remove laravel/homestead --all
vagrant box add laravel/homestead 下載文件的路徑
複製代碼
運行上述命令有可能報錯:github
Check your Homestead.yaml file, the path to your private key does not exist.
複製代碼
解決辦法以下:web
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
eval "$(ssh-agent -s)"
ssh-add -K ~/.ssh/id_rsa
複製代碼
再次運行上述命令便可添加成功數據庫
添加成功提示apache
==> box: Successfully added box 'laravel/homestead' (v0) for 'virtualbox'!
複製代碼
你能夠經過克隆倉庫代碼來實現 Homestead 安裝。將倉庫克隆到用戶目錄下的 Homestead 目錄,這樣 Homestead 盒子就能夠做爲全部其餘 Laravel 項目的主機:vim
cd ~
git clone https://github.com/laravel/homestead.git Homestead
複製代碼
克隆完成後,你須要檢查 Homestead 的版本標籤,由於 master 分支不會老是穩定版本,你能夠在 GitHub Release Page 查找到最新穩定版本而後在本地將其檢出:
cd Homestead
// Clone the desired release...
git checkout v6.1.0
複製代碼
接下來,在 Homestead 目錄下運行 bash init.sh 命令來建立 Homestead.yaml 配置文件,生成的 Homestead.yaml 配置文件文件位於當前 Homestead 目錄:
// Mac/Linux... windows下使用git bash也使用下面的命令
bash init.sh
// Windows...
init.bat
複製代碼
Homestead.yaml 文件中的 provider 鍵表示使用哪一個 Vagrant 提供者:virtualbox、vmware_fushion、 vmware_workstation 或 parallels,你能夠將其設置爲本身喜歡的提供者,固然對大部分人來講也沒得選:
provider: virtualbox
複製代碼
Homestead.yaml 文件中的 folders 屬性列出了全部主機和 Homestead 虛擬機共享的文件夾,一旦這些目錄中的文件有了修改,將會在本地和 Homestead 虛擬機之間保持同步,若是有須要的話,你能夠配置多個共享文件夾:
folders:
- map: ~/Development
to: /home/vagrant/Code
複製代碼
若是要開啓 NFS,只需簡單添加一個標識到同步文件夾配置:
folders:
- map: ~/Development
to: /home/vagrant/Code
type: "nfs"
複製代碼
注:使用 NFS 的話,須要考慮安裝 vagrant-bindfs 插件。該插件可用於在 Homestead 盒子中爲文件和目錄維護正確的用戶/組權限。
你還能夠經過 options 傳遞其餘 Vagrant 支持的同步文件夾選項:
folders:
- map: ~/Development
to: /home/vagrant/Code
type: "rsync"
options:
rsync__args: ["--verbose", "--archive", "--delete", "-zz"]
rsync__exclude: ["node_modules"]
複製代碼
對 Nginx 不熟?不要緊!經過 sites 屬性你能夠方便地將「域名」映射到 Homestead 虛擬機的指定目錄,Homestead.yaml 中默認已經配置了一個示例站點。和共享文件夾同樣,你能夠配置多個站點:
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
- map: firm.cn
to: /home/vagrant/laravelapp/firm/public
複製代碼
若是你是在 Homestead 盒子啓動以後進行了上述修改,須要運行 vagrant reload –provision 更新虛擬機上的 Nginx 配置。
不要忘記把 Nginx 站點配置中的域名添加到本地機器上的 hosts 文件中,該文件會將對本地域名的請求重定向到 Homestead 虛擬機,在 Mac 或 Linux上,該文件位於 /etc/hosts,在 Windows 上,位於 C:\Windows\System32\drivers\etc\hosts,添加方式以下:
192.168.10.10 firm.cn
複製代碼
確保 IP 地址和你的 Homestead.yaml 文件中列出的一致,一旦你將域名添加到 hosts 文件,就能夠在瀏覽器中經過該域名訪問站點了:
http://firm.cn
複製代碼
注:在真正能夠訪問以前以前還須要經過 Vagrant 啓動虛擬機上的 Homestead 盒子。
配置好 Homestead.yaml 文件後,在 Homestead 目錄下運行 vagrant up 命令,Vagrant 將會啓動虛擬機並自動配置共享文件夾以及 Nginx 站點,初次啓動須要花費一點時間進行初始化:
vagrant up
複製代碼
報錯1:
藍屏重啓
複製代碼
沒有關閉Hyper-V和VT-x衝突
控制面板→程序→啓用或關閉Windows功能 將Hyper-V以及子項所有去掉勾選就好了。肯定後記得從新啓動
複製代碼
報錯2:
Check your Homestead.yaml file, the path to your private key does not exist.
複製代碼
運行命令:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
eval "$(ssh-agent -s)"
ssh-add -k ~/.ssh/id_rsa
複製代碼
報錯3:
Failed to connect to vagrantcloud-files-production.s3.amazonaws.com port 443: Timed out
複製代碼
Vagrant沒有發現 laravel/homestead 這個Box虛擬機,這是由於版本的問題
進入Homestead目錄下
vim scripts/homestead.rb
修改:config.vm.box_version = settings["version"] ||= ">= 0.4.0"
爲 config.vm.box_version = settings["version"] ||= ">= 0"
複製代碼
報錯4:
Path: C:/Users/Administrator/.vagrant.d/data/machine-index/index
複製代碼
進入上面提示的目錄刪除 index 和index.lock
啓動以後,就能夠在瀏覽器中訪問配置的站點 firm.cn
No input file specified. 說明配置成功
複製代碼
要登陸到該虛擬機,使用 vagrant ssh 命令;關閉該虛擬機,可使用 vagrant halt 命令;銷燬該虛擬機,可使用 vagrant destroy –force 命令。
全局安裝 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
或者
vendor\\bin\\homestead make
複製代碼
接下來,在終端中運行 vagrant up 命令而後在瀏覽器中經過 homestead.app 訪問站點。不要忘記在 /etc/hosts 文件中添加域名 homestead.app(已配置的話忽略)。
要想在文件系統的任意路徑都可以運行 vagrant up 啓動 Homestead 虛擬機,在 Mac/Linux 系統中,能夠添加 Bash 函數到 ~/.bash_profile;在 Windows 系統上,須要添加「批處理」文件到 PATH。這些腳本容許你在系統的任意位置運行 Vagrant 命令,而且把命令執行位置指向 Homestead 的安裝路徑。
function homestead() {
( cd ~/Homestead && vagrant $* )
}
複製代碼
確保將該函數中的 ~/Homestead 路徑調整爲指向實際的 Homestead 安裝路徑。這樣你就能夠在系統的任意位置運行 homestead up 或 homestead ssh 來啓動/登陸虛擬機
補充知識點:/etc/profile 和 ~/.bash_profile 均可以用來設置系統 PATH,不一樣之處在於前者是給系統超級用戶使用,後者是給普通登陸用戶使用的,此外要讓 ~/.bash_profile 修改後生效,有兩種方法,一種是退出系統從新登陸,一種是使用 source ~/.bash_profile 命令。
在系統的任意位置建立一個批處理文件 homestead.bat:
@echo off
set cwd=%cd%
set homesteadVagrant=C:\Homestead
cd /d %homesteadVagrant% && vagrant %*
cd /d %cwd%
set cwd=
set homesteadVagrant=
複製代碼
你須要將腳本中實例路徑 C:\Homestead 調整爲 Homestead 實際安裝路徑。建立文件以後,添加文件路徑到 PATH,這樣你就能夠在系統的任意位置運行 homestead up 或 homestead ssh 命令了。
你能夠在 Homestead 目錄下經過運行 vagrant ssh 以 SSH 方式鏈接到虛擬機。若是你設置了所有訪問 Homestead,也能夠在任意路徑下經過 homestead ssh 登陸到虛擬機。
若是你須要以更簡捷的方式鏈接到 Homestead,能夠爲主機添加一個別名來快速鏈接到 Homestead 盒子,建立完別名後,可使用 vm 命令從任何地方以 SSH 方式鏈接到 Homestead 虛擬機:
alias vm="ssh vagrant@127.0.0.1 -p 2222"
複製代碼
Homestead 默認已經在虛擬機中爲 MySQL 和 Postgres 數據庫作好了配置,更方便的是,這些配置值與 Laravel 的 .env 中默認提供的配置一致。
想要經過本地的 Navicat 或 Sequel Pro 鏈接到 Homestead 上的 MySQL 或 Postgres 數據庫,能夠經過新建鏈接來實現,主機 IP 都是 127.0.0.1,對於 MySQL 而言,端口號是 33060,對 Postgres 而言,端口號是 54320,用戶名/密碼是 homestead/secret
Homestead 支持多種框架,因此即便你沒有使用 Laravel 的話,也可使用 Homestead,例如,咱們能夠經過 symfony2 站點類型輕鬆添加一個 Symfony 應用:
sites:
- map: symfony2.app
to: /home/vagrant/Code/Symfony/web
type: symfony2
複製代碼
目前支持的站點類型包括 apache、laravel、proxy、silverstripe、statamic、symfony2 和 symfony4。
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 目錄下:

有時候你可能但願和同事或客戶分享本身當前的工做進度或成果 登陸虛擬機運行命令
share firm.cn //配置的站點
複製代碼
運行完該命令以後,你就能夠看到一個 Ngrok 界面出現,其中包含活動日誌和分享站點所需的公開訪問 URL:

能夠看到個人分享 URL 是 95920d84.ngrok.io/ 以及 95920d84.ngrok.io/,你能夠經過這兩個域名在任意聯網機器上訪問個人 Homestead 站點:

若是你想要指定一個自定義的區域,子域名或者其餘 Ngrok 運行時選項,能夠將它們添加到 share 命令:
share homestead.app -region=us -subdomain=laravel
複製代碼
目前自定義域名只有付費用戶纔可使用,因此 subdomain 會提示不可用。
注:記住兩個點,一個是 Vagrant 並無什麼特別的安全防範措施,另外一個是當你運行 share 命令的時候,你實際上是在將本身的虛擬機曝光到互聯網上。因此,當你要分享本身的站點以前,先想一想安全隱患,並將其規避掉。