laravel Windows 7/8/10 系統下Laravel框架的開發環境安裝及部署詳解(Vagrant + Homestead)
注意! laravel/homestead box
專案地址已經不再是原來的
而已經變更成
如果是剛剛接觸Laravel
的朋友,請直接按文中步驟操作。
需要更新及重灌的朋友們請注意使用第二個地址來進行文中操作。
雖然我通常習慣在Linux
環境下工作,但對於一個從小就接觸Windows
的人來說,能夠在Windows
系統環境下進行程式的開發,對於我來說也不可或缺。那麼今天我們就一起來看一下如何在Windows 10
Laravel
的開發。
如果你的系統上已經安裝了PHP
,Apache
或NGINX
,並且有偏愛的資料庫系統,那麼基本上你已經可以開始寫程式碼了。但是我強烈推薦你使用Vagrant
或者Docker
來進行開發,因為不需要獨立安裝和考慮更新零碎部件的問題,所有工具都已經整合。我們今天要介紹的是在Homestead
中進行Laravel
的開發。
如果你有點混亂,沒關係,接著往下看。
Vagrant
是一款基於Virtual Box
的虛擬機器環境,可以安裝多種Box
(盒子,即預先配置好的開發環境),達到多種開發環境可以快速切換並且不需要擔心包裹的依賴性問題(Package Dependencies
Homestead
是Laravel
官方建立的Vagrant
盒子,虛擬機器的環境目前搭載的是Ubuntu 16.04 LTS
,已經集成了Laravel
所需的開發環境及工具,包含了最新版本的PHP
,MySQL
以及NGINX
伺服器。
那麼我們需要做的幾個步驟如下:
- 下載並安裝Git Bash
- 下載並安裝Vagrant
- 下載並安裝Virtual Box。
- 下載Homestead盒子及盒子配置檔案。
- 建立一個新的Laravel專案。
我們需要的工具:
- Git Bash
- Vagrant
- Virtual Box
- Homestead
注意:Laravel
官方推薦的Shell
是Git Bash
。因為Git Bash
自動將~(tilde)
對映到使用者根目錄下(例如,C:\Users\Eagle
),而如果使用Windows
自帶的cmd
,那麼需要使用%HOMEDRIVE%%HOMEPATH%
環境變數來進入正確的資料夾。
好了那麼我們開始行動!首先需要我們先下載Git Bash
:
官網地址:
下載地址:
https://github.com/git-for-windows/git/releases/tag/v2.17.0.windows.1
直接下載可能很慢,我們可以右鍵複製下載連結,使用迅雷等下載工具下載。
安裝Git Bash
很簡單,按預設選項安裝就可了。
完成後,我們就可以進行下一步了:
安裝Vagrant
及Virtual Box
。
Vagrant
的下載地址:
請選擇Windows
版本進行下載並安裝。
Virtual Box
的下載地址:
請選擇Windows hosts
下載Windows
版本並安裝。
注意:若下載最新
5.2+
版本的VirtualBox
,請確保你的Vagrant
版本在2.0
以上,因為新版的VirtualBox
與Vagrant
老版本不相容。
完成之後,我們就可以開始安裝Homestead
了。
如果你在國外,或者你所在的地區對於CLI
方式下載安裝Homestead
網速沒有問題,那麼可以開啟Git Bash
,輸入
$ vagrant box add laravel/homestead
以上命令將會自動下載及安裝Homestead
盒子。
如果以上命令下載速度很慢那麼我們需要切換到手動模式來安裝。
首先我們需要到以下地址下載最新版本(目前為6.3.0
)的Homestead
盒子(可以使用下載工具下載):
https://app.vagrantup.com/laravel/boxes/homestead/versions/6.3.0/providers/virtualbox.box
https://vagrantcloud.com/laravel/boxes/homestead/versions/6.3.0/providers/virtualbox.box
注意:如果你需要下載不同版本(或最新版本),請將以上地址中
versions/
後的數字版本號替換成相應的版本號。
下載完成後,我們將下載的檔案命名為Homestead-6.3.0.box
。接下來,我們cd
到相應的資料夾(假設下載檔案目錄在Downloads
資料夾下,執行以下命令:
$ vagrant box add laravel/homestead ./Homestead-6.3.0.box
輸入命令後,會開始匯入並安裝我們下載的Homestead
盒子。
完成後,你會發現自己的使用者資料夾裡多出了一個名為.vagrant.d
的資料夾
C:\Users\MyUserName\vagrant.d
接下來,非常重要的一個步驟:
我們開啟這個資料夾,找到以下路徑(請將MyUserName
替換成你的系統使用者名稱):
C:\Users\MyUserName\vagrant.d\boxes\laravel-VAGRANTSLASH-homestead
將資料夾中名為0
的資料夾改名為我們下載的Homestead
的版本號,即6.3.0
。
然後在該資料夾下新建一個叫metadata_url
的空白檔案 (注意不要有任何檔名字尾,如果你的系統設定了自動隱藏字尾名,請將隱藏去掉,確認檔案無任何字尾):
檔案的內容裡,新增以下連結:
注意,不要留任何空白字元,儲存檔案。
完成之後,我們就可以開始配置Homestead
了。
在Git Bash
裡輸入
$ git clone https://github.com/laravel/homestead.git ~/homestead
該命令會將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: "192.168.10.10"
這個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
如圖,系統會詢問我們將私鑰儲存在什麼位置,這裡由於我們已經處於~/.ssh
資料夾下(上一步cd
操作),我們可以直接輸入我們需要命名的檔名。
提示:圖片中我用的資料夾名為example
,純粹是用來示例的,請大家將祕鑰按上面敘述的步驟放至~/.ssh
資料夾,並將檔名稱命名為id_rsa
。這裡其實名稱可以自己取,但是我們在演示中直接保留預設檔名(該步驟不輸入任何文字直接回車即可)。
上一步完成後,我們看到系統提示我們輸入密碼。這裡我們可以直接回車密碼留空,因為我們在本地開發,可以省去密碼這個步驟。
該步驟完成後,我們會在~/.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/public
這個資料夾,即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
我們會看到,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
功能開啟並儲存再繼續即可。