天天看點

Windows 7/8/10 系統下Laravel架構的開發環境安裝及部署詳解(Vagrant + Homestead)

Vagrant

是一款基于Virtual Box的虛拟機環境,可以安裝多種Box(盒子,即預先配置好的開發環境),達到多種開發環境可以快速切換并且不需要擔心包裹的依賴性問題(Package Dependencies)。

Homestead

是Laravel官方建立的Vagrant盒子,虛拟機的環境目前搭載的是Ubuntu 16.04 LTS,已經內建了Laravel所需的開發環境及工具,包含了最新版本的PHP,MySQL以及NGINX伺服器。

那麼我們需要做的幾個步驟如下:

  1. 下載下傳并安裝Git Bash
  2. 下載下傳并安裝Vagrant
  3. 下載下傳并安裝Virtual Box。
  4. 下載下傳Homestead盒子及盒子配置檔案。
  5. 建立一個新的Laravel項目。

我們需要的工具:

  • Git Bash
  • Vagrant
  • Virtual Box
  • Homestead

注意:Laravel官方推薦的Shell是

Git Bash

。因為Git Bash自動将~(tilde)映射到使用者根目錄下(例如,C:\Users\Eagle),而如果使用Windows自帶的cmd,那麼需要使用

%HOMEDRIVE%%HOMEPATH%

環境變量來進入正确的檔案夾。

安裝Git Bash

首先需要我們先下載下傳Git Bash:

官網位址:

https://git-for-windows.github.io/

下載下傳位址(12-12已更新v2.20.0):

https://github.com/git-for-windows/git/releases/tag/v2.20.0.windows.1

Windows 7/8/10 系統下Laravel架構的開發環境安裝及部署詳解(Vagrant + Homestead)

直接下載下傳可能很慢,我們可以右鍵複制下載下傳連結,使用迅雷等下載下傳工具下載下傳。

安裝Git Bash很簡單,按預設選項安裝就可了。

完成後,我們就可以進行下一步了:

安裝Vagrant及Virtual Box。

Vagrant的下載下傳位址:

https://www.vagrantup.com/downloads.html

Windows 7/8/10 系統下Laravel架構的開發環境安裝及部署詳解(Vagrant + Homestead)

請選擇Windows版本進行下載下傳并安裝。

安裝Virtual Box

Virtual Box的下載下傳位址:

https://www.virtualbox.org/wiki/Downloads

Windows 7/8/10 系統下Laravel架構的開發環境安裝及部署詳解(Vagrant + Homestead)

請選擇Windows hosts下載下傳Windows版本并安裝。

注意:若下載下傳最新5.2+版本的VirtualBox,請確定你的Vagrant版本在2.0以上,因為新版的VirtualBox與Vagrant老版本不相容。
完成之後,我們就可以開始安裝Homestead了。
           

如果你在國外,或者你所在的地區對于CLI方式下載下傳安裝Homestead網速沒有問題,那麼可以打開

Git Bash

,輸入

$ vagrant box add laravel/homestead
           

以上指令将會自動下載下傳及安裝Homestead盒子。

如果以上指令下載下傳速度很慢那麼我們需要切換到手動模式來安裝。

首先我們需要到以下位址下載下傳最新版本(目前已更新為7.1.0)的Homestead盒子(可以使用下載下傳工具下載下傳):

https://app.vagrantup.com/laravel/boxes/homestead/versions/7.1.0/providers/virtualbox.box

https://vagrantcloud.com/laravel/boxes/homestead/versions/7.1.0/providers/virtualbox.box

注意:如果你需要下載下傳不同版本(或最新版本),請将以上位址中versions/後的數字版本号替換成相應的版本号。
           

下載下傳完成後,我們将下載下傳的檔案命名為

Homestead-7.1.0.box

。接下來,我們

cd

到相應的檔案夾(假設下載下傳檔案目錄在

Downloads

檔案夾下,運作以下指令:

$ vagrant box add laravel/homestead ./Homestead-7.1.0.box
           

輸入指令後,會開始導入并安裝我們下載下傳的Homestead盒子。

Windows 7/8/10 系統下Laravel架構的開發環境安裝及部署詳解(Vagrant + Homestead)

完成後,你會發現自己的使用者檔案夾裡多出了一個名為

.vagrant.d

的檔案夾

C:\Users\MyUserName.vagrant.d

接下來,非常重要的一個步驟:

我們打開這個檔案夾,找到以下路徑(請将

MyUserName

替換成你的系統使用者名):

C:\Users\MyUserName.vagrant.d\boxes\laravel-VAGRANTSLASH-homestead

将檔案夾中名為0的檔案夾改名為我們下載下傳的Homestead的版本号,即7.1.0。

然後在該檔案夾下建立一個叫metadata_url的空白檔案 `

(注意不要有任何檔案名字尾,如果你的系統設定了自動隐藏字尾名,請将隐藏去掉,确認檔案無任何字尾):
Windows 7/8/10 系統下Laravel架構的開發環境安裝及部署詳解(Vagrant + Homestead)

檔案的内容裡,添加以下連結:

https://app.vagrantup.com/laravel/boxes/homestead

注意,不要留任何空白字元,儲存檔案。

完成之後,我們就可以開始配置Homestead了。

Git Bash

裡輸入

該指令會将Github上Homestead項目配置克隆至本地

~/homestead

檔案夾中。

進入該檔案夾,我們就可以開始建立Homestead配置檔案了:

$ cd ~/homestead   

# 建立Homestead初始配置                                                   
$ bash init.sh
           

然後在~/homestead檔案夾中,我們可以看到多出了一個名為Homestead.yaml的檔案。使用notepad++打開它,可以看到内容如下:

---                                                                             
ip: "192.168.10.10"                                                   
memory: 2048                                                    
cpus: 1                                                   
provider: virtualbox                                                  
   
authorize: ~/.ssh/id_rsa.pub                                                   
   
keys:                                                   
    - ~/.ssh/id_rsa                                                  
   
folders:                                     
    - map: ~/Code                               
      to: /home/vagrant/Code                              
   
sites:                                                   
    - map: homestead.app                              
      to: /home/vagrant/Code/laravel/public                              
   
databases:                              
    - homestead                              
   
# blackfire:                               
#     - id: foo                                 
#       token: bar                                 
#       client-id: foo                                
#       client-token: bar                                
   
# ports:                                                                                
#     - send: 50000                                 
#       to: 5000                                 
#     - send: 7777                                 
#       to: 777                                 
#       protocol: udp
           

我們來逐條解讀每一段配置的意思。

首先我們看到

這個

ip

是我們通路項目時指向的虛拟機位址。

注意,如果你的配置檔案位址跟我的不一樣,不要随意修改,記錄下這個

ip

位址,後面修改

hosts

檔案時,請使用這個

ip

位址做出相應修改。(具體配置請往下看)

接下來我們看到這段配置:

authorize: ~/.ssh/id_rsa.pub                            
   
keys:                            
    - ~/.ssh/id_rsa
           

這段配置中

authorize

後面的檔案是用來

ssh

進入虛拟機的公鑰,而

keys

後面的檔案是我們的私鑰。

是以我們需要建立用于

ssh

的公鑰和私鑰且填入相應配置中。

首先我們需要建立

~/.ssh

檔案夾:

$ mkdir ~/.ssh                                
$ cd ~/.ssh
           

接下來,我們運作生成密鑰的指令:

$ ssh-keygen -t rsa
           
Windows 7/8/10 系統下Laravel架構的開發環境安裝及部署詳解(Vagrant + Homestead)

如圖,系統會詢問我們将私鑰儲存在什麼位置,這裡由于我們已經處于

~/.ssh

檔案夾下(上一步

cd

操作),我們可以直接輸入我們需要命名的檔案名。

提示:圖檔中我用的檔案夾名為

example

,純粹是用來示例的,請大家将秘鑰按上面叙述的步驟放至

~/.ssh

檔案夾,并将檔案名稱命名為

id_rsa

。這裡其實名稱可以自己取,在圖中可以看到我使用了

id_esa_example

,如果要保留預設檔案名,那麼該步驟不輸入任何文字直接回車即可。在以下環節中,我們使用預設的秘鑰檔案名進行講解。

上一步完成後,我們看到系統提示我們輸入密碼。這裡我們可以直接回車密碼留白,因為我們在本地開發,可以省去密碼這個步驟。

該步驟完成後,我們會在~/.ssh目錄下看到以下兩個檔案:

id_rsa.pub
id_rsa
           

這就是第一段配置中相應的兩個檔案。是以我們保留預設配置即可:

authorize: ~/.ssh/id_rsa.pub                          
   
keys:                          
    - ~/.ssh/id_rsa
           

接下來我們看到這兩段配置

folders:                                
    - map: ~/Code                                
      to: /home/vagrant/Code                                
   
sites:                                
    - map: homestead.app                                
      to: /home/vagrant/Code/laravel/public
           

第一段配置

folders

中,

map

後指定的檔案夾(即

~/Code

)将被映射到虛拟機系統中

to

後指定的路徑,即

/home/vagrant/Code

這和我們常見到的和虛拟機系統(

guest system

)和宿主系統(

host system

)檔案夾共享機制類似,由于

guest system

不能直接通路

host system

中的檔案夾(安全隐患),我們需要把本機的~/Code檔案夾分享至虛拟機中,這樣一來我們在可以在虛拟機系統中通路到我們的項目檔案,并且在

~/Code

中所進行的修改會實時同步在虛拟機系統對應的檔案中。

第二段配置

sites

中,定義了浏覽器位址

homestead.app

指向虛拟機系統中

/home/vagrant/Code/laravel/publi

c這個檔案夾,即Laravel項目的

public

檔案夾。這樣在浏覽器中輸入

homestead.app

,我們就可以直接看到項目首頁了。

值得注意的是,由于

.app

域名的開放以及新的限制,不推薦使用

.app

.dev

作為項目通路位址字尾,可能會出現比較匪夷所思的錯誤。

以上的檔案夾及映射是都是可以根據使用者喜好更改的,比如我喜歡把我的開發檔案夾叫做

webdev

,在裡面我建立了一個叫

phantastic.test

的項目,那麼以上的配置,我就可以做出相應修改:

folders:                                
    - map: ~/webdev                                
      to: /var/www                                
   
sites:                                 
    - map: phantastic.test                                
      to: /var/www/phantastic/public
           

這裡我将

~/webdev

檔案夾映射為虛拟機内的

/var/www

檔案夾,這樣一來,我就可以在虛拟機裡

/var/www

路徑下看到

host

系統中~/webdev檔案夾下的所有檔案。

這一步完成後,我們還有一個非常重要的步驟。

hosts

檔案中添加一行:

192.168.10.10 phantastic.test
           

注意:請根據你

Hometead.yaml

檔案中的

ip

進行相應的修改,例如

192.168.10.10

Windows的hosts檔案在以下路徑:

C:\Windows\System32\drivers\etc\
           

用notepad++打開即可:

# Copyright (c) 1993-2009 Microsoft Corp.                                           
#                                 
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.                                
#                                                  
# This file contains the mappings of IP addresses to host names. Each                                
# entry should be kept on an individual line. The IP address should                                
# be placed in the first column followed by the corresponding host name.                                         
# The IP address and the host name should be separated by at least one                                         
# space.                                          
#                                            
# Additionally, comments (such as these) may be inserted on individual                                         
# lines or following the machine name denoted by a '#' symbol.                                           
#                                          
# For example:                                         
#                                                    
#      102.54.94.97     rhino.acme.com          # source server                                         
#       38.25.63.10     x.acme.com              # x client host                                        
# localhost name resolution is handled within DNS itself.                                         
#	127.0.0.1       localhost                                           
#	::1             localhost                                          
   
# 添加上這一行,将phantastic.test替換成自己的項目名稱                                         
192.168.10.10 phantastic.test
           

這裡我們需要将項目位址解析到對應的虛拟機

IP

192.168.10.10

)。

然後我們以管理者權限儲存

hosts

檔案。

接下來我們來看最後一段配置:

databases:                                
    - homestead
           

這段配置指定了我們虛拟機中MySQL的資料庫名,我們每新添加一個資料庫名字,那麼Homestead将會自動建立一個該名字的資料庫來供我們操作。

在這裡,我添加了兩個新的資料庫,并删除了原始配置中的

homestead

資料庫:

databases:                                
    - phantastic                                
    - eagle
           
注意:配置檔案中不要使用

tab

來留白,否則可能會報錯(可以用空格對齊)。
虛拟機環境下預設的MySQL伺服器管理者使用者名為

homestead

,密碼是

secret

。推薦使用

phpmyadmin

adminer.php

來進行資料庫管理,當然如果你

hardcore

,直接

mysql -u homestead -p

也可以。
另外每個項目如果需要更改項目預設使用的資料庫等配置,可以在建立Laravel項目後配置根目錄下的.env檔案 詳情請檢視 Laravel 5+

.env

環境配置檔案詳解

至此,Homestead就配置完成了。我們将

Homestead.yaml

儲存,然後嘗試啟動虛拟機!(激動嗎;)?)

以管理者的身份打開

Git Bash

,輸入

$ cd ~/homestead                                
$ vagrant up
           
Windows 7/8/10 系統下Laravel架構的開發環境安裝及部署詳解(Vagrant + Homestead)

我們會看到,Vagrant已經順利運作了(Windows環境下

vagrant up

不需要加

sudo

)!

接下來,要進入Homestead,我們輸入

$ vagrant ssh
           

進入虛拟機環境後:

# cd 進入我們共享的檔案夾 (請根據你配置中的映射目錄來輸入相應檔案夾)                                
$ cd /var/www                                
   
# 建立一個新的laravel項目                                
$ laravel new eagles_new_project
           

現在我們就可以開始Laravel的開發了!

注意:如果你

vagrant up

後,卡在

ssh

指令,很久後顯示逾時,那麼請重新開機系統進入BIOS,将Intel的VT-x功能開啟并儲存再繼續即可。