話說作為laravel的開發者,你聽說Homestead應該很久了,可是官方推薦的開發環境在國內為什么鮮有人用?我這幾天試著安裝了一下,發現官方的安裝教程實在存在著太多的大坑,尤其讓剛剛入道的開發者望而卻步,在本文我試著手把手教大家填上這個坑,我在騰訊課堂上傳了視頻教程,歡迎報名學習。如果你覺得視頻過于羅嗦,直接參看本教程即可。
第一步 安裝必須的軟件
1.安裝vagrant,點此進入下載頁,vagrant屬于跨平臺應用,我的系統是win10。關于vagrant教程,可以自己看一下,百度一下遍地是。不看也沒關系,本文大概只用到其中的幾個命令。
2.安裝Virtualbox,當然你安裝Vmware或parallels(OX系統)也可以,但后面下載的box要注意對應,虛擬機對應的版本不同。
第二步 導入box
vagrant box add laravel/homestead
第一個坑:原本只要如上的命令即可,但由于國內眾所周知的網絡原因,我們不得不考慮先下載好你需要的box再來添加。
首先在hashicorp中找到合適的版本,再在鏈接后加上”版本號/providers/虛擬機類型.box”即可獲得下載鏈接.
如我們要下載最新的版本號為1.0.1的virtualbox版的box文件,鏈接即為:https://atlas.hashicorp.com/laravel/boxes/homestead/versions/1.0.1/providers/virtualbox.box
注意!?laravel/homestead box項目地址已經不再是原來的
而已經變更成
下載地址
以下地址下載最新版本(目前為5.1.0)的Homestead Box(可以使用下載工具):
https://app.vagrantup.com/laravel/boxes/homestead/versions/5.1.0/providers/virtualbox.box?
https://vagrantcloud.com/laravel/boxes/homestead/versions/5.1.0/providers/virtualbox.box?
如果你需要下載不同版本(或最新版本),請將以上地址中versions/后的數字版本號替換成相應的版本號。
為此我還是提供了國內的鏈接(已更新到5.1.0),方便大家。
鏈接:http://pan.baidu.com/s/1dEJdHj7?
密碼:kzlc
不建議采用迅雷離線下載,據說會導致下載的文件損壞!
接下來我新建了一個文件夾名為homestead,然后我將下好的box重命名為homestead.box放入,然后在此文件夾內運行如下命令(這里是按照一些普通的教程來添加,這時候挖了一個坑,后面填上)。
vagrant box add laravel/homestead homestead.box
接著運行
vagrant box list
發現這個box已經添加進來就ok了。
第三步 下載官方homestead配置
可以進入laravel5.3的官方文檔
按照文檔的說明首先運行(必須本地已經安裝了git)
git clone https://github.com/laravel/homestead.git Homestead
接著在已經克隆下來的文件夾內,會發現bash init.sh,init.bat兩個文件,這兩個分別是將該目錄內的Homestead.yaml文件拷貝到你的系統“家”目錄下。如果是在win下,又安裝了git bash,則運行bash init.sh,init.bat均可。如果是在linux下,則運行bash init.sh。
接著我們就在家目錄.homestead文件夾下找到了我們的這個配置文件
第四步 配置Homestead.yaml
設置 IP及Provider
Homestead.yaml文件中的provider鍵表示使用哪個 Vagrant 提供者:virtualbox、vmware_fushion或者vmware_workstation,你可以將其設置為自己喜歡的提供者:
ip: "192.168.10.10"
provider: virtualbox
配置共享文件夾
Homestead.yaml文件中的folders屬性列出了所有主機和 Homestead 虛擬機共享的文件夾,一旦這些目錄中的文件有了修改,將會在本地和 Homestead 虛擬機之間保持同步,如果有需要的話,你可以配置多個共享文件夾(一般一個就夠了):
folders:
- map: D:/homestead/code ?#(這是我本地的文件夾)
to: /home/vagrant/Code
配置 Nginx 站點
對 Nginx 不熟?沒問題,通過sites屬性你可以方便地將“域名”映射到 Homestead 虛擬機的指定目錄,Homestead.yaml中默認已經配置了一個示例站點。和共享文件夾一樣,你可以配置多個站點:
sites:
- map: liang.app
to: /home/vagrant/Code/Laravel/public
Hosts文件
不要忘記把 Nginx 站點配置中的域名添加到本地機器上的hosts文件中,該文件會將對本地域名的請求重定向到 Homestead 虛擬機,在 Mac 或 Linux上,該文件位于/etc/hosts,在 Windows 上,位于C:\Windows\System32\drivers\etc\hosts,添加方式如下:
192.168.10.10 liang.app
確保 IP 地址和你的Homestead.yaml文件中列出的一致,一旦你將域名放置到hosts文件,就可以在瀏覽器中通過該域名訪問站點了:
http://liang.app
第五步 啟動vagrant
在 Homestead 目錄下運行vagrant up命令,Vagrant 將會啟動虛擬機并自動配置共享文件夾以及 Nginx 站點。官方文檔對此描述的如此這般簡單,其實這里遇到了第二個大坑
我們輸入vagrant up看會發生什么?一堆的錯誤提示!!!!
我們根據提示,貌似是ssh的key沒有生成,于是我們要運行如下命令,這個命令可以在git bash下生成,也可以在cmder等命令行工具完成,但在win下的cmd卻無法執行。win 下可考慮powershell。
ssh-keygen
好了,我們歡喜的以為,我們可以順利運行了。vagrant up。我擦居然提示這個box沒有,需要安裝。出現了第三個坑
導致該坑的原因,我們看之前的vagrant box list,里面顯示laravel/homestead (virtualbox, 0),而homestead要求Box Version: >= 1.0.0,這就不奇怪了。但我們明明下的是這個1.0.1版本啊。
我們有兩種方式修復這個大坑
方式一
修改homestead/scripts/homestead.rb的這個文件,將其中的>= 1.0.0改為< 1.0.0即可滿足要求。但我并不推薦這種方式,因為實質對滿足要求進行了篡改。
方式二
我們在homestead下新建一個名為homestead.json的一個json配置文件
{
"name": "laravel/homestead",
"versions": [{
"version": "1.0.1",
"providers": [{
"name": "virtualbox",
"url": "file:///D/homestead/homestead.box"
}]
}]
}
看懂了嗎?接著我們運行這個命令(注意,url必須是絕對路徑)
vagrant box add homestead.json
真的不容易啊,添加成功了。
此處因為vagrant升級到2.0版本后又有改變,我們再次進行更正。若以上box已添加成功并順利運行請忽略以下步驟
可以詳見https://blog.csdn.net/lgyaxx/article/details/60870819
下載完成后,我們將下載的文件命名為homestead-5.1.0.box。接下來,我們cd到相應的文件夾(假設下載文件目錄在Downloads文件夾下,運行以下命令:
eagle@EagleEye:~/Downloads$ vagrant box add laravel/homestead ./homestead-5.1.0.box
會開始安裝我們下載的Homestead盒子。?
完成后,你會發現自己的用戶文件夾里多出了一個.vagrant.d的文件夾(C:\Users\MyUserName.vagrant.d)。
將文件夾中名為0的文件夾改名為我們下載的Homestead的版本號,圖片還沒有更新,我們應該改成5.1.0。
接下來,非常重要的一個步驟:
我們打開這個文件夾,找到以下路徑:
C:\Users\MyUserName\.vagrant.d\boxes\laravel-VAGRANTSLASH-homestead
在該文件夾下新建一個叫metadata_url的空白文件(注意不要有任何文件名后綴,如果你的系統設置了自動隱藏后綴名,請將隱藏去掉,確認文件無任何后綴):?
文件的內容里,添加以下鏈接:
https://app.vagrantup.com/laravel/boxes/homestead
注意,不要留任何空白字符,保存文件。如果不進行這一步會怎樣?,如下圖
完成之后,我們就可以開始配置Homestead了。
我們接著運行vagrant up試試
經過這樣一番折騰終于成功運行了。
第六步 登錄vagrant并安裝laravel
這一步應該是我們的最后一步了,我們期待目標通過本地能夠訪問到你用vagrant搭建起來的laravel。我們通過vagrant ssh命令即可順利登錄我們的系統了。
由于設置上我們的vagrant虛擬機Code目錄和我們的本地主機D:/homestead/Code是同一個目錄,因此,我們先移步到該目錄。
第四個坑出現了,我們一般是通過composer來進行安裝,但出于GFW原因,我們不得不用中國鏡像來安裝。vagrant虛擬機中運行如下命令
composer config -g repo.packagist composer https://packagist.phpcomposer.com
接著我們通過composer來安裝一個5.2版本
composer create-project laravel/laravel=5.2.* --prefer-dist
OK,訪問liang.app,出現了Laravel 5的歡迎界面,大功告成。
補坑:對于部分用戶,可能出現autoload或boostrap不存在,說明依賴安裝不完整,可以在laravel目錄下運行如下命令來解決。
composer update--no-scripts
由于直接git clone 官方在github上的東西可能造成與本box版本不一致,建議解決方案參考評論中beyond__devil所用的方法,將版本回滾。或者直接下最新的box或等我的box更新。
受各位啟發,準備出一個Docker教程,于是乎發現了有意思的評論
版權聲明:本文版權歸作者所有,如要轉載,請給錢,歡迎私信、評論
歡迎打賞、打賞、打賞
2017.03.27重大更新
1.homestead的box已升級到2.0
2.vagrant版本要求必須是1.9+
3.最最重要的是,homestead在github上的版本已更新到5.1,有一些文件發生了變動。
最主要的變動是當運行init.bat或init.sh時候,幾個文件將不再復制到家目錄的.homestead文件,而是直接被復制到homestead項目的根目錄中(源在homestead項目文件的resources文件夾下)。原先家目錄下的.homestead可以直接刪掉了!
4.先刪除原來box,可以用vagrant box remove laravel/homestead命令,destroy之前的虛擬機,接著重復之前的步驟,安裝新的2.0box即可(記得修改添加時的版本號)。
騰訊課堂已經更新,已報名的同學可以觀看補充的課程